Merge "Remove 'prefsnologin' message, don't use 'watchnologin' where inappropriate"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Sat, 23 Nov 2013 20:31:35 +0000 (20:31 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sat, 23 Nov 2013 20:31:35 +0000 (20:31 +0000)
723 files changed:
.gitignore
RELEASE-NOTES-1.22
RELEASE-NOTES-1.23
docs/README
docs/hooks.txt
docs/maintenance.txt
extensions/README
includes/Action.php
includes/Article.php
includes/AutoLoader.php
includes/Block.php
includes/ChangeTags.php
includes/DefaultSettings.php
includes/EditPage.php
includes/Export.php
includes/GlobalFunctions.php
includes/HTMLForm.php
includes/Hooks.php
includes/Html.php
includes/ImagePage.php
includes/Linker.php
includes/OutputPage.php
includes/PageQueryPage.php
includes/ProxyTools.php
includes/Sanitizer.php
includes/Setup.php
includes/Skin.php
includes/SkinTemplate.php
includes/SpecialPage.php
includes/SpecialPageFactory.php
includes/Status.php
includes/Title.php
includes/User.php
includes/UserMailer.php
includes/WebRequest.php
includes/WikiFilePage.php
includes/WikiPage.php
includes/actions/CachedAction.php
includes/actions/CreditsAction.php
includes/actions/DeleteAction.php
includes/actions/EditAction.php
includes/actions/HistoryAction.php
includes/actions/InfoAction.php
includes/actions/MarkpatrolledAction.php
includes/actions/ProtectAction.php
includes/actions/RawAction.php
includes/actions/RenderAction.php
includes/actions/RevertAction.php
includes/actions/RevisiondeleteAction.php
includes/actions/RollbackAction.php
includes/actions/ViewAction.php
includes/actions/WatchAction.php
includes/api/ApiBase.php
includes/api/ApiBlock.php
includes/api/ApiComparePages.php
includes/api/ApiCreateAccount.php
includes/api/ApiDelete.php
includes/api/ApiEditPage.php
includes/api/ApiEmailUser.php
includes/api/ApiFeedContributions.php
includes/api/ApiFeedWatchlist.php
includes/api/ApiFileRevert.php
includes/api/ApiFormatBase.php
includes/api/ApiFormatJson.php
includes/api/ApiFormatRaw.php
includes/api/ApiFormatWddx.php
includes/api/ApiFormatXml.php
includes/api/ApiHelp.php
includes/api/ApiImageRotate.php
includes/api/ApiImport.php
includes/api/ApiLogin.php
includes/api/ApiMain.php
includes/api/ApiModuleManager.php
includes/api/ApiMove.php
includes/api/ApiOpenSearch.php
includes/api/ApiOptions.php
includes/api/ApiPageSet.php
includes/api/ApiParamInfo.php
includes/api/ApiParse.php
includes/api/ApiPatrol.php
includes/api/ApiProtect.php
includes/api/ApiPurge.php
includes/api/ApiQuery.php
includes/api/ApiQueryAllCategories.php
includes/api/ApiQueryAllImages.php
includes/api/ApiQueryAllLinks.php
includes/api/ApiQueryAllMessages.php
includes/api/ApiQueryAllPages.php
includes/api/ApiQueryAllUsers.php
includes/api/ApiQueryBacklinks.php
includes/api/ApiQueryBase.php
includes/api/ApiQueryBlocks.php
includes/api/ApiQueryCategories.php
includes/api/ApiQueryCategoryInfo.php
includes/api/ApiQueryCategoryMembers.php
includes/api/ApiQueryDeletedrevs.php
includes/api/ApiQueryDuplicateFiles.php
includes/api/ApiQueryExtLinksUsage.php
includes/api/ApiQueryExternalLinks.php
includes/api/ApiQueryFileRepoInfo.php
includes/api/ApiQueryFilearchive.php
includes/api/ApiQueryIWBacklinks.php
includes/api/ApiQueryIWLinks.php
includes/api/ApiQueryImageInfo.php
includes/api/ApiQueryImages.php
includes/api/ApiQueryInfo.php
includes/api/ApiQueryLangBacklinks.php
includes/api/ApiQueryLangLinks.php
includes/api/ApiQueryLinks.php
includes/api/ApiQueryLogEvents.php
includes/api/ApiQueryORM.php
includes/api/ApiQueryPagePropNames.php
includes/api/ApiQueryPageProps.php
includes/api/ApiQueryPagesWithProp.php
includes/api/ApiQueryProtectedTitles.php
includes/api/ApiQueryQueryPage.php
includes/api/ApiQueryRandom.php
includes/api/ApiQueryRecentChanges.php
includes/api/ApiQueryRevisions.php
includes/api/ApiQuerySearch.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiQueryStashImageInfo.php
includes/api/ApiQueryTags.php
includes/api/ApiQueryUserContributions.php
includes/api/ApiQueryUserInfo.php
includes/api/ApiQueryUsers.php
includes/api/ApiQueryWatchlist.php
includes/api/ApiQueryWatchlistRaw.php
includes/api/ApiResult.php
includes/api/ApiRollback.php
includes/api/ApiRsd.php
includes/api/ApiSetNotificationTimestamp.php
includes/api/ApiTokens.php
includes/api/ApiUnblock.php
includes/api/ApiUndelete.php
includes/api/ApiUpload.php
includes/api/ApiUserrights.php
includes/api/ApiWatch.php
includes/cache/BacklinkCache.php
includes/cache/CacheDependency.php
includes/cache/FileCacheBase.php
includes/cache/GenderCache.php
includes/cache/HTMLFileCache.php
includes/cache/LinkBatch.php
includes/cache/LinkCache.php
includes/cache/LocalisationCache.php
includes/cache/MessageCache.php
includes/cache/ProcessCacheLRU.php
includes/cache/ResourceFileCache.php
includes/cache/UserCache.php
includes/changes/ChangesList.php
includes/changes/EnhancedChangesList.php
includes/changes/OldChangesList.php
includes/changes/RCCacheEntry.php
includes/changes/RecentChange.php
includes/clientpool/RedisConnectionPool.php
includes/content/AbstractContent.php
includes/content/Content.php
includes/content/ContentHandler.php
includes/content/CssContentHandler.php
includes/content/JavaScriptContentHandler.php
includes/content/MessageContent.php
includes/content/TextContent.php
includes/content/TextContentHandler.php
includes/content/WikitextContent.php
includes/content/WikitextContentHandler.php
includes/context/ContextSource.php
includes/context/DerivativeContext.php
includes/context/RequestContext.php
includes/dao/DBAccessBase.php
includes/db/ChronologyProtector.php
includes/db/CloneDatabase.php
includes/db/Database.php
includes/db/DatabaseError.php
includes/db/DatabaseMssql.php
includes/db/DatabaseMysql.php
includes/db/DatabaseMysqlBase.php
includes/db/DatabaseMysqli.php
includes/db/DatabaseOracle.php
includes/db/DatabasePostgres.php
includes/db/DatabaseSqlite.php
includes/db/DatabaseUtility.php
includes/db/IORMRow.php
includes/db/IORMTable.php
includes/db/LBFactory.php
includes/db/LBFactory_Multi.php
includes/db/LoadBalancer.php
includes/db/LoadMonitor.php
includes/db/ORMIterator.php
includes/db/ORMResult.php
includes/db/ORMRow.php
includes/db/ORMTable.php
includes/debug/Debug.php
includes/deferred/CallableUpdate.php
includes/deferred/DataUpdate.php
includes/deferred/DeferredUpdates.php
includes/deferred/HTMLCacheUpdate.php
includes/deferred/LinksUpdate.php
includes/deferred/SearchUpdate.php
includes/deferred/SiteStatsUpdate.php
includes/deferred/SqlDataUpdate.php
includes/deferred/SquidUpdate.php
includes/deferred/ViewCountUpdate.php
includes/diff/ArrayDiffFormatter.php [new file with mode: 0644]
includes/diff/DairikiDiff.php
includes/diff/DiffFormatter.php [new file with mode: 0644]
includes/diff/DifferenceEngine.php
includes/diff/TableDiffFormatter.php [new file with mode: 0644]
includes/diff/UnifiedDiffFormatter.php [new file with mode: 0644]
includes/diff/WikiDiff3.php
includes/externalstore/ExternalStoreMedium.php
includes/externalstore/ExternalStoreMwstore.php
includes/filebackend/FSFile.php
includes/filebackend/FSFileBackend.php
includes/filebackend/FileBackend.php
includes/filebackend/FileBackendGroup.php
includes/filebackend/FileBackendMultiWrite.php
includes/filebackend/FileBackendStore.php
includes/filebackend/FileOp.php
includes/filebackend/FileOpBatch.php
includes/filebackend/SwiftFileBackend.php
includes/filebackend/TempFSFile.php
includes/filebackend/filejournal/DBFileJournal.php
includes/filebackend/filejournal/FileJournal.php
includes/filebackend/lockmanager/DBLockManager.php
includes/filebackend/lockmanager/FSLockManager.php
includes/filebackend/lockmanager/LSLockManager.php
includes/filebackend/lockmanager/LockManager.php
includes/filebackend/lockmanager/LockManagerGroup.php
includes/filebackend/lockmanager/MemcLockManager.php
includes/filebackend/lockmanager/QuorumLockManager.php
includes/filebackend/lockmanager/RedisLockManager.php
includes/filebackend/lockmanager/ScopedLock.php
includes/filerepo/FileRepo.php
includes/filerepo/ForeignAPIRepo.php
includes/filerepo/file/LocalFile.php
includes/gallery/ImageGalleryBase.php
includes/gallery/TraditionalImageGallery.php
includes/installer/DatabaseInstaller.php
includes/installer/DatabaseUpdater.php
includes/installer/LocalSettingsGenerator.php
includes/installer/PostgresUpdater.php
includes/installer/WebInstaller.php
includes/installer/WebInstallerOutput.php
includes/job/aggregator/JobQueueAggregatorRedis.php
includes/job/jobs/HTMLCacheUpdateJob.php
includes/job/jobs/PublishStashedFileJob.php
includes/media/Bitmap.php
includes/media/BitmapMetadataHandler.php
includes/media/Exif.php
includes/media/FormatMetadata.php
includes/media/IPTC.php
includes/media/ImageHandler.php
includes/media/MediaHandler.php
includes/media/SVGMetadataExtractor.php
includes/media/XMP.php
includes/media/XMPInfo.php
includes/objectcache/SqlBagOStuff.php
includes/parser/CacheTime.php
includes/parser/CoreParserFunctions.php
includes/parser/ParserCache.php
includes/parser/ParserOptions.php
includes/parser/ParserOutput.php
includes/parser/Preprocessor_DOM.php
includes/profiler/ProfilerSimpleUDP.php
includes/rcfeed/JSONRCFeedFormatter.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/revisiondelete/RevisionDeleter.php
includes/specials/SpecialAllpages.php
includes/specials/SpecialChangePassword.php
includes/specials/SpecialContributions.php
includes/specials/SpecialExpandTemplates.php [new file with mode: 0644]
includes/specials/SpecialImport.php
includes/specials/SpecialLinkSearch.php
includes/specials/SpecialListfiles.php
includes/specials/SpecialListredirects.php
includes/specials/SpecialLog.php
includes/specials/SpecialPasswordReset.php
includes/specials/SpecialRandomInCategory.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialSearch.php
includes/specials/SpecialSpecialpages.php
includes/specials/SpecialUpload.php
includes/specials/SpecialUploadStash.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialWatchlist.php
includes/templates/Usercreate.php
includes/templates/Userlogin.php
includes/upload/UploadBase.php
includes/upload/UploadFromChunks.php
includes/utils/Cdb.php
includes/utils/CdbDBA.php [new file with mode: 0644]
includes/utils/CdbPHP.php
index.php
languages/Language.php
languages/LanguageConverter.php
languages/Names.php
languages/classes/LanguageBs.php
languages/classes/LanguageKk_cyrl.php
languages/classes/LanguageOs.php
languages/classes/LanguageTr.php
languages/classes/LanguageTyv.php
languages/messages/MessagesAce.php
languages/messages/MessagesAeb.php
languages/messages/MessagesAf.php
languages/messages/MessagesAln.php
languages/messages/MessagesAm.php
languages/messages/MessagesAn.php
languages/messages/MessagesAng.php
languages/messages/MessagesAr.php
languages/messages/MessagesArc.php
languages/messages/MessagesArn.php
languages/messages/MessagesAry.php
languages/messages/MessagesArz.php
languages/messages/MessagesAs.php
languages/messages/MessagesAst.php
languages/messages/MessagesAvk.php
languages/messages/MessagesAz.php
languages/messages/MessagesAzb.php
languages/messages/MessagesBa.php
languages/messages/MessagesBar.php
languages/messages/MessagesBcc.php
languages/messages/MessagesBcl.php
languages/messages/MessagesBe.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesBg.php
languages/messages/MessagesBjn.php
languages/messages/MessagesBn.php
languages/messages/MessagesBpy.php
languages/messages/MessagesBr.php
languages/messages/MessagesBs.php
languages/messages/MessagesCa.php
languages/messages/MessagesCdo.php
languages/messages/MessagesCe.php
languages/messages/MessagesCeb.php
languages/messages/MessagesCh.php
languages/messages/MessagesCkb.php
languages/messages/MessagesCps.php
languages/messages/MessagesCrh_cyrl.php
languages/messages/MessagesCrh_latn.php
languages/messages/MessagesCs.php
languages/messages/MessagesCsb.php
languages/messages/MessagesCu.php
languages/messages/MessagesCy.php
languages/messages/MessagesDa.php
languages/messages/MessagesDe.php
languages/messages/MessagesDiq.php
languages/messages/MessagesDsb.php
languages/messages/MessagesDtp.php
languages/messages/MessagesEl.php
languages/messages/MessagesEn.php
languages/messages/MessagesEo.php
languages/messages/MessagesEs.php
languages/messages/MessagesEt.php
languages/messages/MessagesEu.php
languages/messages/MessagesExt.php
languages/messages/MessagesFa.php
languages/messages/MessagesFi.php
languages/messages/MessagesFo.php
languages/messages/MessagesFr.php
languages/messages/MessagesFrp.php
languages/messages/MessagesFrr.php
languages/messages/MessagesFur.php
languages/messages/MessagesFy.php
languages/messages/MessagesGa.php
languages/messages/MessagesGag.php
languages/messages/MessagesGan_hans.php
languages/messages/MessagesGan_hant.php
languages/messages/MessagesGd.php
languages/messages/MessagesGl.php
languages/messages/MessagesGom_latn.php
languages/messages/MessagesGrc.php
languages/messages/MessagesGsw.php
languages/messages/MessagesGu.php
languages/messages/MessagesGv.php
languages/messages/MessagesHak.php
languages/messages/MessagesHaw.php
languages/messages/MessagesHe.php
languages/messages/MessagesHi.php
languages/messages/MessagesHif_latn.php
languages/messages/MessagesHil.php
languages/messages/MessagesHr.php
languages/messages/MessagesHsb.php
languages/messages/MessagesHt.php
languages/messages/MessagesHu.php
languages/messages/MessagesHy.php
languages/messages/MessagesIa.php
languages/messages/MessagesId.php
languages/messages/MessagesIe.php
languages/messages/MessagesIg.php
languages/messages/MessagesIlo.php
languages/messages/MessagesInh.php
languages/messages/MessagesIo.php
languages/messages/MessagesIs.php
languages/messages/MessagesIt.php
languages/messages/MessagesJa.php
languages/messages/MessagesJam.php
languages/messages/MessagesJv.php
languages/messages/MessagesKa.php
languages/messages/MessagesKaa.php
languages/messages/MessagesKab.php
languages/messages/MessagesKbd_cyrl.php
languages/messages/MessagesKhw.php
languages/messages/MessagesKiu.php
languages/messages/MessagesKk_arab.php
languages/messages/MessagesKk_cyrl.php
languages/messages/MessagesKk_latn.php
languages/messages/MessagesKm.php
languages/messages/MessagesKn.php
languages/messages/MessagesKo.php
languages/messages/MessagesKoi.php
languages/messages/MessagesKrc.php
languages/messages/MessagesKsh.php
languages/messages/MessagesKu_latn.php
languages/messages/MessagesKy.php
languages/messages/MessagesLa.php
languages/messages/MessagesLad.php
languages/messages/MessagesLb.php
languages/messages/MessagesLez.php
languages/messages/MessagesLfn.php
languages/messages/MessagesLg.php
languages/messages/MessagesLi.php
languages/messages/MessagesLij.php
languages/messages/MessagesLiv.php
languages/messages/MessagesLmo.php
languages/messages/MessagesLo.php
languages/messages/MessagesLoz.php
languages/messages/MessagesLrc.php [new file with mode: 0644]
languages/messages/MessagesLt.php
languages/messages/MessagesLtg.php
languages/messages/MessagesLus.php
languages/messages/MessagesLv.php
languages/messages/MessagesLzh.php
languages/messages/MessagesMai.php
languages/messages/MessagesMap_bms.php
languages/messages/MessagesMdf.php
languages/messages/MessagesMg.php
languages/messages/MessagesMhr.php
languages/messages/MessagesMin.php
languages/messages/MessagesMk.php
languages/messages/MessagesMl.php
languages/messages/MessagesMn.php
languages/messages/MessagesMr.php
languages/messages/MessagesMs.php
languages/messages/MessagesMt.php
languages/messages/MessagesMwl.php
languages/messages/MessagesMy.php
languages/messages/MessagesMyv.php
languages/messages/MessagesNah.php
languages/messages/MessagesNan.php
languages/messages/MessagesNap.php
languages/messages/MessagesNb.php
languages/messages/MessagesNds.php
languages/messages/MessagesNds_nl.php
languages/messages/MessagesNe.php
languages/messages/MessagesNl.php
languages/messages/MessagesNn.php
languages/messages/MessagesNso.php
languages/messages/MessagesOc.php
languages/messages/MessagesOr.php
languages/messages/MessagesOs.php
languages/messages/MessagesPa.php
languages/messages/MessagesPam.php
languages/messages/MessagesPcd.php
languages/messages/MessagesPdc.php
languages/messages/MessagesPfl.php
languages/messages/MessagesPl.php
languages/messages/MessagesPms.php
languages/messages/MessagesPnb.php
languages/messages/MessagesPnt.php
languages/messages/MessagesPrg.php
languages/messages/MessagesPs.php
languages/messages/MessagesPt.php
languages/messages/MessagesPt_br.php
languages/messages/MessagesQqq.php
languages/messages/MessagesQu.php
languages/messages/MessagesQug.php
languages/messages/MessagesRm.php
languages/messages/MessagesRo.php
languages/messages/MessagesRoa_tara.php
languages/messages/MessagesRu.php
languages/messages/MessagesRue.php
languages/messages/MessagesSa.php
languages/messages/MessagesSah.php
languages/messages/MessagesSat.php
languages/messages/MessagesSc.php
languages/messages/MessagesScn.php
languages/messages/MessagesSco.php
languages/messages/MessagesSd.php
languages/messages/MessagesSdc.php
languages/messages/MessagesSe.php
languages/messages/MessagesSgs.php
languages/messages/MessagesSh.php
languages/messages/MessagesShi.php
languages/messages/MessagesSi.php
languages/messages/MessagesSk.php
languages/messages/MessagesSl.php
languages/messages/MessagesSli.php
languages/messages/MessagesSo.php
languages/messages/MessagesSq.php
languages/messages/MessagesSr_ec.php
languages/messages/MessagesSr_el.php
languages/messages/MessagesSrn.php
languages/messages/MessagesStq.php
languages/messages/MessagesSu.php
languages/messages/MessagesSv.php
languages/messages/MessagesSw.php
languages/messages/MessagesSzl.php
languages/messages/MessagesTa.php
languages/messages/MessagesTcy.php
languages/messages/MessagesTe.php
languages/messages/MessagesTet.php
languages/messages/MessagesTg_cyrl.php
languages/messages/MessagesTg_latn.php
languages/messages/MessagesTh.php
languages/messages/MessagesTk.php
languages/messages/MessagesTl.php
languages/messages/MessagesTly.php
languages/messages/MessagesTo.php
languages/messages/MessagesTr.php
languages/messages/MessagesTru.php
languages/messages/MessagesTs.php
languages/messages/MessagesTt_cyrl.php
languages/messages/MessagesTt_latn.php
languages/messages/MessagesTyv.php
languages/messages/MessagesUg_arab.php
languages/messages/MessagesUk.php
languages/messages/MessagesUr.php
languages/messages/MessagesUz.php
languages/messages/MessagesVec.php
languages/messages/MessagesVep.php
languages/messages/MessagesVi.php
languages/messages/MessagesVmf.php
languages/messages/MessagesVo.php
languages/messages/MessagesVot.php
languages/messages/MessagesVro.php
languages/messages/MessagesWa.php
languages/messages/MessagesWar.php
languages/messages/MessagesWo.php
languages/messages/MessagesWuu.php
languages/messages/MessagesXal.php
languages/messages/MessagesXmf.php
languages/messages/MessagesYi.php
languages/messages/MessagesYo.php
languages/messages/MessagesYue.php
languages/messages/MessagesZea.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
languages/utils/CLDRPluralRuleEvaluator.php
maintenance/Maintenance.php
maintenance/archives/patch-val_ip.sql [deleted file]
maintenance/archives/patch-validate.sql [deleted file]
maintenance/backup.inc
maintenance/backupTextPass.inc
maintenance/benchmarks/bench_wfIsWindows.php
maintenance/cdb.php
maintenance/cleanupUploadStash.php
maintenance/copyFileBackend.php
maintenance/dictionary/mediawiki.dic
maintenance/doMaintenance.php
maintenance/dumpIterator.php
maintenance/dumpTextPass.php
maintenance/dumpUploads.php
maintenance/fuzz-tester.php [deleted file]
maintenance/generateSitemap.php
maintenance/language/StatOutputs.php
maintenance/language/checkDupeMessages.php
maintenance/language/checkLanguage.inc
maintenance/language/countMessages.php
maintenance/language/generateCollationData.php
maintenance/language/generateNormalizerData.php
maintenance/language/langmemusage.php
maintenance/language/languages.inc
maintenance/language/messageTypes.inc
maintenance/language/messages.inc
maintenance/language/rebuildLanguage.php
maintenance/language/transstat.php
maintenance/language/validate.php
maintenance/language/writeMessagesArray.inc
maintenance/language/zhtable/trad2simp_supp_unset.manual [deleted file]
maintenance/locking/LockServerDaemon.php
maintenance/mergeMessageFileList.php
maintenance/moveBatch.php
maintenance/mssql/tables.sql
maintenance/oracle/archives/patch_16_17_schema_changes.sql
maintenance/oracle/tables.sql
maintenance/postgres/mediawiki_mysql2postgres.pl
maintenance/purgeChangedFiles.php
maintenance/reassignEdits.php
maintenance/rebuildLocalisationCache.php
maintenance/rebuildrecentchanges.php
maintenance/refreshImageMetadata.php
maintenance/runBatchedQuery.php
maintenance/showCacheStats.php
maintenance/sqlite/archives/initial-indexes.sql
maintenance/storage/checkStorage.php
maintenance/storage/testCompression.php
maintenance/storage/trackBlobs.php
maintenance/tables.sql
maintenance/update.php
maintenance/userOptions.inc
resources/Resources.php
resources/jquery/jquery.placeholder.js
resources/mediawiki.action/mediawiki.action.edit.js
resources/mediawiki.special/mediawiki.special.changeemail.js
resources/mediawiki.ui/components/default/buttons.less [new file with mode: 0644]
resources/mediawiki.ui/components/default/forms.less [new file with mode: 0644]
resources/mediawiki.ui/components/utilities.less [new file with mode: 0644]
resources/mediawiki.ui/components/vector/buttons.less [new file with mode: 0644]
resources/mediawiki.ui/components/vector/containers.less [new file with mode: 0644]
resources/mediawiki.ui/components/vector/forms.less [new file with mode: 0644]
resources/mediawiki.ui/default.less [new file with mode: 0644]
resources/mediawiki.ui/mediawiki.ui.default.css [deleted file]
resources/mediawiki.ui/mediawiki.ui.vector.css [deleted file]
resources/mediawiki.ui/mixins/effects.less [new file with mode: 0644]
resources/mediawiki.ui/mixins/forms.less [new file with mode: 0644]
resources/mediawiki.ui/mixins/type.less [new file with mode: 0644]
resources/mediawiki.ui/mixins/utilities.less [new file with mode: 0644]
resources/mediawiki.ui/settings/colors.less [new file with mode: 0644]
resources/mediawiki.ui/settings/typography.less [new file with mode: 0644]
resources/mediawiki.ui/sourcefiles/Makefile [deleted file]
resources/mediawiki.ui/sourcefiles/config.rb [deleted file]
resources/mediawiki.ui/sourcefiles/scss/components/_default.scss [deleted file]
resources/mediawiki.ui/sourcefiles/scss/components/_utilities.scss [deleted file]
resources/mediawiki.ui/sourcefiles/scss/components/_vector.scss [deleted file]
resources/mediawiki.ui/sourcefiles/scss/components/default/_buttons.scss [deleted file]
resources/mediawiki.ui/sourcefiles/scss/components/default/_forms.scss [deleted file]
resources/mediawiki.ui/sourcefiles/scss/components/vector/_buttons.scss [deleted file]
resources/mediawiki.ui/sourcefiles/scss/components/vector/_containers.scss [deleted file]
resources/mediawiki.ui/sourcefiles/scss/components/vector/_forms.scss [deleted file]
resources/mediawiki.ui/sourcefiles/scss/mediawiki.ui.default.scss [deleted file]
resources/mediawiki.ui/sourcefiles/scss/mediawiki.ui.vector.scss [deleted file]
resources/mediawiki.ui/sourcefiles/scss/mixins/_all.scss [deleted file]
resources/mediawiki.ui/sourcefiles/scss/mixins/_effects.scss [deleted file]
resources/mediawiki.ui/sourcefiles/scss/mixins/_forms.scss [deleted file]
resources/mediawiki.ui/sourcefiles/scss/mixins/_type.scss [deleted file]
resources/mediawiki.ui/sourcefiles/scss/mixins/_utilities.scss [deleted file]
resources/mediawiki.ui/sourcefiles/scss/settings/_all.scss [deleted file]
resources/mediawiki.ui/sourcefiles/scss/settings/_colors.scss [deleted file]
resources/mediawiki.ui/sourcefiles/scss/settings/_typography.scss [deleted file]
resources/mediawiki.ui/vector.less [new file with mode: 0644]
resources/mediawiki/mediawiki.Title.js
resources/mediawiki/mediawiki.hlist.css [new file with mode: 0644]
resources/mediawiki/mediawiki.hlist.js [new file with mode: 0644]
resources/mediawiki/mediawiki.js
resources/mediawiki/mediawiki.util.js
skins/CologneBlue.php
skins/MonoBook.php
skins/common/commonPrint.css
skins/common/images/feed-icon.svg [new file with mode: 0644]
skins/common/shared.css
skins/modern/print.css
skins/vector/screen.less
tests/TestsAutoLoader.php
tests/parser/parserTests.txt
tests/phpunit/MediaWikiPHPUnitCommand.php
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/data/db/sqlite/tables-1.13.sql
tests/phpunit/includes/ArticleTablesTest.php
tests/phpunit/includes/EditPageTest.php
tests/phpunit/includes/ExceptionTest.php
tests/phpunit/includes/FallbackTest.php
tests/phpunit/includes/GlobalFunctions/GlobalTest.php
tests/phpunit/includes/MWExceptionHandlerTest.php
tests/phpunit/includes/PathRouterTest.php
tests/phpunit/includes/RecentChangeTest.php [deleted file]
tests/phpunit/includes/RevisionStorageTest.php
tests/phpunit/includes/RevisionStorageTest_ContentHandlerUseDB.php
tests/phpunit/includes/RevisionTest.php
tests/phpunit/includes/SpecialPageTest.php [new file with mode: 0644]
tests/phpunit/includes/StatusTest.php
tests/phpunit/includes/TitlePermissionTest.php
tests/phpunit/includes/UserMailerTest.php
tests/phpunit/includes/WikiPageTest.php
tests/phpunit/includes/XmlJsTest.php
tests/phpunit/includes/api/ApiEditPageTest.php
tests/phpunit/includes/api/ApiOptionsTest.php
tests/phpunit/includes/api/ApiTestContext.php
tests/phpunit/includes/api/ApiUploadTest.php
tests/phpunit/includes/api/MockApi.php
tests/phpunit/includes/api/RandomImageGenerator.php
tests/phpunit/includes/api/UserWrapper.php
tests/phpunit/includes/changes/RecentChangeTest.php [new file with mode: 0644]
tests/phpunit/includes/content/WikitextContentHandlerTest.php
tests/phpunit/includes/db/DatabaseMysqlBaseTest.php
tests/phpunit/includes/db/DatabaseTest.php
tests/phpunit/includes/debug/MWDebugTest.php
tests/phpunit/includes/diff/DifferenceEngineTest.php
tests/phpunit/includes/media/ExifRotationTest.php
tests/phpunit/includes/media/ExifTest.php
tests/phpunit/includes/media/FakeDimensionFile.php
tests/phpunit/includes/media/FormatMetadataTest.php
tests/phpunit/includes/media/JpegMetadataExtractorTest.php
tests/phpunit/includes/media/JpegTest.php
tests/phpunit/includes/media/PNGMetadataExtractorTest.php
tests/phpunit/includes/parser/TidyTest.php
tests/phpunit/includes/upload/UploadBaseTest.php
tests/phpunit/includes/utils/ZipDirectoryReaderTest.php
tests/phpunit/languages/LanguageSrTest.php
tests/phpunit/languages/LanguageTest.php
tests/phpunit/languages/LanguageUzTest.php
tests/phpunit/languages/utils/CLDRPluralRuleEvaluatorTest.php
tests/phpunit/maintenance/DumpTestCase.php
tests/phpunit/maintenance/MaintenanceTest.php
tests/phpunit/maintenance/backupPrefetchTest.php
tests/phpunit/maintenance/backupTextPassTest.php
tests/phpunit/maintenance/backup_LogTest.php
tests/phpunit/maintenance/backup_PageTest.php
tests/phpunit/maintenance/fetchTextTest.php
tests/phpunit/mocks/media/MockBitmapHandler.php
tests/phpunit/mocks/media/MockImageHandler.php [new file with mode: 0644]
tests/phpunit/mocks/media/MockSvgHandler.php [new file with mode: 0644]
tests/phpunit/phpunit.php
tests/phpunit/skins/SideBarTest.php
tests/phpunit/structure/AutoLoaderTest.php
tests/phpunit/structure/ResourcesTest.php
tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js
tests/testHelpers.inc
thumb.php

index 7d1a309..9c0c3b6 100644 (file)
@@ -41,7 +41,6 @@ sftp-config.json
 
 # Building & testing
 node_modules/
-.sass-cache/
 
 # Composer
 /vendor
index 1c364ff..333696b 100644 (file)
@@ -67,6 +67,8 @@ production.
 * Default value of $wgMaxShellMemory has been tripled (it's now 300 MB).
 
 === New features in 1.22 ===
+* You can now install extensions using Composer.
+  See https://www.mediawiki.org/wiki/Composer
 * (bug 44525) mediawiki.jqueryMsg can now parse (whitelisted) HTML elements and attributes.
 * (bug 33454) Language::sprintfDate now has a timezone parameter, and supports
   the "eIOPTZ" formatting characters.
@@ -253,7 +255,7 @@ production.
 * The 'UnwatchArticle' and 'WatchArticle' hooks now support a Status object
   instead of just a boolean return value to abort the hook.
 * Added a hook, SpecialWatchlistGetNonRevisionTypes, to allow extensions
-  with custom recentchanges entries to hook into the Watchlist without 
+  with custom recentchanges entries to hook into the Watchlist without
   clobbering each other.
 * A hidden, empty input field was added to the edit form, and any edit that fills
   it in will be rejected. This prevents against the simplest form of spambots.
@@ -351,6 +353,8 @@ production.
 * (bug 45288) Support mysqli PHP extension
 * (bug 55818) BREAKING CHANGE: Removed undocumented 'Debug' hook in wfDebug.
   This resolves an infinite loop when using $wgDebugFunctionEntry = true.
+* (bug 56707) Correct tooltip of "Next n results" on query special pages.
+* (bug 56770) mw.util.addPortletLink: Check length before access array index.
 
 === API changes in 1.22 ===
 * (bug 25553) The JSON output formatter now leaves forward slashes unescaped
@@ -423,15 +427,6 @@ changes to languages because of Bugzilla reports.
 * (bug 46751) Made Buryat (Russia) (буряад) (bxr) fallback to Russian.
 
 === Other changes in 1.22 ===
-* The rc_type field in the recentchanges table has been superseded by a new
-  rc_source field.  The rc_source field is a string representation of the
-  change type where rc_type was a numeric constant.  This field is not yet
-  queried but will be in a future point release of 1.22.  
-** Utilize update.php to create and populate this new field.  On larger wiki's
-   which do not wish to update recentchanges table in one large update please
-   review the sql and comments in maintenance/archives/patch-rc_source.sql.
-** The rc_type field of recentchanges will be deprecated in a future point
-   release.
 * BREAKING CHANGE: Implementation of MediaWiki's JS and JSON value encoding
   has changed:
 ** MediaWiki no longer supports PHP installations in which the native JSON
@@ -537,6 +532,8 @@ changes to languages because of Bugzilla reports.
   'mediawiki.legacy.wikibits' (which IEFixes depends on) and that will import
   IEFixes automatically if user agent conditions are met.
 * Code specific to the Math extension was marked as deprecated.
+* mediawiki.util: mw.util.wikiGetlink has been renamed to getUrl. (The old name
+  still works, but is deprecated.)
 
 == Compatibility ==
 
index 7cf5c8e..2d89dd2 100644 (file)
@@ -33,7 +33,12 @@ production.
 * (bug 6092) Add expensive parser functions {{REVISIONID:}}, {{REVISIONUSER:}}
   and {{REVISIONTIMESTAMP:}} (with friends).
 * Add "wgRelevantUserName" to mw.config containing the current
-  Skin::getRelevantUser value
+  Skin::getRelevantUser value.
+* (bug 56033) Add content model to the page information.
+* Added Article::MissingArticleConditions hook to give extensions a chance to
+  hide their (unrelated) log entries.
+* Added $wgOpenSearchDefaultLimit defining the default number of entries to show
+  on action=opensearch API call.
 
 === Bug fixes in 1.23 ===
 * (bug 41759) The "updated since last visit" markers (on history pages, recent
@@ -44,10 +49,17 @@ production.
   when the email address is already confirmed. Also, consistently use
   "confirmed", rather than "authenticated", when messaging whether or not the
   user has confirmed an email address.
+* (bug 56912) Show correct link color on cached result of Special:DeadendPages.
+* Classes TitleListDependency and TitleDependency have been removed, as they
+  have been found unused in core and extensions for a long time.
+* (bug 57098) SpecialPasswordReset now obeys returnto parameter
 
 === API changes in 1.23 ===
 * (bug 54884) action=parse&prop=categories now indicates hidden and missing
   categories.
+* action=query&meta=filerepoinfo now returns additional information for each
+  repo.
+* EditPage::spamPage() was deprecated since 1.17 and has been removed.
 
 === Languages updated in 1.23===
 
@@ -55,10 +67,23 @@ MediaWiki supports over 350 languages. Many localisations are updated
 regularly. Below only new and removed languages are listed, as well as
 changes to languages because of Bugzilla reports.
 
+* Support was added for Northern Luri (lrc)
+
 === Other changes in 1.23 ===
-* The global variable $wgArticle has been removed after a lengthy deprecation
-* mediawiki.util: mw.util.wikiGetlink has been renamed to getUrl. (The old name still
-  works, but is deprecated.)
+* The rc_type field in the recentchanges table has been superseded by a new
+  rc_source field.  The rc_source field is a string representation of the
+  change type where rc_type was a numeric constant.  This field is not yet
+  queried but will be in a future point release of 1.22.
+** Utilize update.php to create and populate this new field.  On larger wiki's
+   which do not wish to update recentchanges table in one large update please
+   review the sql and comments in maintenance/archives/patch-rc_source.sql.
+** The rc_type field of recentchanges will be deprecated in a future point
+   release.
+* The global variable $wgArticle has been removed after a lengthy deprecation.
+* The global functions addButton and insertTags (for mw.toolbar.addButton and
+  mw.toolbar.insertTags) now emits mw.log.warn when accessed.
+* User::getPageRenderingHash() was deprecated since 1.17 and has been removed.
+* The ExpandTemplates extension has been moved into MediaWiki core.
 
 == Compatibility ==
 
index 6917076..5bc8bfc 100644 (file)
@@ -1,16 +1,19 @@
-[July 22nd 2008]
+/docs Directory README
+======================
 
 The 'docs' directory contain various text files that should help you understand
 the most important parts of the code of MediaWiki. More in-depth documentation
-can be found at http://www.mediawiki.org/wiki/Manual:Code.
+can be found at:
+  https://www.mediawiki.org/wiki/Manual:Code
 
 API documentation is automatically generated and updated daily at:
-  http://svn.wikimedia.org/doc/
+  https://doc.wikimedia.org/mediawiki-core/master/php/html/
 
 You can get a fresh version using 'make doc' or mwdocgen.php in the
 ../maintenance/ directory.
 
 
-For end user / administrators, most of the documentation is located online at:
-  http://www.mediawiki.org/wiki/Help:Contents
-  http://www.mediawiki.org/wiki/Manual:Contents
+For end users, most of the documentation is located online at:
+  https://www.mediawiki.org/wiki/Help:Contents
+Documentation for MediaWiki site administrators is at:
+  https://www.mediawiki.org/wiki/Manual:Contents
index 7bd725a..834d008 100644 (file)
@@ -461,6 +461,13 @@ types.
 &$tokenTypes: supported token types in format 'type' => callback function
 used to retrieve this type of tokens.
 
+'Article::MissingArticleConditions': Before fetching deletion & move log entries
+to display a message of a non-existing page being deleted/moved, give extensions
+a chance to hide their (unrelated) log entries.
+&$conds: Array of query conditions (all of which have to be met; conditions will
+AND in the final query)
+$logTypes: Array of log types being queried
+
 'ArticleAfterFetchContent': After fetching content of an article from the
 database. DEPRECATED, use ArticleAfterFetchContentObject instead.
 $article: the article (object) being loaded from the database
@@ -765,7 +772,7 @@ $output: OutputPage object in use
 'CanIPUseHTTPS': Determine whether the client at a given source IP is likely
 to be able to access the wiki via HTTPS.
 $ip: The IP address in human-readable form
-&$canDo: This reference should be set to false if the client may not be able 
+&$canDo: This reference should be set to false if the client may not be able
 to use HTTPS
 
 'CanonicalNamespaces': For extensions adding their own namespaces or altering
@@ -891,7 +898,7 @@ $oldid: oldid (int) being viewed
 'DoEditSectionLink': Override the HTML generated for section edit links
 $skin: Skin object rendering the UI
 $title: Title object for the title being linked to (may not be the same as
-  $wgTitle, if the section is included from a template)
+  the page title, if the section is included from a template)
 $section: The designation of the section being pointed to, to be included in
   the link, like "&section=$section"
 $tooltip: The default tooltip.  Escape before using.
@@ -1213,6 +1220,9 @@ without any fancy queries or variants.
 $title: Title object of page
 &$url: string value as output (out parameter, can modify)
 
+'GetLogTypesOnUser': Add log types where the target is a userpage
+&$types: Array of log types
+
 'GetMetadataVersion': Modify the image metadata version currently in use. This
 is used when requesting image metadata from a ForeignApiRepo. Media handlers
 that need to have versioned metadata should add an element to the end of the
@@ -1359,7 +1369,7 @@ $context: IContextSource object
 &$pageInfo: Array of information
 
 'InitializeArticleMaybeRedirect': MediaWiki check to see if title is a redirect.
-$title: Title object ($wgTitle)
+$title: Title object for the current page
 $request: WebRequest
 $ignoreRedirect: boolean to skip redirect check
 $target: Title/string of redirect target
@@ -1534,6 +1544,11 @@ $cache: The LocalisationCache object
 $code: language code
 &$alldata: The localisation data from core and extensions
 
+'LocalisationChecksBlacklist': When fetching the blacklist of
+localisation checks.
+&$blacklist: array of checks to blacklist. See the bottom of
+  maintenance/language/checkLanguage.inc for the format of this variable.
+
 'LogEventsListShowLogExtract': Called before the string is added to OutputPage.
 Returning false will prevent the string from being added to the OutputPage.
 &$s: html string to show for the log extract
@@ -1609,7 +1624,7 @@ something completely different, after the basic globals have been set up, but
 before ordinary actions take place.
 $output: $wgOut
 $article: Article on which the action will be performed
-$title: $wgTitle
+$title: Title on which the action will be performed
 $user: $wgUser
 $request: $wgRequest
 $mediaWiki: The $mediawiki object
@@ -1761,7 +1776,7 @@ $baseRevId: the rev ID (or false) this edit was based on
 $article: the article that the history is loading for
 $context: RequestContext object
 
-'PageHistoryLineEnding' : Right before the end <li> is added to a history line.
+'PageHistoryLineEnding': Right before the end <li> is added to a history line.
 $row: the revision row for this line
 $s: the string representing this parsed line
 $classes: array containing the <li> element classes
@@ -1894,6 +1909,7 @@ that tests continue to run properly.
 my talk page, my contributions" etc).
 &$personal_urls: Array of link specifiers (see SkinTemplate.php)
 &$title: Title object representing the current page
+$skin: Skin object providing context (e.g. to check if the user is logged in, etc.)
 
 'PingLimiter': Allows extensions to override the results of User::pingLimiter().
 &$user : User performing the action
@@ -2377,7 +2393,7 @@ $special: the special page object
 $values: array of variables with watchlist options
 
 'SpecialWatchlistGetNonRevisionTypes': Called when building sql query for
-SpecialWatchlist. Allows extensions to register custom values they have 
+SpecialWatchlist. Allows extensions to register custom values they have
 inserted to rc_type so they can be returned as part of the watchlist.
 &$nonRevisionTypes: array of values in the rc_type field of recentchanges table
 
@@ -2844,4 +2860,4 @@ data. Can be used to post-process the results.
   of values).
 
 More hooks might be available but undocumented, you can execute
-'php maintenance/findHooks.php' to find hidden ones.
+"php maintenance/findHooks.php" to find hidden ones.
index 87a32a8..87071f2 100644 (file)
@@ -54,4 +54,4 @@ require_once RUN_MAINTENANCE_IF_MAIN;
 That's it. In the execute() method, you have access to all of the normal
 MediaWiki functions, so you can get a DB connection, use the cache, etc.
 For full docs on the Maintenance class, see the auto-generated docs at
-http://svn.wikimedia.org/doc/classMaintenance.html
+https://doc.wikimedia.org/mediawiki-core/master/php/html/classMaintenance.html
index e815062..b665001 100644 (file)
@@ -2,20 +2,22 @@ Extensions (such as the hieroglyphic module WikiHiero) are distributed
 separately. Drop them into this extensions directory and enable as
 per the extension's directions.
 
+You can find a list of extensions and documentation on the MediaWiki website:
+    https://www.mediawiki.org/wiki/Category:Extensions
+
+
 If you are a developer, you want to fetch the extension tree in another
 directory and make a symbolic link:
 
  mediawiki/extensions$ ln -s ../../extensions-trunk/FooBarExt
 
-The extensions are available through Git:
+Most extensions are available through Git:
     https://gerrit.wikimedia.org/r/#/admin/projects/
+    https://git.wikimedia.org/project/mediawiki
 
-or Subversion:
+Old extensions are on Subversion:
     https://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/
 
-You can find documentation and additional extensions on MediaWiki website:
-    https://www.mediawiki.org/wiki/Category:Extensions
-
 
 Please note that under POSIX systems (Linux...), parent of a symbolic path
 refers to the link source, NOT to the target! You should check the env
index 4b6e446..72be46f 100644 (file)
@@ -167,7 +167,7 @@ abstract class Action {
        final public function getContext() {
                if ( $this->context instanceof IContextSource ) {
                        return $this->context;
-               } else if ( $this->page instanceof Article ) {
+               } elseif ( $this->page instanceof Article ) {
                        // NOTE: $this->page can be a WikiPage, which does not have a context.
                        wfDebug( __METHOD__ . ': no context known, falling back to Article\'s context.' );
                        return $this->page->getContext();
index a6afd8e..ecbc59f 100644 (file)
@@ -1201,10 +1201,15 @@ class Article implements Page {
 
                wfRunHooks( 'ShowMissingArticle', array( $this ) );
 
+               // Give extensions a chance to hide their (unrelated) log entries
+               $logTypes = array( 'delete', 'move' );
+               $conds = array( "log_action != 'revision'" );
+               wfRunHooks( 'Article::MissingArticleConditions', array( &$conds, $logTypes ) );
+
                # Show delete and move logs
-               LogEventsList::showLogExtract( $outputPage, array( 'delete', 'move' ), $this->getTitle(), '',
+               LogEventsList::showLogExtract( $outputPage, $logTypes, $this->getTitle(), '',
                        array( 'lim' => 10,
-                               'conds' => array( "log_action != 'revision'" ),
+                               'conds' => $conds,
                                'showIfEmpty' => false,
                                'msgKey' => array( 'moveddeleted-notice' ) )
                );
index 29d2209..3c538b0 100644 (file)
@@ -128,16 +128,16 @@ $wgAutoloadLocalClasses = array(
        'IndexPager' => 'includes/Pager.php',
        'Interwiki' => 'includes/interwiki/Interwiki.php',
        'LCStore' => 'includes/cache/LocalisationCache.php',
-       'LCStore_Accel' => 'includes/cache/LocalisationCache.php',
-       'LCStore_CDB' => 'includes/cache/LocalisationCache.php',
-       'LCStore_DB' => 'includes/cache/LocalisationCache.php',
-       'LCStore_Null' => 'includes/cache/LocalisationCache.php',
+       'LCStoreAccel' => 'includes/cache/LocalisationCache.php',
+       'LCStoreCDB' => 'includes/cache/LocalisationCache.php',
+       'LCStoreDB' => 'includes/cache/LocalisationCache.php',
+       'LCStoreNull' => 'includes/cache/LocalisationCache.php',
        'License' => 'includes/Licenses.php',
        'Licenses' => 'includes/Licenses.php',
        'Linker' => 'includes/Linker.php',
        'LinkFilter' => 'includes/LinkFilter.php',
        'LocalisationCache' => 'includes/cache/LocalisationCache.php',
-       'LocalisationCache_BulkLoad' => 'includes/cache/LocalisationCache.php',
+       'LocalisationCacheBulkLoad' => 'includes/cache/LocalisationCache.php',
        'MagicWord' => 'includes/MagicWord.php',
        'MagicWordArray' => 'includes/MagicWord.php',
        'MailAddress' => 'includes/UserMailer.php',
@@ -394,8 +394,6 @@ $wgAutoloadLocalClasses = array(
        'ObjectFileCache' => 'includes/cache/ObjectFileCache.php',
        'ProcessCacheLRU' => 'includes/cache/ProcessCacheLRU.php',
        'ResourceFileCache' => 'includes/cache/ResourceFileCache.php',
-       'TitleDependency' => 'includes/cache/CacheDependency.php',
-       'TitleListDependency' => 'includes/cache/CacheDependency.php',
 
        # includes/changes
        'ChangesList' => 'includes/changes/ChangesList.php',
@@ -505,21 +503,21 @@ $wgAutoloadLocalClasses = array(
        'ViewCountUpdate' => 'includes/deferred/ViewCountUpdate.php',
 
        # includes/diff
-       '_DiffEngine' => 'includes/diff/DairikiDiff.php',
-       '_DiffOp' => 'includes/diff/DairikiDiff.php',
-       '_DiffOp_Add' => 'includes/diff/DairikiDiff.php',
-       '_DiffOp_Change' => 'includes/diff/DairikiDiff.php',
-       '_DiffOp_Copy' => 'includes/diff/DairikiDiff.php',
-       '_DiffOp_Delete' => 'includes/diff/DairikiDiff.php',
-       '_HWLDF_WordAccumulator' => 'includes/diff/DairikiDiff.php',
-       'ArrayDiffFormatter' => 'includes/diff/DairikiDiff.php',
+       'DiffEngine' => 'includes/diff/DairikiDiff.php',
+       'DiffOp' => 'includes/diff/DairikiDiff.php',
+       'DiffOpAdd' => 'includes/diff/DairikiDiff.php',
+       'DiffOpChange' => 'includes/diff/DairikiDiff.php',
+       'DiffOpCopy' => 'includes/diff/DairikiDiff.php',
+       'DiffOpDelete' => 'includes/diff/DairikiDiff.php',
+       'HWLDFWordAccumulator' => 'includes/diff/DairikiDiff.php',
+       'ArrayDiffFormatter' => 'includes/diff/ArrayDiffFormatter.php',
        'Diff' => 'includes/diff/DairikiDiff.php',
        'DifferenceEngine' => 'includes/diff/DifferenceEngine.php',
-       'DiffFormatter' => 'includes/diff/DairikiDiff.php',
+       'DiffFormatter' => 'includes/diff/DiffFormatter.php',
        'MappedDiff' => 'includes/diff/DairikiDiff.php',
        'RangeDifference' => 'includes/diff/WikiDiff3.php',
-       'TableDiffFormatter' => 'includes/diff/DairikiDiff.php',
-       'UnifiedDiffFormatter' => 'includes/diff/DairikiDiff.php',
+       'TableDiffFormatter' => 'includes/diff/TableDiffFormatter.php',
+       'UnifiedDiffFormatter' => 'includes/diff/UnifiedDiffFormatter.php',
        'WikiDiff3' => 'includes/diff/WikiDiff3.php',
        'WordLevelDiff' => 'includes/diff/DairikiDiff.php',
 
@@ -960,6 +958,7 @@ $wgAutoloadLocalClasses = array(
        'SpecialContributions' => 'includes/specials/SpecialContributions.php',
        'SpecialEditWatchlist' => 'includes/specials/SpecialEditWatchlist.php',
        'SpecialEmailUser' => 'includes/specials/SpecialEmailuser.php',
+       'SpecialExpandTemplates' => 'includes/specials/SpecialExpandTemplates.php',
        'SpecialExport' => 'includes/specials/SpecialExport.php',
        'SpecialFilepath' => 'includes/specials/SpecialFilepath.php',
        'SpecialImport' => 'includes/specials/SpecialImport.php',
@@ -1046,12 +1045,13 @@ $wgAutoloadLocalClasses = array(
 
        # includes/utils
        'ArrayUtils' => 'includes/utils/ArrayUtils.php',
+       'CdbException' => 'includes/utils/Cdb.php',
        'CdbFunctions' => 'includes/utils/CdbPHP.php',
        'CdbReader' => 'includes/utils/Cdb.php',
-       'CdbReaderDBA' => 'includes/utils/Cdb.php',
+       'CdbReaderDBA' => 'includes/utils/CdbDBA.php',
        'CdbReaderPHP' => 'includes/utils/CdbPHP.php',
        'CdbWriter' => 'includes/utils/Cdb.php',
-       'CdbWriterDBA' => 'includes/utils/Cdb.php',
+       'CdbWriterDBA' => 'includes/utils/CdbDBA.php',
        'CdbWriterPHP' => 'includes/utils/CdbPHP.php',
        'ConfEditor' => 'includes/utils/ConfEditor.php',
        'ConfEditorParseError' => 'includes/utils/ConfEditor.php',
@@ -1114,13 +1114,13 @@ $wgAutoloadLocalClasses = array(
        'UserDupes' => 'maintenance/userDupes.inc',
 
        # maintenance/language
-       'csvStatsOutput' => 'maintenance/language/StatOutputs.php',
-       'extensionLanguages' => 'maintenance/language/languages.inc',
-       'languages' => 'maintenance/language/languages.inc',
+       'CsvStatsOutput' => 'maintenance/language/StatOutputs.php',
+       'ExtensionLanguages' => 'maintenance/language/languages.inc',
+       'Languages' => 'maintenance/language/languages.inc',
        'MessageWriter' => 'maintenance/language/writeMessagesArray.inc',
-       'statsOutput' => 'maintenance/language/StatOutputs.php',
-       'textStatsOutput' => 'maintenance/language/StatOutputs.php',
-       'wikiStatsOutput' => 'maintenance/language/StatOutputs.php',
+       'StatsOutput' => 'maintenance/language/StatOutputs.php',
+       'TextStatsOutput' => 'maintenance/language/StatOutputs.php',
+       'WikiStatsOutput' => 'maintenance/language/StatOutputs.php',
 
        # maintenance/term
        'AnsiTermColorer' => 'maintenance/term/MWTerm.php',
@@ -1142,7 +1142,7 @@ $wgAutoloadLocalClasses = array(
 );
 
 class AutoLoader {
-       static protected  $autoloadLocalClassesLower = null;
+       static protected $autoloadLocalClassesLower = null;
 
        /**
         * autoload - take a class name and attempt to load it
@@ -1165,6 +1165,8 @@ class AutoLoader {
                // do not strip the leading backlash in this case, causing autoloading to fail.
                $className = ltrim( $className, '\\' );
 
+               $filename = false;
+
                if ( isset( $wgAutoloadLocalClasses[$className] ) ) {
                        $filename = $wgAutoloadLocalClasses[$className];
                } elseif ( isset( $wgAutoloadClasses[$className] ) ) {
@@ -1177,7 +1179,6 @@ class AutoLoader {
                         * and we are plagued with several legacy uses created by MediaWiki < 1.5, see
                         * https://wikitech.wikimedia.org/wiki/Text_storage_data
                         */
-                       $filename = false;
                        $lowerClass = strtolower( $className );
 
                        if ( self::$autoloadLocalClassesLower === null ) {
index 34b89e7..9aeb99b 100644 (file)
@@ -1083,7 +1083,6 @@ class Block {
                return null;
        }
 
-
        /**
         * Get all blocks that match any IP from an array of IP addresses
         *
index 7ec641d..fd94bea 100644 (file)
@@ -193,18 +193,14 @@ class ChangeTags {
                        throw new MWException( 'Unable to determine appropriate JOIN condition for tagging.' );
                }
 
-               // JOIN on tag_summary
-               $tables[] = 'tag_summary';
-               $join_conds['tag_summary'] = array( 'LEFT JOIN', "ts_$join_cond=$join_cond" );
-               $fields[] = 'ts_tags';
+               $fields['ts_tags'] = wfGetDB( DB_SLAVE )->buildGroupConcatField(
+                       ',', 'change_tag', 'ct_tag', "ct_$join_cond=$join_cond"
+               );
 
                if ( $wgUseTagFilter && $filter_tag ) {
                        // Somebody wants to filter on a tag.
                        // Add an INNER JOIN on change_tag
 
-                       // FORCE INDEX -- change_tags will almost ALWAYS be the correct query plan.
-                       $options['USE INDEX'] = array( 'change_tag' => 'change_tag_tag_id' );
-                       unset( $options['FORCE INDEX'] );
                        $tables[] = 'change_tag';
                        $join_conds['change_tag'] = array( 'INNER JOIN', "ct_$join_cond=$join_cond" );
                        $conds['ct_tag'] = $filter_tag;
index 2d1ddcb..fc6fc65 100644 (file)
@@ -1608,7 +1608,12 @@ $wgSharedTables = array( 'user', 'user_properties' );
  *   - user:        DB user
  *   - password:    DB password
  *   - type:        "mysql" or "postgres"
- *   - load:        ratio of DB_SLAVE load, must be >=0, the sum of all loads must be >0
+ *
+ *   - load:        Ratio of DB_SLAVE load, must be >=0, the sum of all loads must be >0.
+ *                  If this is zero for any given server, no normal query traffic will be
+ *                  sent to it. It will be excluded from lag checks in maintenance scripts.
+ *                  The only way it can receive traffic is if groupLoads is used.
+ *
  *   - groupLoads:  array of load ratios, the key is the query group name. A query may belong
  *                  to several groups, the most specific group defined here is used.
  *
@@ -1793,7 +1798,7 @@ $wgCompressRevisions = false;
  *
  * CAUTION: Access to database might lead to code execution
  */
-$wgExternalStores = false;
+$wgExternalStores = array();
 
 /**
  * An array of external MySQL servers.
@@ -2129,7 +2134,7 @@ $wgStyleVersion = '303';
 /**
  * This will cache static pages for non-logged-in users to reduce
  * database traffic on public sites.
- * Must set $wgShowIPinHeader = false
+ * Automatically sets $wgShowIPinHeader = false
  * ResourceLoader requests to default language and skins are cached
  * as well as single module requests.
  */
@@ -2287,6 +2292,7 @@ $wgSquidServers = array();
  * As above, except these servers aren't purged on page changes; use to set a
  * list of trusted proxies, etc. Supports both individual IP addresses and
  * CIDR blocks.
+ * @since 1.23 Supports CIDR ranges
  */
 $wgSquidServersNoPurge = array();
 
@@ -5031,7 +5037,8 @@ $wgProfilePerHost = false;
  * Host for UDP profiler.
  *
  * The host should be running a daemon which can be obtained from MediaWiki
- * Subversion at: http://svn.wikimedia.org/svnroot/mediawiki/trunk/udpprofile
+ * Git at:
+ * http://git.wikimedia.org/tree/operations%2Fsoftware.git/master/udpprofile
  */
 $wgUDPProfilerHost = '127.0.0.1';
 
@@ -5234,6 +5241,12 @@ $wgOpenSearchTemplate = false;
  */
 $wgEnableOpenSearchSuggest = true;
 
+/**
+ * Integer defining default number of entries to show on
+ * OpenSearch call.
+ */
+$wgOpenSearchDefaultLimit = 10;
+
 /**
  * Expiry time for search suggestion responses
  */
index 68691c5..ab5856a 100644 (file)
@@ -1204,13 +1204,29 @@ class EditPage {
         * @throws UserBlockedError|ReadOnlyError|ThrottledError|PermissionsError
         * @return bool false if output is done, true if the rest of the form should be displayed
         */
-       function attemptSave() {
-               global $wgUser, $wgOut;
+       public function attemptSave() {
+               global $wgUser;
 
                $resultDetails = false;
                # Allow bots to exempt some edits from bot flagging
                $bot = $wgUser->isAllowed( 'bot' ) && $this->bot;
                $status = $this->internalAttemptSave( $resultDetails, $bot );
+
+               return $this->handleStatus( $status, $resultDetails );
+       }
+
+       /**
+        * Handle status, such as after attempt save
+        *
+        * @param Status $status
+        * @param array|bool $resultDetails
+        *
+        * @throws ErrorPageError
+        * return bool false, if output is done, true if rest of the form should be displayed
+        */
+       private function handleStatus( Status $status, $resultDetails ) {
+               global $wgUser, $wgOut;
+
                // FIXME: once the interface for internalAttemptSave() is made nicer, this should use the message in $status
                if ( $status->value == self::AS_SUCCESS_UPDATE || $status->value == self::AS_SUCCESS_NEW_ARTICLE ) {
                        $this->didSave = true;
@@ -3155,6 +3171,10 @@ HTML
                                return $previewHTML;
                        }
 
+                       # provide a anchor link to the editform
+                       $continueEditing = '<span class="mw-continue-editing">' .
+                               '[[#' . self::EDITFORM_ID . '|' . $wgLang->getArrow() . ' ' .
+                               wfMessage( 'continue-editing' )->text() . ']]</span>';
                        if ( $this->mTriedSave && !$this->mTokenOk ) {
                                if ( $this->mTokenOkExceptSuffix ) {
                                        $note = wfMessage( 'token_suffix_mismatch' )->plain();
@@ -3165,8 +3185,7 @@ HTML
                        } elseif ( $this->incompleteForm ) {
                                $note = wfMessage( 'edit_form_incomplete' )->plain();
                        } else {
-                               $note = wfMessage( 'previewnote' )->plain() .
-                                       ' [[#' . self::EDITFORM_ID . '|' . $wgLang->getArrow() . ' ' . wfMessage( 'continue-editing' )->text() . ']]';
+                               $note = wfMessage( 'previewnote' )->plain() . ' ' . $continueEditing;
                        }
 
                        $parserOptions = $this->mArticle->makeParserOptions( $this->mArticle->getContext() );
@@ -3195,7 +3214,9 @@ HTML
                                # Used messages to make sure grep find them:
                                # Messages: usercsspreview, userjspreview, sitecsspreview, sitejspreview
                                if ( $level && $format ) {
-                                       $note = "<div id='mw-{$level}{$format}preview'>" . wfMessage( "{$level}{$format}preview" )->text() . "</div>";
+                                       $note = "<div id='mw-{$level}{$format}preview'>" .
+                                               wfMessage( "{$level}{$format}preview" )->text() .
+                                               ' ' . $continueEditing . "</div>";
                                }
                        }
 
@@ -3622,29 +3643,6 @@ HTML
                $wgOut->returnToMain( false, $this->mTitle );
        }
 
-       /**
-        * Produce the stock "your edit contains spam" page
-        *
-        * @param string|bool $match Text which triggered one or more filters
-        * @deprecated since 1.17 Use method spamPageWithContent() instead
-        */
-       static function spamPage( $match = false ) {
-               wfDeprecated( __METHOD__, '1.17' );
-
-               global $wgOut, $wgTitle;
-
-               $wgOut->prepareErrorPage( wfMessage( 'spamprotectiontitle' ) );
-
-               $wgOut->addHTML( '<div id="spamprotected">' );
-               $wgOut->addWikiMsg( 'spamprotectiontext' );
-               if ( $match ) {
-                       $wgOut->addWikiMsg( 'spamprotectionmatch', wfEscapeWikiText( $match ) );
-               }
-               $wgOut->addHTML( '</div>' );
-
-               $wgOut->returnToMain( false, $wgTitle );
-       }
-
        /**
         * Show "your edit contains spam" page with your diff and text
         *
index 98de4c0..3d34763 100644 (file)
@@ -604,7 +604,7 @@ class XmlDumpWriter {
                if ( $row->page_is_redirect ) {
                        $page = WikiPage::factory( $title );
                        $redirect = $page->getRedirectTarget();
-                       if ( $redirect instanceOf Title && $redirect->isValidRedirectTarget() ) {
+                       if ( $redirect instanceof Title && $redirect->isValidRedirectTarget() ) {
                                $out .= '    ' . Xml::element( 'redirect', array( 'title' => self::canonicalTitle( $redirect ) ) ) . "\n";
                        }
                }
index 1eb5c3e..ca0ca41 100644 (file)
@@ -496,16 +496,16 @@ function wfAppendQuery( $url, $query ) {
  */
 function wfExpandUrl( $url, $defaultProto = PROTO_CURRENT ) {
        global $wgServer, $wgCanonicalServer, $wgInternalServer, $wgRequest;
-       $serverUrl = $wgServer;
        if ( $defaultProto === PROTO_CANONICAL ) {
                $serverUrl = $wgCanonicalServer;
-       }
-       // Make $wgInternalServer fall back to $wgServer if not set
-       if ( $defaultProto === PROTO_INTERNAL && $wgInternalServer !== false ) {
+       } elseif ( $defaultProto === PROTO_INTERNAL && $wgInternalServer !== false ) {
+               // Make $wgInternalServer fall back to $wgServer if not set
                $serverUrl = $wgInternalServer;
-       }
-       if ( $defaultProto === PROTO_CURRENT ) {
-               $defaultProto = $wgRequest->getProtocol() . '://';
+       } else {
+               $serverUrl = $wgServer;
+               if ( $defaultProto === PROTO_CURRENT ) {
+                       $defaultProto = $wgRequest->getProtocol() . '://';
+               }
        }
 
        // Analyze $serverUrl to obtain its protocol
@@ -2772,9 +2772,9 @@ function wfShellExecDisabled() {
  * @param array $limits optional array with limits(filesize, memory, time, walltime)
  *                 this overwrites the global wgShellMax* limits.
  * @param array $options Array of options:
- *    - duplicateStderr: Set this to true to duplicate stderr to stdout, 
+ *    - duplicateStderr: Set this to true to duplicate stderr to stdout,
  *      including errors from limit.sh
- *      
+ *
  * @return string collected stdout as a string
  */
 function wfShellExec( $cmd, &$retval = null, $environ = array(),
@@ -2877,9 +2877,9 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(),
        $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: 
+       // 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)
        //
@@ -3513,7 +3513,6 @@ function wfResetSessionID() {
        wfRunHooks( 'ResetSessionID', array( $oldSessionId, $newSessionId ) );
 }
 
-
 /**
  * Initialise php session
  *
@@ -3809,7 +3808,7 @@ function wfGetNull() {
  * @param string|bool $cluster Cluster name accepted by LBFactory. Default: false.
  */
 function wfWaitForSlaves( $maxLag = false, $wiki = false, $cluster = false ) {
-       if( $cluster !== false ) {
+       if ( $cluster !== false ) {
                $lb = wfGetLBFactory()->getExternalLB( $cluster );
        } else {
                $lb = wfGetLB( $wiki );
index d260862..1680fd6 100644 (file)
@@ -745,7 +745,7 @@ class HTMLForm extends ContextSource {
                        $attribs['class'] = array( 'mw-htmlform-submit' );
 
                        if ( $this->isVForm() ) {
-                               // mw-ui-block is necessary because the buttons aren't necessarily in an 
+                               // mw-ui-block is necessary because the buttons aren't necessarily in an
                                // immediate child div of the vform.
                                array_push( $attribs['class'], 'mw-ui-button', 'mw-ui-big', 'mw-ui-primary', 'mw-ui-block' );
                        }
@@ -1034,7 +1034,7 @@ class HTMLForm extends ContextSource {
                $subsectionHtml = '';
                $hasLabel = false;
 
-               switch( $displayFormat ) {
+               switch ( $displayFormat ) {
                        case 'table':
                                $getFieldHtmlMethod = 'getTableRow';
                                break;
index 396e360..db47d31 100644 (file)
@@ -199,6 +199,9 @@ class Hooks {
                                $retval = call_user_func_array( $callback, $hook_args );
                        } catch ( MWHookException $e ) {
                                $badhookmsg = $e->getMessage();
+                       } catch ( Exception $e ) {
+                               restore_error_handler();
+                               throw $e;
                        }
                        restore_error_handler();
                        wfProfileOut( $func );
index 932f753..6977a69 100644 (file)
@@ -664,7 +664,7 @@ class Html {
        }
 
        /**
-        * Convenience function to produce an "<input>" element.
+        * Convenience function to produce a <textarea> element.
         *
         * This supports leaving out the cols= and rows= which Xml requires and are
         * required by HTML4/XHTML but not required by HTML5.
index d6b8a03..4ea1712 100644 (file)
@@ -415,6 +415,7 @@ class ImagePage extends Article {
                                $params['width'] = $width;
                                $params['height'] = $height;
                                $thumbnail = $this->displayImg->transform( $params );
+                               Linker::processResponsiveImages( $this->displayImg, $thumbnail, $params );
 
                                $anchorclose = Html::rawElement( 'div', array( 'class' => 'mw-filepage-resolutioninfo' ), $msgsmall );
 
index 4dcdfd5..895f0f2 100644 (file)
@@ -902,7 +902,7 @@ class Linker {
         * @param MediaOutput $thumb
         * @param array $hp image parameters
         */
-       protected static function processResponsiveImages( $file, $thumb, $hp ) {
+       public static function processResponsiveImages( $file, $thumb, $hp ) {
                global $wgResponsiveImages;
                if ( $wgResponsiveImages ) {
                        $hp15 = $hp;
index b4fda13..2c4c64e 100644 (file)
@@ -1623,10 +1623,7 @@ class OutputPage extends ContextSource {
         * @param $template QuickTemplate
         */
        public function addTemplate( &$template ) {
-               ob_start();
-               $template->execute();
-               $this->addHTML( ob_get_contents() );
-               ob_end_clean();
+               $this->addHTML( $template->getHTML() );
        }
 
        /**
index 61a535d..02a883a 100644 (file)
  * @ingroup SpecialPage
  */
 abstract class PageQueryPage extends QueryPage {
+       /**
+        * Run a LinkBatch to pre-cache LinkCache information,
+        * like page existence and information for stub color and redirect hints.
+        * This should be done for live data and cached data.
+        *
+        * @param $db DatabaseBase connection
+        * @param ResultWrapper $res
+        */
+       public function preprocessResults( $db, $res ) {
+               if ( !$res->numRows() ) {
+                       return;
+               }
+
+               $batch = new LinkBatch();
+               foreach ( $res as $row ) {
+                       $batch->add( $row->namespace, $row->title );
+               }
+               $batch->execute();
+
+               $res->seek( 0 );
+       }
+
        /**
         * Format the result as a simple link to the page
         *
@@ -41,7 +63,7 @@ abstract class PageQueryPage extends QueryPage {
 
                if ( $title instanceof Title ) {
                        $text = $wgContLang->convert( $title->getPrefixedText() );
-                       return Linker::linkKnown( $title, htmlspecialchars( $text ) );
+                       return Linker::link( $title, htmlspecialchars( $text ) );
                } else {
                        return Html::element( 'span', array( 'class' => 'mw-invalidtitle' ),
                                Linker::getInvalidTitleDescription( $this->getContext(), $row->namespace, $row->title ) );
index 4efd347..a0f9e5f 100644 (file)
@@ -77,18 +77,20 @@ function wfIsTrustedProxy( $ip ) {
  * Checks if an IP matches a proxy we've configured.
  * @param $ip String
  * @return bool
+ * @since 1.23 Supports CIDR ranges in $wgSquidServersNoPurge
  */
 function wfIsConfiguredProxy( $ip ) {
        global $wgSquidServers, $wgSquidServersNoPurge;
 
        // quick check of known proxy servers
-       $trusted = in_array( $ip, $wgSquidServers );
+       $trusted = in_array( $ip, $wgSquidServers )
+               || in_array( $ip, $wgSquidServersNoPurge );
 
        if ( !$trusted ) {
                // slightly slower check to see if the ip is listed directly or in a CIDR
                // block in $wgSquidServersNoPurge
                foreach ( $wgSquidServersNoPurge as $block ) {
-                       if ( IP::isInRange( $ip, $block ) ) {
+                       if ( strpos( $block, '/' ) !== false && IP::isInRange( $ip, $block ) ) {
                                $trusted = true;
                                break;
                        }
index 4dbc9dd..3384af0 100644 (file)
@@ -865,6 +865,27 @@ class Sanitizer {
                $value = preg_replace_callback( $decodeRegex,
                        array( __CLASS__, 'cssDecodeCallback' ), $value );
 
+               // Normalize Halfwidth and Fullwidth Unicode block that IE6 might treat as ascii
+               $value = preg_replace_callback(
+                       '/[!-z]/u', // U+FF01 to U+FF5A
+                       function ( $matches ) {
+                               $cp = utf8ToCodepoint( $matches[0] );
+                               if ( $cp === false ) {
+                                       return '';
+                               }
+                               return chr( $cp - 65248 ); // ASCII range \x21-\x7A
+                       },
+                       $value
+               );
+
+               // Convert more characters IE6 might treat as ascii
+               // U+0280, U+0274, U+207F, U+029F, U+026A, U+207D, U+208D
+               $value = str_replace(
+                       array( 'ʀ', 'ɴ', 'ⁿ', 'ʟ', 'ɪ', '⁽', '₍' ),
+                       array( 'r', 'n', 'n', 'l', 'i', '(', '(' ),
+                       $value
+               );
+
                // Let the value through if it's nothing but a single comment, to
                // allow other functions which may reject it to pass some error
                // message through.
@@ -885,8 +906,24 @@ class Sanitizer {
                        }
                }
 
+               // S followed by repeat, iteration, or prolonged sound marks,
+               // which IE will treat as "ss"
+               $value = preg_replace(
+                       '/s(?:
+                               \xE3\x80\xB1 | # U+3031
+                               \xE3\x82\x9D | # U+309D
+                               \xE3\x83\xBC | # U+30FC
+                               \xE3\x83\xBD | # U+30FD
+                               \xEF\xB9\xBC | # U+FE7C
+                               \xEF\xB9\xBD | # U+FE7D
+                               \xEF\xBD\xB0   # U+FF70
+                       )/ix',
+                       'ss',
+                       $value
+               );
+
                // Reject problematic keywords and control characters
-               if ( preg_match( '/[\000-\010\016-\037\177]/', $value ) ) {
+               if ( preg_match( '/[\000-\010\013\016-\037\177]/', $value ) ) {
                        return '/* invalid control char */';
                } elseif ( preg_match( '! expression | filter\s*: | accelerator\s*: | url\s*\( | image\s*\( | image-set\s*\( !ix', $value ) ) {
                        return '/* insecure input */';
index 2e083d8..81dada2 100644 (file)
@@ -293,7 +293,6 @@ if ( $wgMetaNamespace === false ) {
        $wgMetaNamespace = str_replace( ' ', '_', $wgSitename );
 }
 
-
 // Default value is either the suhosin limit or -1 for unlimited
 if ( $wgResourceLoaderMaxQueryLength === false ) {
        $maxValueLength = ini_get( 'suhosin.get.max_value_length' );
index 170e96f..750f319 100644 (file)
@@ -1394,8 +1394,8 @@ abstract class Skin extends ContextSource {
                                // Singular if no revision -> diff link will show latest change only in any case
                                $plural = false;
                        }
-                       $plural = $plural ? 2 : 1;
-                       // 2 signifies "more than one revision". We don't know how many, and even if we did,
+                       $plural = $plural ? 999 : 1;
+                       // 999 signifies "more than one revision". We don't know how many, and even if we did,
                        // the number of revisions or authors is not necessarily the same as the number of
                        // "messages".
                        $newMessagesLink = Linker::linkKnown(
@@ -1559,7 +1559,7 @@ abstract class Skin extends ContextSource {
         * editSectionLinkForOther().
         *
         * @param $nt      Title  The title being linked to (may not be the same as
-        *   $wgTitle, if the section is included from a template)
+        *   the current page, if the section is included from a template)
         * @param string $section The designation of the section being pointed to,
         *   to be included in the link, like "&section=$section"
         * @param string $tooltip The tooltip to use for the link: will be escaped
index 1e7ce13..2808cf9 100644 (file)
@@ -156,10 +156,17 @@ class SkinTemplate extends Skin {
                                        // otherwise we'll end up with the autonym again.
                                        $ilLangLocalName = Language::fetchLanguageName( $ilInterwikiCode, $userLang->getCode() );
 
+                                       if ( $languageLinkTitle->getText() === '' ) {
+                                               $ilTitle = wfMessage( 'interlanguage-link-title-langonly', $ilLangLocalName )->text();
+                                       } else {
+                                               $ilTitle = wfMessage( 'interlanguage-link-title', $languageLinkTitle->getText(),
+                                                       $ilLangLocalName )->text();
+                                       }
+
                                        $language_urls[] = array(
                                                'href' => $languageLinkTitle->getFullURL(),
                                                'text' => $ilLangName,
-                                               'title' => wfMessage( 'tooltip-iwiki', $languageLinkTitle->getText(), $ilLangLocalName )->escaped(),
+                                               'title' => $ilTitle,
                                                'class' => $class,
                                                'lang' => wfBCP47( $ilInterwikiCode ),
                                                'hreflang' => wfBCP47( $ilInterwikiCode ),
@@ -217,15 +224,6 @@ class SkinTemplate extends Skin {
         * @param $out OutputPage
         */
        function outputPage( OutputPage $out = null ) {
-               global $wgContLang;
-               global $wgScript, $wgStylePath;
-               global $wgMimeType, $wgJsMimeType;
-               global $wgXhtmlNamespaces, $wgHtml5Version;
-               global $wgDisableCounters, $wgSitename, $wgLogo;
-               global $wgMaxCredits, $wgShowCreditsIfMax;
-               global $wgPageShowWatchingUsers;
-               global $wgArticlePath, $wgScriptPath, $wgServer;
-
                wfProfileIn( __METHOD__ );
                Profiler::instance()->setTemplated( true );
 
@@ -237,14 +235,45 @@ class SkinTemplate extends Skin {
                }
 
                $out = $this->getOutput();
-               $request = $this->getRequest();
                $user = $this->getUser();
-               $title = $this->getTitle();
 
                wfProfileIn( __METHOD__ . '-init' );
                $this->initPage( $out );
                wfProfileOut( __METHOD__ . '-init' );
+               $tpl = $this->prepareQuickTemplate( $out );
+               // execute template
+               wfProfileIn( __METHOD__ . '-execute' );
+               $res = $tpl->execute();
+               wfProfileOut( __METHOD__ . '-execute' );
+
+               // result may be an error
+               $this->printOrError( $res );
+
+               if ( $oldContext ) {
+                       $this->setContext( $oldContext );
+               }
+
+               wfProfileOut( __METHOD__ );
+       }
+
+       /**
+        * initialize various variables and generate the template
+        *
+        * @since 1.23
+        * @param $out OutputPage
+        * @return QuickTemplate the template to be executed by outputPage
+        */
+       protected function prepareQuickTemplate( OutputPage $out = null ) {
+               global $wgContLang, $wgScript, $wgStylePath,
+                       $wgMimeType, $wgJsMimeType, $wgXhtmlNamespaces, $wgHtml5Version,
+                       $wgDisableCounters, $wgSitename, $wgLogo, $wgMaxCredits,
+                       $wgShowCreditsIfMax, $wgPageShowWatchingUsers, $wgArticlePath,
+                       $wgScriptPath, $wgServer;
+
+               wfProfileIn( __METHOD__ );
 
+               $title = $this->getTitle();
+               $request = $this->getRequest();
                $tpl = $this->setupTemplateForOutput();
 
                wfProfileIn( __METHOD__ . '-stuff-head' );
@@ -523,18 +552,8 @@ class SkinTemplate extends Skin {
                $tpl->set( 'dataAfterContent', $this->afterContentHook() );
                wfProfileOut( __METHOD__ . '-stuff5' );
 
-               // execute template
-               wfProfileIn( __METHOD__ . '-execute' );
-               $res = $tpl->execute();
-               wfProfileOut( __METHOD__ . '-execute' );
-
-               // result may be an error
-               $this->printOrError( $res );
-
-               if ( $oldContext ) {
-                       $this->setContext( $oldContext );
-               }
                wfProfileOut( __METHOD__ );
+               return $tpl;
        }
 
        /**
@@ -729,7 +748,7 @@ class SkinTemplate extends Skin {
                        $personal_urls[$login_id] = $login_url;
                }
 
-               wfRunHooks( 'PersonalUrls', array( &$personal_urls, &$title ) );
+               wfRunHooks( 'PersonalUrls', array( &$personal_urls, &$title, $this ) );
                wfProfileOut( __METHOD__ );
                return $personal_urls;
        }
@@ -1438,6 +1457,20 @@ abstract class QuickTemplate {
        public function getSkin() {
                return $this->data['skin'];
        }
+
+       /**
+        * Fetch the output of a QuickTemplate and return it
+        *
+        * @since 1.23
+        * @return String
+        */
+       public function getHTML() {
+               ob_start();
+               $this->execute();
+               $html = ob_get_contents();
+               ob_end_clean();
+               return $html;
+       }
 }
 
 /**
index 3aea4d9..f70a6dc 100644 (file)
@@ -259,11 +259,7 @@ class SpecialPage {
         */
        public static function getTitleFor( $name, $subpage = false, $fragment = '' ) {
                $name = SpecialPageFactory::getLocalNameFor( $name, $subpage );
-               if ( $name ) {
-                       return Title::makeTitle( NS_SPECIAL, $name, $fragment );
-               } else {
-                       throw new MWException( "Invalid special page name \"$name\"" );
-               }
+               return Title::makeTitle( NS_SPECIAL, $name, $fragment );
        }
 
        /**
@@ -880,12 +876,10 @@ class SpecialPage {
         * @see wfMessage
         */
        public function msg( /* $args */ ) {
-               // Note: can't use func_get_args() directly as second or later item in
-               // a parameter list until PHP 5.3 or you get a fatal error.
-               // Works fine as the first parameter, which appears elsewhere in the
-               // code base. Sighhhh.
-               $args = func_get_args();
-               $message = call_user_func_array( array( $this->getContext(), 'msg' ), $args );
+               $message = call_user_func_array(
+                       array( $this->getContext(), 'msg' ),
+                       func_get_args()
+               );
                // RequestContext passes context to wfMessage, and the language is set from
                // the context, but setting the language for Message class removes the
                // interface message status, which breaks for example usernameless gender
@@ -924,7 +918,6 @@ class SpecialPage {
        public function getFinalGroupName() {
                global $wgSpecialPageGroups;
                $name = $this->getName();
-               $group = '-';
 
                // Allow overbidding the group from the wiki side
                $msg = $this->msg( 'specialpages-specialpagegroup-' . strtolower( $name ) )->inContentLanguage();
@@ -1467,7 +1460,6 @@ class SpecialAllMyUploads extends RedirectSpecialPage {
        }
 }
 
-
 /**
  * Redirect from Special:PermanentLink/### to index.php?oldid=###
  */
index 11edc8a..9542654 100644 (file)
@@ -108,7 +108,7 @@ class SpecialPageFactory {
                'Log'                       => 'SpecialLog',
                'Watchlist'                 => 'SpecialWatchlist',
                'Newpages'                  => 'SpecialNewpages',
-               'Recentchanges'             => 'SpecialRecentchanges',
+               'Recentchanges'             => 'SpecialRecentChanges',
                'Recentchangeslinked'       => 'SpecialRecentchangeslinked',
                'Tags'                      => 'SpecialTags',
 
@@ -149,6 +149,7 @@ class SpecialPageFactory {
                'Undelete'                  => 'SpecialUndelete',
                'Whatlinkshere'             => 'SpecialWhatlinkshere',
                'MergeHistory'              => 'SpecialMergeHistory',
+               'ExpandTemplates'           => 'SpecialExpandTemplates',
 
                // Other
                'Booksources'               => 'SpecialBookSources',
index 836c24a..dc0bae0 100644 (file)
@@ -83,7 +83,7 @@ class Status {
         * @param $ok Boolean: whether the operation completed
         * @param $value Mixed
         */
-       function setResult( $ok, $value = null ) {
+       public function setResult( $ok, $value = null ) {
                $this->ok = $ok;
                $this->value = $value;
        }
@@ -94,7 +94,7 @@ class Status {
         *
         * @return Boolean
         */
-       function isGood() {
+       public function isGood() {
                return $this->ok && !$this->errors;
        }
 
@@ -103,7 +103,7 @@ class Status {
         *
         * @return Boolean
         */
-       function isOK() {
+       public function isOK() {
                return $this->ok;
        }
 
@@ -112,7 +112,7 @@ class Status {
         *
         * @param string|Message $message message name or object
         */
-       function warning( $message /*, parameters... */ ) {
+       public function warning( $message /*, parameters... */ ) {
                $params = array_slice( func_get_args(), 1 );
                $this->errors[] = array(
                        'type' => 'warning',
@@ -126,7 +126,7 @@ class Status {
         *
         * @param string|Message $message message name or object
         */
-       function error( $message /*, parameters... */ ) {
+       public function error( $message /*, parameters... */ ) {
                $params = array_slice( func_get_args(), 1 );
                $this->errors[] = array(
                        'type' => 'error',
@@ -140,7 +140,7 @@ class Status {
         *
         * @param string|Message $message message name or object
         */
-       function fatal( $message /*, parameters... */ ) {
+       public function fatal( $message /*, parameters... */ ) {
                $params = array_slice( func_get_args(), 1 );
                $this->errors[] = array(
                        'type' => 'error',
@@ -152,7 +152,7 @@ class Status {
        /**
         * Sanitize the callback parameter on wakeup, to avoid arbitrary execution.
         */
-       function __wakeup() {
+       public function __wakeup() {
                $this->cleanCallback = false;
        }
 
@@ -179,7 +179,7 @@ class Status {
         * @param string $longContext a long enclosing context message name, for a list
         * @return String
         */
-       function getWikiText( $shortContext = false, $longContext = false ) {
+       public function getWikiText( $shortContext = false, $longContext = false ) {
                if ( count( $this->errors ) == 0 ) {
                        if ( $this->ok ) {
                                $this->fatal( 'internalerror_info',
@@ -219,7 +219,7 @@ class Status {
         * @param string $longContext a long enclosing context message name, for a list
         * @return Message
         */
-       function getMessage( $shortContext = false, $longContext = false ) {
+       public function getMessage( $shortContext = false, $longContext = false ) {
                if ( count( $this->errors ) == 0 ) {
                        if ( $this->ok ) {
                                $this->fatal( 'internalerror_info',
@@ -239,7 +239,7 @@ class Status {
                                $s = wfMessage( $longContext, $wrapper );
                        }
                } else {
-                       $msgs =  $this->getErrorMessageArray( $this->errors );
+                       $msgs = $this->getErrorMessageArray( $this->errors );
                        $msgCount = count( $msgs );
 
                        if ( $shortContext ) {
@@ -316,7 +316,7 @@ class Status {
         * @param $other Status Other Status object
         * @param $overwriteValue Boolean: whether to override the "value" member
         */
-       function merge( $other, $overwriteValue = false ) {
+       public function merge( $other, $overwriteValue = false ) {
                $this->errors = array_merge( $this->errors, $other->errors );
                $this->ok = $this->ok && $other->ok;
                if ( $overwriteValue ) {
@@ -332,7 +332,7 @@ class Status {
         * @return array A list in which each entry is an array with a message key as its first element.
         *         The remaining array elements are the message parameters.
         */
-       function getErrorsArray() {
+       public function getErrorsArray() {
                return $this->getStatusArray( "error" );
        }
 
@@ -342,7 +342,7 @@ class Status {
         * @return array A list in which each entry is an array with a message key as its first element.
         *         The remaining array elements are the message parameters.
         */
-       function getWarningsArray() {
+       public function getWarningsArray() {
                return $this->getStatusArray( "warning" );
        }
 
@@ -398,7 +398,7 @@ class Status {
         * @param string $msg message name
         * @return Boolean
         */
-       function hasMessage( $msg ) {
+       public function hasMessage( $msg ) {
                foreach ( $this->errors as $error ) {
                        if ( $error['message'] === $msg ) {
                                return true;
@@ -418,7 +418,7 @@ class Status {
         * @param $dest Message|String: Replacement message key or object
         * @return bool Return true if the replacement was done, false otherwise.
         */
-       function replaceMessage( $source, $dest ) {
+       public function replaceMessage( $source, $dest ) {
                $replaced = false;
                foreach ( $this->errors as $index => $error ) {
                        if ( $error['message'] === $source ) {
index 09c5a3a..c726e9d 100644 (file)
@@ -273,7 +273,7 @@ class Title {
        /**
         * Make a Title object from a DB row
         *
-        * @param $row Object database row (needs at least page_title,page_namespace)
+        * @param stdClass $row Object database row (needs at least page_title,page_namespace)
         * @return Title corresponding Title
         */
        public static function newFromRow( $row ) {
@@ -286,7 +286,7 @@ class Title {
         * Load Title object fields from a DB row.
         * If false is given, the title will be treated as non-existing.
         *
-        * @param $row Object|bool database row
+        * @param $row stdClass|bool database row
         */
        public function loadFromRow( $row ) {
                if ( $row ) { // page found
@@ -4830,7 +4830,7 @@ class Title {
                        $langObj = wfGetLangObj( $contentHandler->getPageLanguage( $this ) );
                        $this->mPageLanguage = array( $langObj->getCode(), $wgLanguageCode );
                } else {
-                       $langObj =  wfGetLangObj( $this->mPageLanguage[0] );
+                       $langObj = wfGetLangObj( $this->mPageLanguage[0] );
                }
                wfProfileOut( __METHOD__ );
                return $langObj;
index c86b966..a01444a 100644 (file)
@@ -2173,14 +2173,21 @@ class User {
        /**
         * Set the password for a password reminder or new account email
         *
-        * @param string $str New password to set
+        * @param $str New password to set or null to set an invalid
+        *  password hash meaning that the user will not be able to use it
         * @param bool $throttle If true, reset the throttle timestamp to the present
         */
        public function setNewpassword( $str, $throttle = true ) {
                $this->load();
-               $this->mNewpassword = self::crypt( $str );
-               if ( $throttle ) {
-                       $this->mNewpassTime = wfTimestampNow();
+
+               if ( $str === null ) {
+                       $this->mNewpassword = '';
+                       $this->mNewpassTime = null;
+               } else {
+                       $this->mNewpassword = self::crypt( $str );
+                       if ( $throttle ) {
+                               $this->mNewpassTime = wfTimestampNow();
+                       }
                }
        }
 
@@ -3506,56 +3513,6 @@ class User {
                return (bool)$userblock->doAutoblock( $this->getRequest()->getIP() );
        }
 
-       /**
-        * Generate a string which will be different for any combination of
-        * user options which would produce different parser output.
-        * This will be used as part of the hash key for the parser cache,
-        * so users with the same options can share the same cached data
-        * safely.
-        *
-        * Extensions which require it should install 'PageRenderingHash' hook,
-        * which will give them a chance to modify this key based on their own
-        * settings.
-        *
-        * @deprecated since 1.17 use the ParserOptions object to get the relevant options
-        * @return string Page rendering hash
-        */
-       public function getPageRenderingHash() {
-               wfDeprecated( __METHOD__, '1.17' );
-
-               global $wgRenderHashAppend, $wgLang, $wgContLang;
-               if ( $this->mHash ) {
-                       return $this->mHash;
-               }
-
-               // stubthreshold is only included below for completeness,
-               // since it disables the parser cache, its value will always
-               // be 0 when this function is called by parsercache.
-
-               $confstr = $this->getOption( 'math' );
-               $confstr .= '!' . $this->getStubThreshold();
-               $confstr .= '!' . ( $this->getOption( 'numberheadings' ) ? '1' : '' );
-               $confstr .= '!' . $wgLang->getCode();
-               $confstr .= '!' . $this->getOption( 'thumbsize' );
-               // add in language specific options, if any
-               $extra = $wgContLang->getExtraHashOptions();
-               $confstr .= $extra;
-
-               // Since the skin could be overloading link(), it should be
-               // included here but in practice, none of our skins do that.
-
-               $confstr .= $wgRenderHashAppend;
-
-               // Give a chance for extensions to modify the hash, if they have
-               // extra options or other effects on the parser cache.
-               wfRunHooks( 'PageRenderingHash', array( &$confstr ) );
-
-               // Make it a valid memcached key fragment
-               $confstr = str_replace( ' ', '_', $confstr );
-               $this->mHash = $confstr;
-               return $confstr;
-       }
-
        /**
         * Get whether the user is explicitly blocked from account creation.
         * @return bool|Block
index 8ab10b2..6157f78 100644 (file)
@@ -352,14 +352,19 @@ class UserMailer {
                        ini_set( 'html_errors', '0' );
                        set_error_handler( 'UserMailer::errorHandler' );
 
-                       $safeMode = wfIniGetBool( 'safe_mode' );
-
-                       foreach ( $to as $recip ) {
-                               if ( $safeMode ) {
-                                       $sent = mail( $recip, self::quotedPrintable( $subject ), $body, $headers );
-                               } else {
-                                       $sent = mail( $recip, self::quotedPrintable( $subject ), $body, $headers, $wgAdditionalMailParams );
+                       try {
+                               $safeMode = wfIniGetBool( 'safe_mode' );
+
+                               foreach ( $to as $recip ) {
+                                       if ( $safeMode ) {
+                                               $sent = mail( $recip, self::quotedPrintable( $subject ), $body, $headers );
+                                       } else {
+                                               $sent = mail( $recip, self::quotedPrintable( $subject ), $body, $headers, $wgAdditionalMailParams );
+                                       }
                                }
+                       } catch ( Exception $e ) {
+                               restore_error_handler();
+                               throw $e;
                        }
 
                        restore_error_handler();
index 4ad7344..46cba52 100644 (file)
@@ -54,7 +54,7 @@ class WebRequest {
         * Cached URL protocol
         * @var string
         */
-       private $protocol;
+       protected $protocol;
 
        public function __construct() {
                /// @todo FIXME: This preemptive de-quoting can interfere with other web libraries
@@ -1522,6 +1522,12 @@ class FauxRequest extends WebRequest {
 class DerivativeRequest extends FauxRequest {
        private $base;
 
+       /**
+        * @param WebRequest $base
+        * @param array $data Array of *non*-urlencoded key => value pairs, the
+        *   fake GET/POST values
+        * @param bool $wasPosted Whether to treat the data as POST
+        */
        public function __construct( WebRequest $base, $data, $wasPosted = false ) {
                $this->base = $base;
                parent::__construct( $data, $wasPosted );
index fe1ff88..2b192b0 100644 (file)
@@ -189,4 +189,45 @@ class WikiFilePage extends WikiPage {
                }
                return parent::doPurge();
        }
+
+       /**
+        * Get the categories this file is a member of on the wiki where it was uploaded.
+        * For local files, this is the same as getCategories().
+        * For foreign API files (InstantCommons), this is not supported currently.
+        * Results will include hidden categories.
+        *
+        * @return TitleArray|Title[]
+        * @since 1.23
+        */
+       public function getForeignCategories() {
+               $this->loadFile();
+               $title = $this->mTitle;
+               $file = $this->mFile;
+
+               if ( ! $file instanceof LocalFile ) {
+                       wfDebug( __CLASS__ . '::' . __METHOD__ . ' is not supported for this file' );
+                       return TitleArray::newFromResult( new FakeResultWrapper( array() ) );
+               }
+
+               /** @var LocalRepo $repo */
+               $repo = $file->getRepo();
+               $dbr = $repo->getSlaveDB();
+
+               $res = $dbr->select(
+                       array( 'page', 'categorylinks' ),
+                       array(
+                               'page_title' => 'cl_to',
+                               'page_namespace' => NS_CATEGORY,
+                       ),
+                       array(
+                               'page_namespace' => $title->getNamespace(),
+                               'page_title' => $title->getDBkey(),
+                       ),
+                       __METHOD__,
+                       array(),
+                       array( 'categorylinks' => array( 'INNER JOIN', 'page_id = cl_from' ) )
+               );
+
+               return TitleArray::newFromResult( $res );
+       }
 }
index 576979c..9507e5f 100644 (file)
@@ -48,9 +48,11 @@ class WikiPage implements Page, IDBAccessObject {
        public $mDataLoaded = false;         // !< Boolean
        public $mIsRedirect = false;         // !< Boolean
        public $mLatest = false;             // !< Integer (false means "not loaded")
-       public $mPreparedEdit = false;       // !< Array
        /**@}}*/
 
+       /** @var stdclass Map of cache fields (text, parser output, ect) for a proposed/new edit */
+       protected $mPreparedEdit = false;
+
        /**
         * @var int
         */
@@ -242,6 +244,18 @@ class WikiPage implements Page, IDBAccessObject {
                $this->mTimestamp = '';
                $this->mIsRedirect = false;
                $this->mLatest = false;
+               // Bug 57026: do not clear mPreparedEdit since prepareTextForEdit() already checks
+               // the requested rev ID and content against the cached one for equality. For most
+               // content types, the output should not change during the lifetime of this cache.
+               // Clearing it can cause extra parses on edit for no reason.
+       }
+
+       /**
+        * Clear the mPreparedEdit cache field, as may be needed by mutable content types
+        * @return void
+        * @since 1.23
+        */
+       public function clearPreparedEdit() {
                $this->mPreparedEdit = false;
        }
 
@@ -2233,7 +2247,7 @@ class WikiPage implements Page, IDBAccessObject {
         * @return Status
         */
        public function doUpdateRestrictions( array $limit, array $expiry, &$cascade, $reason, User $user ) {
-               global $wgCascadingRestrictionLevels;
+               global $wgCascadingRestrictionLevels, $wgContLang;
 
                if ( wfReadOnly() ) {
                        return Status::newFatal( 'readonlytext', wfReadOnlyReason() );
@@ -2306,6 +2320,9 @@ class WikiPage implements Page, IDBAccessObject {
                        $logAction = 'protect';
                }
 
+               // Truncate for whole multibyte characters
+               $reason = $wgContLang->truncate( $reason, 255 );
+
                if ( $id ) { // Protection of existing page
                        if ( !wfRunHooks( 'ArticleProtect', array( &$this, &$user, $limit, $reason ) ) ) {
                                return Status::newGood();
@@ -2379,7 +2396,7 @@ class WikiPage implements Page, IDBAccessObject {
                                                'pt_namespace' => $this->mTitle->getNamespace(),
                                                'pt_title' => $this->mTitle->getDBkey(),
                                                'pt_create_perm' => $limit['create'],
-                                               'pt_timestamp' => $dbw->encodeExpiry( wfTimestampNow() ),
+                                               'pt_timestamp' => $dbw->timestamp(),
                                                'pt_expiry' => $dbw->encodeExpiry( $expiry['create'] ),
                                                'pt_user' => $user->getId(),
                                                'pt_reason' => $reason,
@@ -2407,7 +2424,7 @@ class WikiPage implements Page, IDBAccessObject {
 
                // Update the protection log
                $log = new LogPage( 'protect' );
-               $log->addEntry( $logAction, $this->mTitle, trim( $reason ), $params, $user );
+               $log->addEntry( $logAction, $this->mTitle, $reason, $params, $user );
 
                return Status::newGood();
        }
index bfdda7b..186ad46 100644 (file)
@@ -133,7 +133,8 @@ abstract class CachedAction extends FormlessAction implements ICacheHelper {
         * @param string|null $key
         */
        public function addCachedHTML( $computeFunction, $args = array(), $key = null ) {
-               $this->getOutput()->addHTML( $this->cacheHelper->getCachedValue( $computeFunction, $args, $key ) );
+               $html = $this->cacheHelper->getCachedValue( $computeFunction, $args, $key );
+               $this->getOutput()->addHTML( $html );
        }
 
        /**
@@ -147,7 +148,8 @@ abstract class CachedAction extends FormlessAction implements ICacheHelper {
        }
 
        /**
-        * Sets the time to live for the cache, in seconds or a unix timestamp indicating the point of expiry.
+        * Sets the time to live for the cache, in seconds or a unix timestamp
+        * indicating the point of expiry.
         *
         * @since 1.20
         *
@@ -184,5 +186,4 @@ abstract class CachedAction extends FormlessAction implements ICacheHelper {
                        $this->getOutput()->setSubtitle( $this->cacheHelper->getCachedNotice( $this->getContext() ) );
                }
        }
-
 }
index 0a2bf30..97c1605 100644 (file)
@@ -74,6 +74,7 @@ class CreditsAction extends FormlessAction {
                }
 
                wfProfileOut( __METHOD__ );
+
                return $s;
        }
 
@@ -94,6 +95,7 @@ class CreditsAction extends FormlessAction {
                        $d = '';
                        $t = '';
                }
+
                return $this->msg( 'lastmodifiedatby', $d, $t )->rawParams(
                        $this->userLink( $user ) )->params( $user->getName() )->escaped();
        }
@@ -125,6 +127,7 @@ class CreditsAction extends FormlessAction {
                $anon_ips = array();
 
                # Sift for real versus user names
+               /** @var $user User */
                foreach ( $contributors as $user ) {
                        $cnt--;
                        if ( $user->isLoggedIn() ) {
@@ -175,6 +178,7 @@ class CreditsAction extends FormlessAction {
                }
 
                $count = count( $fulllist );
+
                # "Based on work by ..."
                return $count
                        ? $this->msg( 'othercontribs' )->rawParams(
index db7123d..069d570 100644 (file)
@@ -43,7 +43,5 @@ class DeleteAction extends FormlessAction {
        public function show() {
 
                $this->page->delete();
-
        }
-
 }
index 3dd4c48..72210a9 100644 (file)
@@ -49,9 +49,7 @@ class EditAction extends FormlessAction {
                        $editor = new EditPage( $page );
                        $editor->edit();
                }
-
        }
-
 }
 
 /**
@@ -75,5 +73,4 @@ class SubmitAction extends EditAction {
 
                parent::show();
        }
-
 }
index e58791e..e492bd4 100644 (file)
@@ -37,6 +37,9 @@ class HistoryAction extends FormlessAction {
        const DIR_PREV = 0;
        const DIR_NEXT = 1;
 
+       /** @var array Array of message keys and strings */
+       public $message;
+
        public function getName() {
                return 'history';
        }
@@ -122,6 +125,7 @@ class HistoryAction extends FormlessAction {
                if ( $feedType ) {
                        $this->feed( $feedType );
                        wfProfileOut( __METHOD__ );
+
                        return;
                }
 
@@ -141,6 +145,7 @@ class HistoryAction extends FormlessAction {
                                )
                        );
                        wfProfileOut( __METHOD__ );
+
                        return;
                }
 
@@ -162,7 +167,7 @@ class HistoryAction extends FormlessAction {
                }
                if ( $this->getUser()->isAllowed( 'deletedhistory' ) ) {
                        $checkDeleted = Xml::checkLabel( $this->msg( 'history-show-deleted' )->text(),
-                       'deleted', 'mw-show-deleted-only', $request->getBool( 'deleted' ) ) . "\n";
+                               'deleted', 'mw-show-deleted-only', $request->getBool( 'deleted' ) ) . "\n";
                } else {
                        $checkDeleted = '';
                }
@@ -178,7 +183,10 @@ class HistoryAction extends FormlessAction {
                        ) .
                        Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) . "\n" .
                        Html::hidden( 'action', 'history' ) . "\n" .
-                       Xml::dateMenu( ( $year == null ? MWTimestamp::getLocalInstance()->format( 'Y' ) : $year ), $month ) . '&#160;' .
+                       Xml::dateMenu(
+                               ( $year == null ? MWTimestamp::getLocalInstance()->format( 'Y' ) : $year ),
+                               $month
+                       ) . '&#160;' .
                        ( $tagSelector ? ( implode( '&#160;', $tagSelector ) . '&#160;' ) : '' ) .
                        $checkDeleted .
                        Xml::submitButton( $this->msg( 'allpagessubmit' )->text() ) . "\n" .
@@ -316,9 +324,10 @@ class HistoryAction extends FormlessAction {
                                $wgContLang->time( $rev->getTimestamp() ) )->inContentLanguage()->text();
                } else {
                        $title = $rev->getUserText() .
-                       $this->msg( 'colon-separator' )->inContentLanguage()->text() .
-                       FeedItem::stripComment( $rev->getComment() );
+                               $this->msg( 'colon-separator' )->inContentLanguage()->text() .
+                               FeedItem::stripComment( $rev->getComment() );
                }
+
                return new FeedItem(
                        $title,
                        $text,
@@ -335,14 +344,28 @@ class HistoryAction extends FormlessAction {
  * @ingroup Actions
  */
 class HistoryPager extends ReverseChronologicalPager {
-       public $lastRow = false, $counter, $historyPage, $buttons, $conds;
+       /**
+        * @var bool|stdClass
+        */
+       public $lastRow = false;
+
+       public $counter, $historyPage, $buttons, $conds;
+
        protected $oldIdChecked;
+
        protected $preventClickjacking = false;
        /**
         * @var array
         */
        protected $parentLens;
 
+       /**
+        * @param HistoryAction $historyPage
+        * @param string $year
+        * @param string $month
+        * @param string $tagFilter
+        * @param array $conds
+        */
        function __construct( $historyPage, $year = '', $month = '', $tagFilter = '', $conds = array() ) {
                parent::__construct( $historyPage->getContext() );
                $this->historyPage = $historyPage;
@@ -383,6 +406,7 @@ class HistoryPager extends ReverseChronologicalPager {
                        $this->tagFilter
                );
                wfRunHooks( 'PageHistoryPager::getQueryInfo', array( &$this, &$queryInfo ) );
+
                return $queryInfo;
        }
 
@@ -390,6 +414,10 @@ class HistoryPager extends ReverseChronologicalPager {
                return 'rev_timestamp';
        }
 
+       /**
+        * @param stdClass $row
+        * @return string
+        */
        function formatRow( $row ) {
                if ( $this->lastRow ) {
                        $latest = ( $this->counter == 1 && $this->mIsFirst );
@@ -401,6 +429,7 @@ class HistoryPager extends ReverseChronologicalPager {
                        $s = '';
                }
                $this->lastRow = $row;
+
                return $s;
        }
 
@@ -457,13 +486,15 @@ class HistoryPager extends ReverseChronologicalPager {
 
                $s .= $this->buttons;
                $s .= '<ul id="pagehistory">' . "\n";
+
                return $s;
        }
 
        private function getRevisionButton( $name, $msg ) {
                $this->preventClickjacking();
                # Note bug #20966, <button> is non-standard in IE<8
-               $element = Html::element( 'button',
+               $element = Html::element(
+                       'button',
                        array(
                                'type' => 'submit',
                                'name' => $name,
@@ -502,6 +533,7 @@ class HistoryPager extends ReverseChronologicalPager {
                        $s .= $this->buttons;
                }
                $s .= '</form>';
+
                return $s;
        }
 
@@ -526,16 +558,17 @@ class HistoryPager extends ReverseChronologicalPager {
         *
         * @todo document some more, and maybe clean up the code (some params redundant?)
         *
-        * @param $row Object: the database row corresponding to the previous line.
-        * @param $next Mixed: the database row corresponding to the next line. (chronologically previous)
-        * @param $notificationtimestamp
-        * @param $latest Boolean: whether this row corresponds to the page's latest revision.
-        * @param $firstInList Boolean: whether this row corresponds to the first displayed on this history page.
-        * @return String: HTML output for the row
+        * @param stdObject $row The database row corresponding to the previous line.
+        * @param mixed $next The database row corresponding to the next line
+        *   (chronologically previous)
+        * @param bool|string $notificationtimestamp
+        * @param bool $latest Whether this row corresponds to the page's latest revision.
+        * @param bool $firstInList Whether this row corresponds to the first
+        *   displayed on this history page.
+        * @return string HTML output for the row
         */
        function historyLine( $row, $next, $notificationtimestamp = false,
-               $latest = false, $firstInList = false )
-       {
+               $latest = false, $firstInList = false ) {
                $rev = new Revision( $row );
                $rev->setTitle( $this->getTitle() );
 
@@ -548,12 +581,14 @@ class HistoryPager extends ReverseChronologicalPager {
 
                $curlink = $this->curLink( $rev, $latest );
                $lastlink = $this->lastLink( $rev, $next );
-               $diffButtons = $this->diffButtons( $rev, $firstInList );
+               $curLastlinks = $curlink . $this->historyPage->message['pipe-separator'] . $lastlink;
                $histLinks = Html::rawElement(
-                               'span',
-                               array( 'class' => 'mw-history-histlinks' ),
-                               $this->msg( 'parentheses' )->rawParams( $curlink . $this->historyPage->message['pipe-separator'] . $lastlink )->escaped()
+                       'span',
+                       array( 'class' => 'mw-history-histlinks' ),
+                       $this->msg( 'parentheses' )->rawParams( $curLastlinks )->escaped()
                );
+
+               $diffButtons = $this->diffButtons( $rev, $firstInList );
                $s = $histLinks . $diffButtons;
 
                $link = $this->revLink( $rev );
@@ -627,7 +662,11 @@ class HistoryPager extends ReverseChronologicalPager {
                if ( $prevRev && $this->getTitle()->quickUserCan( 'edit', $user ) ) {
                        if ( $latest && $this->getTitle()->quickUserCan( 'rollback', $user ) ) {
                                // Get a rollback link without the brackets
-                               $rollbackLink = Linker::generateRollback( $rev, $this->getContext(), array( 'verify', 'noBrackets' ) );
+                               $rollbackLink = Linker::generateRollback(
+                                       $rev,
+                                       $this->getContext(),
+                                       array( 'verify', 'noBrackets' )
+                               );
                                if ( $rollbackLink ) {
                                        $this->preventClickjacking();
                                        $tools[] = $rollbackLink;
@@ -635,8 +674,8 @@ class HistoryPager extends ReverseChronologicalPager {
                        }
 
                        if ( !$rev->isDeleted( Revision::DELETED_TEXT )
-                               && !$prevRev->isDeleted( Revision::DELETED_TEXT ) )
-                       {
+                               && !$prevRev->isDeleted( Revision::DELETED_TEXT )
+                       {
                                # Create undo tooltip for the first (=latest) line only
                                $undoTooltip = $latest
                                        ? array( 'title' => $this->msg( 'tooltip-undo' )->text() )
@@ -705,6 +744,7 @@ class HistoryPager extends ReverseChronologicalPager {
                if ( $rev->isDeleted( Revision::DELETED_TEXT ) ) {
                        $link = "<span class=\"history-deleted\">$link</span>";
                }
+
                return $link;
        }
 
@@ -758,8 +798,8 @@ class HistoryPager extends ReverseChronologicalPager {
                                )
                        );
                } elseif ( !$prevRev->userCan( Revision::DELETED_TEXT, $this->getUser() )
-                       || !$nextRev->userCan( Revision::DELETED_TEXT, $this->getUser() ) )
-               {
+                       || !$nextRev->userCan( Revision::DELETED_TEXT, $this->getUser() )
+               {
                        return $last;
                } else {
                        return Linker::linkKnown(
@@ -816,6 +856,7 @@ class HistoryPager extends ReverseChronologicalPager {
                                array_merge( $radio, $checkmark, array(
                                        'name' => 'diff',
                                        'id' => "mw-diff-$id" ) ) );
+
                        return $first . $second;
                } else {
                        return '';
@@ -842,9 +883,11 @@ class HistoryPager extends ReverseChronologicalPager {
  * Backwards-compatibility alias
  */
 class HistoryPage extends HistoryAction {
-       public function __construct( Page $article ) { # Just to make it public
+       // @codingStandardsIgnoreStart Needed "useless" override to make it public.
+       public function __construct( Page $article ) {
                parent::__construct( $article );
        }
+       // @codingStandardsIgnoreEnd
 
        public function history() {
                $this->onView();
index 7fc9033..811e35d 100644 (file)
@@ -153,6 +153,7 @@ class InfoAction extends FormlessAction {
         */
        protected function makeHeader( $header ) {
                $spanAttribs = array( 'class' => 'mw-headline', 'id' => Sanitizer::escapeId( $header ) );
+
                return Html::rawElement( 'h2', array(), Html::element( 'span', $spanAttribs, $header ) );
        }
 
@@ -277,6 +278,12 @@ class InfoAction extends FormlessAction {
                        Language::fetchLanguageName( $pageLang, $lang->getCode() )
                        . ' ' . $this->msg( 'parentheses', $pageLang ) );
 
+               // Content model of the page
+               $pageInfo['header-basic'][] = array(
+                       $this->msg( 'pageinfo-content-model' ),
+                       ContentHandler::getLocalizedName( $title->getContentModel() )
+               );
+
                // Search engine status
                $pOutput = new ParserOutput();
                if ( isset( $pageProperties['noindex'] ) ) {
@@ -300,7 +307,7 @@ class InfoAction extends FormlessAction {
                if (
                        $user->isAllowed( 'unwatchedpages' ) ||
                        ( $wgUnwatchedPageThreshold !== false &&
-                         $pageCounts['watchers'] >= $wgUnwatchedPageThreshold )
+                               $pageCounts['watchers'] >= $wgUnwatchedPageThreshold )
                ) {
                        // Number of page watchers
                        $pageInfo['header-basic'][] = array(
@@ -730,6 +737,7 @@ class InfoAction extends FormlessAction {
                );
 
                wfProfileOut( __METHOD__ );
+
                return $result;
        }
 
@@ -755,6 +763,7 @@ class InfoAction extends FormlessAction {
                $anon_ips = array();
 
                # Sift for real versus user names
+               /** @var $user User */
                foreach ( $contributors as $user ) {
                        $page = $user->isAnon()
                                ? SpecialPage::getTitleFor( 'Contributions', $user->getName() )
@@ -797,6 +806,7 @@ class InfoAction extends FormlessAction {
                }
 
                $count = count( $fulllist );
+
                # "Based on work by ..."
                return $count
                        ? $this->msg( 'othercontribs' )->rawParams(
index ff6cf13..4016f67 100644 (file)
@@ -70,6 +70,7 @@ class MarkpatrolledAction extends FormlessAction {
                        $this->getOutput()->setPageTitle( $this->msg( 'markedaspatrollederror' ) );
                        $this->getOutput()->addWikiMsg( 'markedaspatrollederror-noautopatrol' );
                        $this->getOutput()->returnToMain( null, $return );
+
                        return;
                }
 
index ec6648e..8b2bfaa 100644 (file)
@@ -43,9 +43,7 @@ class ProtectAction extends FormlessAction {
        public function show() {
 
                $this->page->protect();
-
        }
-
 }
 
 /**
@@ -64,7 +62,5 @@ class UnprotectAction extends ProtectAction {
        public function show() {
 
                $this->page->unprotect();
-
        }
-
 }
index 32751e4..a0116fb 100644 (file)
@@ -94,9 +94,14 @@ class RawAction extends FormlessAction {
                # Output may contain user-specific data;
                # vary generated content for open sessions on private wikis
                $privateCache = !User::isEveryoneAllowed( 'read' ) && ( $smaxage == 0 || session_id() != '' );
+               // Bug 53032 - make this private if user is logged in,
+               // so we don't accidentally cache cookies
+               $privateCache = $privateCache ?: $this->getUser()->isLoggedIn();
                # allow the client to cache this for 24 hours
                $mode = $privateCache ? 'private' : 'public';
-               $response->header( 'Cache-Control: ' . $mode . ', s-maxage=' . $smaxage . ', max-age=' . $maxage );
+               $response->header(
+                       'Cache-Control: ' . $mode . ', s-maxage=' . $smaxage . ', max-age=' . $maxage
+               );
 
                $text = $this->getRawText();
 
@@ -135,8 +140,9 @@ class RawAction extends FormlessAction {
 
                // If it's a MediaWiki message we can just hit the message cache
                if ( $request->getBool( 'usemsgcache' ) && $title->getNamespace() == NS_MEDIAWIKI ) {
-                       // The first "true" is to use the database, the second is to use the content langue
-                       // and the last one is to specify the message key already contains the language in it ("/de", etc.)
+                       // The first "true" is to use the database, the second is to use
+                       // the content langue and the last one is to specify the message
+                       // key already contains the language in it ("/de", etc.).
                        $text = MessageCache::singleton()->get( $title->getDBkey(), true, true, true );
                        // If the message doesn't exist, return a blank
                        if ( $text === false ) {
@@ -178,7 +184,11 @@ class RawAction extends FormlessAction {
                }
 
                if ( $text !== false && $text !== '' && $request->getVal( 'templates' ) === 'expand' ) {
-                       $text = $wgParser->preprocess( $text, $title, ParserOptions::newFromContext( $this->getContext() ) );
+                       $text = $wgParser->preprocess(
+                               $text,
+                               $title,
+                               ParserOptions::newFromContext( $this->getContext() )
+                       );
                }
 
                return $text;
@@ -212,6 +222,7 @@ class RawAction extends FormlessAction {
                                $oldid = 0;
                                break;
                }
+
                return $oldid;
        }
 
@@ -273,6 +284,7 @@ class RawPage extends RawAction {
                if ( $this->mOldId !== null ) {
                        return $this->mOldId;
                }
+
                return parent::getOldId();
        }
 }
index 3d244fb..c9b3f8f 100644 (file)
@@ -43,7 +43,5 @@ class RenderAction extends FormlessAction {
        public function show() {
 
                $this->page->render();
-
        }
-
 }
index a5fc4e1..cdd139e 100644 (file)
@@ -38,7 +38,8 @@ class RevertAction extends Action {
                $this->getOutput()->showErrorPage( 'nosuchaction', 'nosuchactiontext' );
        }
 
-       public function execute() {}
+       public function execute() {
+       }
 }
 
 /**
@@ -47,6 +48,9 @@ class RevertAction extends Action {
  * @ingroup Actions
  */
 class RevertFileAction extends FormAction {
+       /**
+        * @var OldLocalFile
+        */
        protected $oldFile;
 
        public function getName() {
@@ -63,12 +67,16 @@ class RevertFileAction extends FormAction {
                $oldimage = $this->getRequest()->getText( 'oldimage' );
                if ( strlen( $oldimage ) < 16
                        || strpos( $oldimage, '/' ) !== false
-                       || strpos( $oldimage, '\\' ) !== false )
-               {
+                       || strpos( $oldimage, '\\' ) !== false
+               {
                        throw new ErrorPageError( 'internalerror', 'unexpected', array( 'oldimage', $oldimage ) );
                }
 
-               $this->oldFile = RepoGroup::singleton()->getLocalRepo()->newFromArchiveName( $this->getTitle(), $oldimage );
+               $this->oldFile = RepoGroup::singleton()->getLocalRepo()->newFromArchiveName(
+                       $this->getTitle(),
+                       $oldimage
+               );
+
                if ( !$this->oldFile->exists() ) {
                        throw new ErrorPageError( '', 'filerevert-badversion' );
                }
@@ -99,8 +107,10 @@ class RevertFileAction extends FormAction {
                                'raw' => true,
                                'default' => $this->msg( 'filerevert-intro',
                                        $this->getTitle()->getText(), $userDate, $userTime,
-                                       wfExpandUrl( $this->page->getFile()->getArchiveUrl( $this->getRequest()->getText( 'oldimage' ) ),
-                                               PROTO_CURRENT ) )->parseAsBlock()
+                                       wfExpandUrl(
+                                               $this->page->getFile()->getArchiveUrl( $this->getRequest()->getText( 'oldimage' ) ),
+                                               PROTO_CURRENT
+                                       ) )->parseAsBlock()
                        ),
                        'comment' => array(
                                'type' => 'text',
@@ -112,10 +122,21 @@ class RevertFileAction extends FormAction {
        }
 
        public function onSubmit( $data ) {
-               $source = $this->page->getFile()->getArchiveVirtualUrl( $this->getRequest()->getText( 'oldimage' ) );
+               $source = $this->page->getFile()->getArchiveVirtualUrl(
+                       $this->getRequest()->getText( 'oldimage' )
+               );
                $comment = $data['comment'];
+
                // TODO: Preserve file properties from database instead of reloading from file
-               return $this->page->getFile()->upload( $source, $comment, $comment, 0, false, false, $this->getUser() );
+               return $this->page->getFile()->upload(
+                       $source,
+                       $comment,
+                       $comment,
+                       0,
+                       false,
+                       false,
+                       $this->getUser()
+               );
        }
 
        public function onSuccess() {
@@ -139,6 +160,7 @@ class RevertFileAction extends FormAction {
 
        protected function getDescription() {
                $this->getOutput()->addBacklinkSubtitle( $this->getTitle() );
+
                return '';
        }
 }
index 2949fa9..1803629 100644 (file)
@@ -49,6 +49,7 @@ class RevisiondeleteAction extends FormlessAction {
        public function show() {
                $special = SpecialPageFactory::getPage( 'Revisiondelete' );
                $special->setContext( $this->getContext() );
+               $special->getContext()->setTitle( $special->getTitle() );
                $special->run( '' );
        }
 }
index 81bad9d..d48a0ea 100644 (file)
@@ -53,7 +53,9 @@ class RollbackAction extends FormlessAction {
                        throw new ThrottledError;
                }
 
-               if ( isset( $result[0][0] ) && ( $result[0][0] == 'alreadyrolled' || $result[0][0] == 'cantrollback' ) ) {
+               if ( isset( $result[0][0] ) &&
+                       ( $result[0][0] == 'alreadyrolled' || $result[0][0] == 'cantrollback' )
+               ) {
                        $this->getOutput()->setPageTitle( $this->msg( 'rollbackfailed' ) );
                        $errArray = $result[0];
                        $errMsg = array_shift( $errArray );
@@ -91,12 +93,21 @@ class RollbackAction extends FormlessAction {
 
                $old = Linker::revUserTools( $current );
                $new = Linker::revUserTools( $target );
-               $this->getOutput()->addHTML( $this->msg( 'rollback-success' )->rawParams( $old, $new )->parseAsBlock() );
+               $this->getOutput()->addHTML( $this->msg( 'rollback-success' )->rawParams( $old, $new )
+                       ->parseAsBlock() );
                $this->getOutput()->returnToMain( false, $this->getTitle() );
 
-               if ( !$request->getBool( 'hidediff', false ) && !$this->getUser()->getBoolOption( 'norollbackdiff', false ) ) {
+               if ( !$request->getBool( 'hidediff', false ) &&
+                       !$this->getUser()->getBoolOption( 'norollbackdiff', false )
+               ) {
                        $contentHandler = $current->getContentHandler();
-                       $de = $contentHandler->createDifferenceEngine( $this->getContext(), $current->getId(), $newId, false, true );
+                       $de = $contentHandler->createDifferenceEngine(
+                               $this->getContext(),
+                               $current->getId(),
+                               $newId,
+                               false,
+                               true
+                       );
                        $de->showDiff( '', '' );
                }
        }
index e227197..3a24565 100644 (file)
@@ -43,5 +43,4 @@ class ViewAction extends FormlessAction {
        public function show() {
                $this->page->view();
        }
-
 }
index 929c1b5..e1b5d52 100644 (file)
@@ -51,6 +51,7 @@ class WatchAction extends FormAction {
                wfProfileIn( __METHOD__ );
                self::doWatch( $this->getTitle(), $this->getUser() );
                wfProfileOut( __METHOD__ );
+
                return true;
        }
 
@@ -96,7 +97,9 @@ class WatchAction extends FormAction {
         * @return Status
         */
        public static function doWatchOrUnwatch( $watch, Title $title, User $user ) {
-               if ( $user->isLoggedIn() && $user->isWatched( $title, WatchedItem::IGNORE_USER_RIGHTS ) != $watch ) {
+               if ( $user->isLoggedIn() &&
+                       $user->isWatched( $title, WatchedItem::IGNORE_USER_RIGHTS ) != $watch
+               ) {
                        // If the user doesn't have 'editmywatchlist', we still want to
                        // allow them to add but not remove items via edits and such.
                        if ( $watch ) {
@@ -105,6 +108,7 @@ class WatchAction extends FormAction {
                                return self::doUnwatch( $title, $user );
                        }
                }
+
                return Status::newGood();
        }
 
@@ -116,8 +120,12 @@ class WatchAction extends FormAction {
         * @param int $checkRights Passed through to $user->addWatch()
         * @return Status
         */
-       public static function doWatch( Title $title, User $user, $checkRights = WatchedItem::CHECK_USER_RIGHTS ) {
-               if ( $checkRights !== WatchedItem::IGNORE_USER_RIGHTS && !$user->isAllowed( 'editmywatchlist' ) ) {
+       public static function doWatch( Title $title, User $user,
+               $checkRights = WatchedItem::CHECK_USER_RIGHTS
+       ) {
+               if ( $checkRights !== WatchedItem::IGNORE_USER_RIGHTS &&
+                       !$user->isAllowed( 'editmywatchlist' )
+               ) {
                        return User::newFatalPermissionDeniedStatus( 'editmywatchlist' );
                }
 
@@ -129,6 +137,7 @@ class WatchAction extends FormAction {
                        $user->addWatch( $title, $checkRights );
                        wfRunHooks( 'WatchArticleComplete', array( &$user, &$page ) );
                }
+
                return $status;
        }
 
@@ -152,6 +161,7 @@ class WatchAction extends FormAction {
                        $user->removeWatch( $title );
                        wfRunHooks( 'UnwatchArticleComplete', array( &$user, &$page ) );
                }
+
                return $status;
        }
 
@@ -220,6 +230,7 @@ class UnwatchAction extends WatchAction {
                wfProfileIn( __METHOD__ );
                self::doUnwatch( $this->getTitle(), $this->getUser() );
                wfProfileOut( __METHOD__ );
+
                return true;
        }
 
index ce6ecda..b6a7ca8 100644 (file)
  * The class functions are divided into several areas of functionality:
  *
  * Module parameters: Derived classes can define getAllowedParams() to specify
- *     which parameters to expect, how to parse and validate them.
+ *    which parameters to expect, how to parse and validate them.
  *
  * Profiling: various methods to allow keeping tabs on various tasks and their
- *     time costs
+ *    time costs
  *
  * Self-documentation: code to allow the API to document its own state
  *
  * @ingroup API
  */
 abstract class ApiBase extends ContextSource {
-
        // These constants allow modules to specify exactly how to treat incoming parameters.
 
-       const PARAM_DFLT = 0; // Default value of the parameter
-       const PARAM_ISMULTI = 1; // Boolean, do we accept more than one item for this parameter (e.g.: titles)?
-       const PARAM_TYPE = 2; // Can be either a string type (e.g.: 'integer') or an array of allowed values
-       const PARAM_MAX = 3; // Max value allowed for a parameter. Only applies if TYPE='integer'
-       const PARAM_MAX2 = 4; // Max value allowed for a parameter for bots and sysops. Only applies if TYPE='integer'
-       const PARAM_MIN = 5; // Lowest value allowed for a parameter. Only applies if TYPE='integer'
-       const PARAM_ALLOW_DUPLICATES = 6; // Boolean, do we allow the same value to be set more than once when ISMULTI=true
-       const PARAM_DEPRECATED = 7; // Boolean, is the parameter deprecated (will show a warning)
+       // Default value of the parameter
+       const PARAM_DFLT = 0;
+       // Boolean, do we accept more than one item for this parameter (e.g.: titles)?
+       const PARAM_ISMULTI = 1;
+       // Can be either a string type (e.g.: 'integer') or an array of allowed values
+       const PARAM_TYPE = 2;
+       // Max value allowed for a parameter. Only applies if TYPE='integer'
+       const PARAM_MAX = 3;
+       // Max value allowed for a parameter for bots and sysops. Only applies if TYPE='integer'
+       const PARAM_MAX2 = 4;
+       // Lowest value allowed for a parameter. Only applies if TYPE='integer'
+       const PARAM_MIN = 5;
+       // Boolean, do we allow the same value to be set more than once when ISMULTI=true
+       const PARAM_ALLOW_DUPLICATES = 6;
+       // Boolean, is the parameter deprecated (will show a warning)
+       const PARAM_DEPRECATED = 7;
        /// @since 1.17
        const PARAM_REQUIRED = 8; // Boolean, is the parameter required?
        /// @since 1.17
-       const PARAM_RANGE_ENFORCE = 9; // Boolean, if MIN/MAX are set, enforce (die) these? Only applies if TYPE='integer' Use with extreme caution
-
-       const PROP_ROOT = 'ROOT'; // Name of property group that is on the root element of the result, i.e. not part of a list
-       const PROP_LIST = 'LIST'; // Boolean, is the result multiple items? Defaults to true for query modules, to false for other modules
+       // Boolean, if MIN/MAX are set, enforce (die) these?
+       // Only applies if TYPE='integer' Use with extreme caution
+       const PARAM_RANGE_ENFORCE = 9;
+
+       // Name of property group that is on the root element of the result,
+       // i.e. not part of a list
+       const PROP_ROOT = 'ROOT';
+       // Boolean, is the result multiple items? Defaults to true for query modules,
+       // to false for other modules
+       const PROP_LIST = 'LIST';
        const PROP_TYPE = 0; // Type of the property, uses same format as PARAM_TYPE
-       const PROP_NULLABLE = 1; // Boolean, can the property be not included in the result? Defaults to false
+       // Boolean, can the property be not included in the result? Defaults to false
+       const PROP_NULLABLE = 1;
 
        const LIMIT_BIG1 = 500; // Fast query, std user limit
        const LIMIT_BIG2 = 5000; // Fast query, bot/sysop limit
@@ -124,6 +138,7 @@ abstract class ApiBase extends ContextSource {
         */
        public function getVersion() {
                wfDeprecated( __METHOD__, '1.21' );
+
                return '';
        }
 
@@ -162,9 +177,9 @@ abstract class ApiBase extends ContextSource {
        public function getModuleProfileName( $db = false ) {
                if ( $db ) {
                        return 'API:' . $this->mModuleName . '-DB';
-               } else {
-                       return 'API:' . $this->mModuleName;
                }
+
+               return 'API:' . $this->mModuleName;
        }
 
        /**
@@ -194,6 +209,7 @@ abstract class ApiBase extends ContextSource {
                if ( $this->isMain() ) {
                        ApiBase::dieDebug( __METHOD__, 'base method was called on main module. ' );
                }
+
                return $this->getMain()->getResult();
        }
 
@@ -216,6 +232,7 @@ abstract class ApiBase extends ContextSource {
         */
        public function createContext() {
                wfDeprecated( __METHOD__, '1.19' );
+
                return new DerivativeContext( $this->getContext() );
        }
 
@@ -293,7 +310,8 @@ abstract class ApiBase extends ContextSource {
                                $msg .= "\nThis module only accepts POST requests";
                        }
                        if ( $this->isReadMode() || $this->isWriteMode() ||
-                                       $this->mustBePosted() ) {
+                               $this->mustBePosted()
+                       ) {
                                $msg .= "\n";
                        }
 
@@ -359,8 +377,10 @@ abstract class ApiBase extends ContextSource {
                                $msg = '  ';
                        }
                        $msg .= implode( $prefix, $input ) . "\n";
+
                        return $msg;
                }
+
                return '';
        }
 
@@ -392,7 +412,9 @@ abstract class ApiBase extends ContextSource {
 
                                //handle missing type
                                if ( !isset( $paramSettings[ApiBase::PARAM_TYPE] ) ) {
-                                       $dflt = isset( $paramSettings[ApiBase::PARAM_DFLT] ) ? $paramSettings[ApiBase::PARAM_DFLT] : null;
+                                       $dflt = isset( $paramSettings[ApiBase::PARAM_DFLT] )
+                                               ? $paramSettings[ApiBase::PARAM_DFLT]
+                                               : null;
                                        if ( is_bool( $dflt ) ) {
                                                $paramSettings[ApiBase::PARAM_TYPE] = 'boolean';
                                        } elseif ( is_string( $dflt ) || is_null( $dflt ) ) {
@@ -402,18 +424,26 @@ abstract class ApiBase extends ContextSource {
                                        }
                                }
 
-                               if ( isset( $paramSettings[self::PARAM_DEPRECATED] ) && $paramSettings[self::PARAM_DEPRECATED] ) {
+                               if ( isset( $paramSettings[self::PARAM_DEPRECATED] )
+                                       && $paramSettings[self::PARAM_DEPRECATED]
+                               ) {
                                        $desc = "DEPRECATED! $desc";
                                }
 
-                               if ( isset( $paramSettings[self::PARAM_REQUIRED] ) && $paramSettings[self::PARAM_REQUIRED] ) {
+                               if ( isset( $paramSettings[self::PARAM_REQUIRED] )
+                                       && $paramSettings[self::PARAM_REQUIRED]
+                               ) {
                                        $desc .= $paramPrefix . "This parameter is required";
                                }
 
-                               $type = isset( $paramSettings[self::PARAM_TYPE] ) ? $paramSettings[self::PARAM_TYPE] : null;
+                               $type = isset( $paramSettings[self::PARAM_TYPE] )
+                                       ? $paramSettings[self::PARAM_TYPE]
+                                       : null;
                                if ( isset( $type ) ) {
                                        $hintPipeSeparated = true;
-                                       $multi = isset( $paramSettings[self::PARAM_ISMULTI] ) ? $paramSettings[self::PARAM_ISMULTI] : false;
+                                       $multi = isset( $paramSettings[self::PARAM_ISMULTI] )
+                                               ? $paramSettings[self::PARAM_ISMULTI]
+                                               : false;
                                        if ( $multi ) {
                                                $prompt = 'Values (separate with \'|\'): ';
                                        } else {
@@ -437,7 +467,8 @@ abstract class ApiBase extends ContextSource {
                                        } else {
                                                switch ( $type ) {
                                                        case 'namespace':
-                                                               // Special handling because namespaces are type-limited, yet they are not given
+                                                               // Special handling because namespaces are
+                                                               // type-limited, yet they are not given
                                                                $desc .= $paramPrefix . $prompt;
                                                                $desc .= wordwrap( implode( ', ', MWNamespace::getValidNamespaces() ),
                                                                        100, $descWordwrap );
@@ -456,11 +487,14 @@ abstract class ApiBase extends ContextSource {
                                                                $hasMax = isset( $paramSettings[self::PARAM_MAX] );
                                                                if ( $hasMin || $hasMax ) {
                                                                        if ( !$hasMax ) {
-                                                                               $intRangeStr = "The value$s must be no less than {$paramSettings[self::PARAM_MIN]}";
+                                                                               $intRangeStr = "The value$s must be no less than " .
+                                                                                       "{$paramSettings[self::PARAM_MIN]}";
                                                                        } elseif ( !$hasMin ) {
-                                                                               $intRangeStr = "The value$s must be no more than {$paramSettings[self::PARAM_MAX]}";
+                                                                               $intRangeStr = "The value$s must be no more than " .
+                                                                                       "{$paramSettings[self::PARAM_MAX]}";
                                                                        } else {
-                                                                               $intRangeStr = "The value$s must be between {$paramSettings[self::PARAM_MIN]} and {$paramSettings[self::PARAM_MAX]}";
+                                                                               $intRangeStr = "The value$s must be between " .
+                                                                                       "{$paramSettings[self::PARAM_MIN]} and {$paramSettings[self::PARAM_MAX]}";
                                                                        }
 
                                                                        $desc .= $paramPrefix . $intRangeStr;
@@ -479,9 +513,10 @@ abstract class ApiBase extends ContextSource {
 
                                                $isArray = is_array( $type );
                                                if ( !$isArray
-                                                               || $isArray && count( $type ) > self::LIMIT_SML1 ) {
+                                                       || $isArray && count( $type ) > self::LIMIT_SML1
+                                               ) {
                                                        $desc .= $paramPrefix . "Maximum number of values " .
-                                                                       self::LIMIT_SML1 . " (" . self::LIMIT_SML2 . " for bots)";
+                                                               self::LIMIT_SML1 . " (" . self::LIMIT_SML2 . " for bots)";
                                                }
                                        }
                                }
@@ -493,11 +528,11 @@ abstract class ApiBase extends ContextSource {
 
                                $msg .= sprintf( "  %-19s - %s\n", $this->encodeParamName( $paramName ), $desc );
                        }
-                       return $msg;
 
-               } else {
-                       return false;
+                       return $msg;
                }
+
+               return false;
        }
 
        /**
@@ -555,6 +590,7 @@ abstract class ApiBase extends ContextSource {
        public function getFinalParams( $flags = 0 ) {
                $params = $this->getAllowedParams( $flags );
                wfRunHooks( 'APIGetAllowedParams', array( &$this, &$params, $flags ) );
+
                return $params;
        }
 
@@ -567,6 +603,7 @@ abstract class ApiBase extends ContextSource {
        public function getFinalParamDescription() {
                $desc = $this->getParamDescription();
                wfRunHooks( 'APIGetParamDescription', array( &$this, &$desc ) );
+
                return $desc;
        }
 
@@ -599,6 +636,7 @@ abstract class ApiBase extends ContextSource {
        public function getFinalResultProperties() {
                $properties = $this->getResultProperties();
                wfRunHooks( 'APIGetResultProperties', array( $this, &$properties ) );
+
                return $properties;
        }
 
@@ -624,6 +662,7 @@ abstract class ApiBase extends ContextSource {
        public function getFinalDescription() {
                $desc = $this->getDescription();
                wfRunHooks( 'APIGetDescription', array( &$this, &$desc ) );
+
                return $desc;
        }
 
@@ -660,6 +699,7 @@ abstract class ApiBase extends ContextSource {
                        }
                        $this->mParamCache[$parseLimit] = $results;
                }
+
                return $this->mParamCache[$parseLimit];
        }
 
@@ -672,6 +712,7 @@ abstract class ApiBase extends ContextSource {
        protected function getParameter( $paramName, $parseLimit = true ) {
                $params = $this->getFinalParams();
                $paramSettings = $params[$paramName];
+
                return $this->getParameterFromSettings( $paramName, $paramSettings, $parseLimit );
        }
 
@@ -688,9 +729,14 @@ abstract class ApiBase extends ContextSource {
                        array( $this, "parameterNotEmpty" ) ) ), $required );
 
                if ( count( $intersection ) > 1 ) {
-                       $this->dieUsage( "The parameters {$p}" . implode( ", {$p}", $intersection ) . ' can not be used together', 'invalidparammix' );
+                       $this->dieUsage(
+                               "The parameters {$p}" . implode( ", {$p}", $intersection ) . ' can not be used together',
+                               'invalidparammix' );
                } elseif ( count( $intersection ) == 0 ) {
-                       $this->dieUsage( "One of the parameters {$p}" . implode( ", {$p}", $required ) . ' is required', 'missingparam' );
+                       $this->dieUsage(
+                               "One of the parameters {$p}" . implode( ", {$p}", $required ) . ' is required',
+                               'missingparam'
+                       );
                }
        }
 
@@ -705,8 +751,14 @@ abstract class ApiBase extends ContextSource {
                $params = implode( ", {$p}", $params );
 
                return array(
-                       array( 'code' => "{$p}missingparam", 'info' => "One of the parameters {$p}{$params} is required" ),
-                       array( 'code' => "{$p}invalidparammix", 'info' => "The parameters {$p}{$params} can not be used together" )
+                       array(
+                               'code' => "{$p}missingparam",
+                               'info' => "One of the parameters {$p}{$params} is required"
+                       ),
+                       array(
+                               'code' => "{$p}invalidparammix",
+                               'info' => "The parameters {$p}{$params} can not be used together"
+                       )
                );
        }
 
@@ -724,7 +776,10 @@ abstract class ApiBase extends ContextSource {
                        array( $this, "parameterNotEmpty" ) ) ), $required );
 
                if ( count( $intersection ) > 1 ) {
-                       $this->dieUsage( "The parameters {$p}" . implode( ", {$p}", $intersection ) . ' can not be used together', 'invalidparammix' );
+                       $this->dieUsage(
+                               "The parameters {$p}" . implode( ", {$p}", $intersection ) . ' can not be used together',
+                               'invalidparammix'
+                       );
                }
        }
 
@@ -739,7 +794,10 @@ abstract class ApiBase extends ContextSource {
                $params = implode( ", {$p}", $params );
 
                return array(
-                       array( 'code' => "{$p}invalidparammix", 'info' => "The parameters {$p}{$params} can not be used together" )
+                       array(
+                               'code' => "{$p}invalidparammix",
+                               'info' => "The parameters {$p}{$params} can not be used together"
+                       )
                );
        }
 
@@ -810,6 +868,7 @@ abstract class ApiBase extends ContextSource {
         */
        public static function getValidNamespaces() {
                wfDeprecated( __METHOD__, '1.17' );
+
                return MWNamespace::getValidNamespaces();
        }
 
@@ -818,7 +877,7 @@ abstract class ApiBase extends ContextSource {
         * @param string $watchlist Valid values: 'watch', 'unwatch', 'preferences', 'nochange'
         * @param $titleObj Title the page under consideration
         * @param string $userOption The user option to consider when $watchlist=preferences.
-        *      If not set will magically default to either watchdefault or watchcreations
+        *    If not set will use watchdefault always and watchcreations if $titleObj doesn't exist.
         * @return bool
         */
        protected function getWatchlistValue( $watchlist, $titleObj, $userOption = null ) {
@@ -837,11 +896,12 @@ abstract class ApiBase extends ContextSource {
                                if ( $userWatching ) {
                                        return true;
                                }
-                               # If no user option was passed, use watchdefault or watchcreations
+                               # If no user option was passed, use watchdefault and watchcreations
                                if ( is_null( $userOption ) ) {
-                                       $userOption = $titleObj->exists()
-                                                       ? 'watchdefault' : 'watchcreations';
+                                       return $this->getUser()->getBoolOption( 'watchdefault' ) ||
+                                               $this->getUser()->getBoolOption( 'watchcreations' ) && !$titleObj->exists();
                                }
+
                                # Watch the article based on the user preference
                                return $this->getUser()->getBoolOption( $userOption );
 
@@ -889,12 +949,24 @@ abstract class ApiBase extends ContextSource {
                        $deprecated = false;
                        $required = false;
                } else {
-                       $default = isset( $paramSettings[self::PARAM_DFLT] ) ? $paramSettings[self::PARAM_DFLT] : null;
-                       $multi = isset( $paramSettings[self::PARAM_ISMULTI] ) ? $paramSettings[self::PARAM_ISMULTI] : false;
-                       $type = isset( $paramSettings[self::PARAM_TYPE] ) ? $paramSettings[self::PARAM_TYPE] : null;
-                       $dupes = isset( $paramSettings[self::PARAM_ALLOW_DUPLICATES] ) ? $paramSettings[self::PARAM_ALLOW_DUPLICATES] : false;
-                       $deprecated = isset( $paramSettings[self::PARAM_DEPRECATED] ) ? $paramSettings[self::PARAM_DEPRECATED] : false;
-                       $required = isset( $paramSettings[self::PARAM_REQUIRED] ) ? $paramSettings[self::PARAM_REQUIRED] : false;
+                       $default = isset( $paramSettings[self::PARAM_DFLT] )
+                               ? $paramSettings[self::PARAM_DFLT]
+                               : null;
+                       $multi = isset( $paramSettings[self::PARAM_ISMULTI] )
+                               ? $paramSettings[self::PARAM_ISMULTI]
+                               : false;
+                       $type = isset( $paramSettings[self::PARAM_TYPE] )
+                               ? $paramSettings[self::PARAM_TYPE]
+                               : null;
+                       $dupes = isset( $paramSettings[self::PARAM_ALLOW_DUPLICATES] )
+                               ? $paramSettings[self::PARAM_ALLOW_DUPLICATES]
+                               : false;
+                       $deprecated = isset( $paramSettings[self::PARAM_DEPRECATED] )
+                               ? $paramSettings[self::PARAM_DEPRECATED]
+                               : false;
+                       $required = isset( $paramSettings[self::PARAM_REQUIRED] )
+                               ? $paramSettings[self::PARAM_REQUIRED]
+                               : false;
 
                        // When type is not given, and no choices, the type is the same as $default
                        if ( !isset( $type ) ) {
@@ -909,14 +981,21 @@ abstract class ApiBase extends ContextSource {
                if ( $type == 'boolean' ) {
                        if ( isset( $default ) && $default !== false ) {
                                // Having a default value of anything other than 'false' is not allowed
-                               ApiBase::dieDebug( __METHOD__, "Boolean param $encParamName's default is set to '$default'. Boolean parameters must default to false." );
+                               ApiBase::dieDebug(
+                                       __METHOD__,
+                                       "Boolean param $encParamName's default is set to '$default'. " .
+                                               "Boolean parameters must default to false."
+                               );
                        }
 
                        $value = $this->getMain()->getCheck( $encParamName );
                } elseif ( $type == 'upload' ) {
                        if ( isset( $default ) ) {
                                // Having a default value is not allowed
-                               ApiBase::dieDebug( __METHOD__, "File upload param $encParamName's default is set to '$default'. File upload parameters may not have a default." );
+                               ApiBase::dieDebug(
+                                       __METHOD__,
+                                       "File upload param $encParamName's default is set to " .
+                                               "'$default'. File upload parameters may not have a default." );
                        }
                        if ( $multi ) {
                                ApiBase::dieDebug( __METHOD__, "Multi-values not supported for $encParamName" );
@@ -930,8 +1009,8 @@ abstract class ApiBase extends ContextSource {
                                if ( $value !== null ) {
                                        $this->dieUsage(
                                                "File upload param $encParamName is not a file upload; " .
-                                               "be sure to use multipart/form-data for your POST and include " .
-                                               "a filename in the Content-Disposition header.",
+                                                       "be sure to use multipart/form-data for your POST and include " .
+                                                       "a filename in the Content-Disposition header.",
                                                "badupload_{$encParamName}"
                                        );
                                }
@@ -945,7 +1024,12 @@ abstract class ApiBase extends ContextSource {
                }
 
                if ( isset( $value ) && ( $multi || is_array( $type ) ) ) {
-                       $value = $this->parseMultiValue( $encParamName, $value, $multi, is_array( $type ) ? $type : null );
+                       $value = $this->parseMultiValue(
+                               $encParamName,
+                               $value,
+                               $multi,
+                               is_array( $type ) ? $type : null
+                       );
                }
 
                // More validation only when choices were not given
@@ -964,7 +1048,7 @@ abstract class ApiBase extends ContextSource {
                                                $min = isset( $paramSettings[self::PARAM_MIN] ) ? $paramSettings[self::PARAM_MIN] : null;
                                                $max = isset( $paramSettings[self::PARAM_MAX] ) ? $paramSettings[self::PARAM_MAX] : null;
                                                $enforceLimits = isset( $paramSettings[self::PARAM_RANGE_ENFORCE] )
-                                                               ? $paramSettings[self::PARAM_RANGE_ENFORCE] : false;
+                                                       ? $paramSettings[self::PARAM_RANGE_ENFORCE] : false;
 
                                                if ( is_array( $value ) ) {
                                                        $value = array_map( 'intval', $value );
@@ -985,19 +1069,32 @@ abstract class ApiBase extends ContextSource {
                                                        // Don't do any validation whatsoever
                                                        break;
                                                }
-                                               if ( !isset( $paramSettings[self::PARAM_MAX] ) || !isset( $paramSettings[self::PARAM_MAX2] ) ) {
-                                                       ApiBase::dieDebug( __METHOD__, "MAX1 or MAX2 are not defined for the limit $encParamName" );
+                                               if ( !isset( $paramSettings[self::PARAM_MAX] )
+                                                       || !isset( $paramSettings[self::PARAM_MAX2] )
+                                               ) {
+                                                       ApiBase::dieDebug(
+                                                               __METHOD__,
+                                                               "MAX1 or MAX2 are not defined for the limit $encParamName"
+                                                       );
                                                }
                                                if ( $multi ) {
                                                        ApiBase::dieDebug( __METHOD__, "Multi-values not supported for $encParamName" );
                                                }
                                                $min = isset( $paramSettings[self::PARAM_MIN] ) ? $paramSettings[self::PARAM_MIN] : 0;
                                                if ( $value == 'max' ) {
-                                                       $value = $this->getMain()->canApiHighLimits() ? $paramSettings[self::PARAM_MAX2] : $paramSettings[self::PARAM_MAX];
+                                                       $value = $this->getMain()->canApiHighLimits()
+                                                               ? $paramSettings[self::PARAM_MAX2]
+                                                               : $paramSettings[self::PARAM_MAX];
                                                        $this->getResult()->setParsedLimit( $this->getModuleName(), $value );
                                                } else {
                                                        $value = intval( $value );
-                                                       $this->validateLimit( $paramName, $value, $min, $paramSettings[self::PARAM_MAX], $paramSettings[self::PARAM_MAX2] );
+                                                       $this->validateLimit(
+                                                               $paramName,
+                                                               $value,
+                                                               $min,
+                                                               $paramSettings[self::PARAM_MAX],
+                                                               $paramSettings[self::PARAM_MAX2]
+                                                       );
                                                }
                                                break;
                                        case 'boolean':
@@ -1064,13 +1161,16 @@ abstract class ApiBase extends ContextSource {
                        return array();
                }
 
-               // This is a bit awkward, but we want to avoid calling canApiHighLimits() because it unstubs $wgUser
+               // This is a bit awkward, but we want to avoid calling canApiHighLimits()
+               // because it unstubs $wgUser
                $valuesList = explode( '|', $value, self::LIMIT_SML2 + 1 );
-               $sizeLimit = count( $valuesList ) > self::LIMIT_SML1 && $this->mMainModule->canApiHighLimits() ?
-                               self::LIMIT_SML2 : self::LIMIT_SML1;
+               $sizeLimit = count( $valuesList ) > self::LIMIT_SML1 && $this->mMainModule->canApiHighLimits()
+                       ? self::LIMIT_SML2
+                       : self::LIMIT_SML1;
 
                if ( self::truncateArray( $valuesList, $sizeLimit ) ) {
-                       $this->setWarning( "Too many values supplied for parameter '$valueName': the limit is $sizeLimit" );
+                       $this->setWarning( "Too many values supplied for parameter '$valueName': " .
+                               "the limit is $sizeLimit" );
                }
 
                if ( !$allowMultiple && count( $valuesList ) != 1 ) {
@@ -1079,8 +1179,13 @@ abstract class ApiBase extends ContextSource {
                                return $value;
                        }
 
-                       $possibleValues = is_array( $allowedValues ) ? "of '" . implode( "', '", $allowedValues ) . "'" : '';
-                       $this->dieUsage( "Only one $possibleValues is allowed for parameter '$valueName'", "multival_$valueName" );
+                       $possibleValues = is_array( $allowedValues )
+                               ? "of '" . implode( "', '", $allowedValues ) . "'"
+                               : '';
+                       $this->dieUsage(
+                               "Only one $possibleValues is allowed for parameter '$valueName'",
+                               "multival_$valueName"
+                       );
                }
 
                if ( is_array( $allowedValues ) ) {
@@ -1092,7 +1197,10 @@ abstract class ApiBase extends ContextSource {
                                        $vals = implode( ", ", $unknown );
                                        $this->setWarning( "Unrecognized value$s for parameter '$valueName': $vals" );
                                } else {
-                                       $this->dieUsage( "Unrecognized value for parameter '$valueName': {$valuesList[0]}", "unknown_$valueName" );
+                                       $this->dieUsage(
+                                               "Unrecognized value for parameter '$valueName': {$valuesList[0]}",
+                                               "unknown_$valueName"
+                                       );
                                }
                        }
                        // Now throw them out
@@ -1120,7 +1228,8 @@ abstract class ApiBase extends ContextSource {
                        $value = $min;
                }
 
-               // Minimum is always validated, whereas maximum is checked only if not running in internal call mode
+               // Minimum is always validated, whereas maximum is checked only if not
+               // running in internal call mode
                if ( $this->getMain()->isInternalMode() ) {
                        return;
                }
@@ -1130,7 +1239,8 @@ abstract class ApiBase extends ContextSource {
                if ( !is_null( $max ) && $value > $max ) {
                        if ( !is_null( $botMax ) && $this->getMain()->canApiHighLimits() ) {
                                if ( $value > $botMax ) {
-                                       $msg = $this->encodeParamName( $paramName ) . " may not be over $botMax (set to $value) for bots or sysops";
+                                       $msg = $this->encodeParamName( $paramName ) .
+                                               " may not be over $botMax (set to $value) for bots or sysops";
                                        $this->warnOrDie( $msg, $enforceLimits );
                                        $value = $botMax;
                                }
@@ -1151,8 +1261,12 @@ abstract class ApiBase extends ContextSource {
        function validateTimestamp( $value, $encParamName ) {
                $unixTimestamp = wfTimestamp( TS_UNIX, $value );
                if ( $unixTimestamp === false ) {
-                       $this->dieUsage( "Invalid value '$value' for timestamp parameter $encParamName", "badtimestamp_{$encParamName}" );
+                       $this->dieUsage(
+                               "Invalid value '$value' for timestamp parameter $encParamName",
+                               "badtimestamp_{$encParamName}"
+                       );
                }
+
                return wfTimestamp( TS_MW, $unixTimestamp );
        }
 
@@ -1165,8 +1279,12 @@ abstract class ApiBase extends ContextSource {
        private function validateUser( $value, $encParamName ) {
                $title = Title::makeTitleSafe( NS_USER, $value );
                if ( $title === null ) {
-                       $this->dieUsage( "Invalid value '$value' for user parameter $encParamName", "baduser_{$encParamName}" );
+                       $this->dieUsage(
+                               "Invalid value '$value' for user parameter $encParamName",
+                               "baduser_{$encParamName}"
+                       );
                }
+
                return $title->getText();
        }
 
@@ -1179,9 +1297,9 @@ abstract class ApiBase extends ContextSource {
        private function warnOrDie( $msg, $enforceLimits = false ) {
                if ( $enforceLimits ) {
                        $this->dieUsage( $msg, 'integeroutofrange' );
-               } else {
-                       $this->setWarning( $msg );
                }
+
+               $this->setWarning( $msg );
        }
 
        /**
@@ -1196,6 +1314,7 @@ abstract class ApiBase extends ContextSource {
                        array_pop( $arr );
                        $modified = true;
                }
+
                return $modified;
        }
 
@@ -1213,7 +1332,12 @@ abstract class ApiBase extends ContextSource {
         */
        public function dieUsage( $description, $errorCode, $httpRespCode = 0, $extradata = null ) {
                Profiler::instance()->close();
-               throw new UsageException( $description, $this->encodeParamName( $errorCode ), $httpRespCode, $extradata );
+               throw new UsageException(
+                       $description,
+                       $this->encodeParamName( $errorCode ),
+                       $httpRespCode,
+                       $extradata
+               );
        }
 
        /**
@@ -1221,7 +1345,7 @@ abstract class ApiBase extends ContextSource {
         *
         * @since 1.22
         * @param Status $status Status object
-        * @throws UsageException
+        * @throws MWException
         */
        public function dieStatus( $status ) {
                if ( $status->isGood() ) {
@@ -1254,6 +1378,7 @@ abstract class ApiBase extends ContextSource {
                $this->dieUsage( $msg->inLanguage( 'en' )->useDatabase( false )->plain(), $code );
        }
 
+       // @codingStandardsIgnoreStart Allow long lines. Cannot split these.
        /**
         * Array that maps message keys to error messages. $1 and friends are replaced.
         */
@@ -1263,74 +1388,239 @@ abstract class ApiBase extends ContextSource {
                'unknownerror-nocode' => array( 'code' => 'unknownerror', 'info' => 'Unknown error' ),
 
                // Messages from Title::getUserPermissionsErrors()
-               'ns-specialprotected' => array( 'code' => 'unsupportednamespace', 'info' => "Pages in the Special namespace can't be edited" ),
-               'protectedinterface' => array( 'code' => 'protectednamespace-interface', 'info' => "You're not allowed to edit interface messages" ),
-               'namespaceprotected' => array( 'code' => 'protectednamespace', 'info' => "You're not allowed to edit pages in the \"\$1\" namespace" ),
-               'customcssprotected' => array( 'code' => 'customcssprotected', 'info' => "You're not allowed to edit custom CSS pages" ),
-               'customjsprotected' => array( 'code' => 'customjsprotected', 'info' => "You're not allowed to edit custom JavaScript pages" ),
-               'cascadeprotected' => array( 'code' => 'cascadeprotected', 'info' => "The page you're trying to edit is protected because it's included in a cascade-protected page" ),
-               'protectedpagetext' => array( 'code' => 'protectedpage', 'info' => "The \"\$1\" right is required to edit this page" ),
-               'protect-cantedit' => array( 'code' => 'cantedit', 'info' => "You can't protect this page because you can't edit it" ),
-               'badaccess-group0' => array( 'code' => 'permissiondenied', 'info' => "Permission denied" ), // Generic permission denied message
-               'badaccess-groups' => array( 'code' => 'permissiondenied', 'info' => "Permission denied" ),
-               'titleprotected' => array( 'code' => 'protectedtitle', 'info' => "This title has been protected from creation" ),
-               'nocreate-loggedin' => array( 'code' => 'cantcreate', 'info' => "You don't have permission to create new pages" ),
-               'nocreatetext' => array( 'code' => 'cantcreate-anon', 'info' => "Anonymous users can't create new pages" ),
-               'movenologintext' => array( 'code' => 'cantmove-anon', 'info' => "Anonymous users can't move pages" ),
-               'movenotallowed' => array( 'code' => 'cantmove', 'info' => "You don't have permission to move pages" ),
-               'confirmedittext' => array( 'code' => 'confirmemail', 'info' => "You must confirm your email address before you can edit" ),
-               'blockedtext' => array( 'code' => 'blocked', 'info' => "You have been blocked from editing" ),
-               'autoblockedtext' => array( 'code' => 'autoblocked', 'info' => "Your IP address has been blocked automatically, because it was used by a blocked user" ),
+               'ns-specialprotected' => array(
+                       'code' => 'unsupportednamespace',
+                       'info' => "Pages in the Special namespace can't be edited"
+               ),
+               'protectedinterface' => array(
+                       'code' => 'protectednamespace-interface',
+                       'info' => "You're not allowed to edit interface messages"
+               ),
+               'namespaceprotected' => array(
+                       'code' => 'protectednamespace',
+                       'info' => "You're not allowed to edit pages in the \"\$1\" namespace"
+               ),
+               'customcssprotected' => array(
+                       'code' => 'customcssprotected',
+                       'info' => "You're not allowed to edit custom CSS pages"
+               ),
+               'customjsprotected' => array(
+                       'code' => 'customjsprotected',
+                       'info' => "You're not allowed to edit custom JavaScript pages"
+               ),
+               'cascadeprotected' => array(
+                       'code' => 'cascadeprotected',
+                       'info' => "The page you're trying to edit is protected because it's included in a cascade-protected page"
+               ),
+               'protectedpagetext' => array(
+                       'code' => 'protectedpage',
+                       'info' => "The \"\$1\" right is required to edit this page"
+               ),
+               'protect-cantedit' => array(
+                       'code' => 'cantedit',
+                       'info' => "You can't protect this page because you can't edit it"
+               ),
+               'badaccess-group0' => array(
+                       'code' => 'permissiondenied',
+                       'info' => "Permission denied"
+               ), // Generic permission denied message
+               'badaccess-groups' => array(
+                       'code' => 'permissiondenied',
+                       'info' => "Permission denied"
+               ),
+               'titleprotected' => array(
+                       'code' => 'protectedtitle',
+                       'info' => "This title has been protected from creation"
+               ),
+               'nocreate-loggedin' => array(
+                       'code' => 'cantcreate',
+                       'info' => "You don't have permission to create new pages"
+               ),
+               'nocreatetext' => array(
+                       'code' => 'cantcreate-anon',
+                       'info' => "Anonymous users can't create new pages"
+               ),
+               'movenologintext' => array(
+                       'code' => 'cantmove-anon',
+                       'info' => "Anonymous users can't move pages"
+               ),
+               'movenotallowed' => array(
+                       'code' => 'cantmove',
+                       'info' => "You don't have permission to move pages"
+               ),
+               'confirmedittext' => array(
+                       'code' => 'confirmemail',
+                       'info' => "You must confirm your email address before you can edit"
+               ),
+               'blockedtext' => array(
+                       'code' => 'blocked',
+                       'info' => "You have been blocked from editing"
+               ),
+               'autoblockedtext' => array(
+                       'code' => 'autoblocked',
+                       'info' => "Your IP address has been blocked automatically, because it was used by a blocked user"
+               ),
 
                // Miscellaneous interface messages
-               'actionthrottledtext' => array( 'code' => 'ratelimited', 'info' => "You've exceeded your rate limit. Please wait some time and try again" ),
-               'alreadyrolled' => array( 'code' => 'alreadyrolled', 'info' => "The page you tried to rollback was already rolled back" ),
-               'cantrollback' => array( 'code' => 'onlyauthor', 'info' => "The page you tried to rollback only has one author" ),
-               'readonlytext' => array( 'code' => 'readonly', 'info' => "The wiki is currently in read-only mode" ),
-               'sessionfailure' => array( 'code' => 'badtoken', 'info' => "Invalid token" ),
-               'cannotdelete' => array( 'code' => 'cantdelete', 'info' => "Couldn't delete \"\$1\". Maybe it was deleted already by someone else" ),
-               'notanarticle' => array( 'code' => 'missingtitle', 'info' => "The page you requested doesn't exist" ),
-               'selfmove' => array( 'code' => 'selfmove', 'info' => "Can't move a page to itself" ),
-               'immobile_namespace' => array( 'code' => 'immobilenamespace', 'info' => "You tried to move pages from or to a namespace that is protected from moving" ),
-               'articleexists' => array( 'code' => 'articleexists', 'info' => "The destination article already exists and is not a redirect to the source article" ),
-               'protectedpage' => array( 'code' => 'protectedpage', 'info' => "You don't have permission to perform this move" ),
-               'hookaborted' => array( 'code' => 'hookaborted', 'info' => "The modification you tried to make was aborted by an extension hook" ),
-               'cantmove-titleprotected' => array( 'code' => 'protectedtitle', 'info' => "The destination article has been protected from creation" ),
-               'imagenocrossnamespace' => array( 'code' => 'nonfilenamespace', 'info' => "Can't move a file to a non-file namespace" ),
-               'imagetypemismatch' => array( 'code' => 'filetypemismatch', 'info' => "The new file extension doesn't match its type" ),
+               'actionthrottledtext' => array(
+                       'code' => 'ratelimited',
+                       'info' => "You've exceeded your rate limit. Please wait some time and try again"
+               ),
+               'alreadyrolled' => array(
+                       'code' => 'alreadyrolled',
+                       'info' => "The page you tried to rollback was already rolled back"
+               ),
+               'cantrollback' => array(
+                       'code' => 'onlyauthor',
+                       'info' => "The page you tried to rollback only has one author"
+               ),
+               'readonlytext' => array(
+                       'code' => 'readonly',
+                       'info' => "The wiki is currently in read-only mode"
+               ),
+               'sessionfailure' => array(
+                       'code' => 'badtoken',
+                       'info' => "Invalid token" ),
+               'cannotdelete' => array(
+                       'code' => 'cantdelete',
+                       'info' => "Couldn't delete \"\$1\". Maybe it was deleted already by someone else"
+               ),
+               'notanarticle' => array(
+                       'code' => 'missingtitle',
+                       'info' => "The page you requested doesn't exist"
+               ),
+               'selfmove' => array( 'code' => 'selfmove', 'info' => "Can't move a page to itself"
+               ),
+               'immobile_namespace' => array(
+                       'code' => 'immobilenamespace',
+                       'info' => "You tried to move pages from or to a namespace that is protected from moving"
+               ),
+               'articleexists' => array(
+                       'code' => 'articleexists',
+                       'info' => "The destination article already exists and is not a redirect to the source article"
+               ),
+               'protectedpage' => array(
+                       'code' => 'protectedpage',
+                       'info' => "You don't have permission to perform this move"
+               ),
+               'hookaborted' => array(
+                       'code' => 'hookaborted',
+                       'info' => "The modification you tried to make was aborted by an extension hook"
+               ),
+               'cantmove-titleprotected' => array(
+                       'code' => 'protectedtitle',
+                       'info' => "The destination article has been protected from creation"
+               ),
+               'imagenocrossnamespace' => array(
+                       'code' => 'nonfilenamespace',
+                       'info' => "Can't move a file to a non-file namespace"
+               ),
+               'imagetypemismatch' => array(
+                       'code' => 'filetypemismatch',
+                       'info' => "The new file extension doesn't match its type"
+               ),
                // 'badarticleerror' => shouldn't happen
                // 'badtitletext' => shouldn't happen
                'ip_range_invalid' => array( 'code' => 'invalidrange', 'info' => "Invalid IP range" ),
-               'range_block_disabled' => array( 'code' => 'rangedisabled', 'info' => "Blocking IP ranges has been disabled" ),
-               'nosuchusershort' => array( 'code' => 'nosuchuser', 'info' => "The user you specified doesn't exist" ),
+               'range_block_disabled' => array(
+                       'code' => 'rangedisabled',
+                       'info' => "Blocking IP ranges has been disabled"
+               ),
+               'nosuchusershort' => array(
+                       'code' => 'nosuchuser',
+                       'info' => "The user you specified doesn't exist"
+               ),
                'badipaddress' => array( 'code' => 'invalidip', 'info' => "Invalid IP address specified" ),
                'ipb_expiry_invalid' => array( 'code' => 'invalidexpiry', 'info' => "Invalid expiry time" ),
-               'ipb_already_blocked' => array( 'code' => 'alreadyblocked', 'info' => "The user you tried to block was already blocked" ),
-               'ipb_blocked_as_range' => array( 'code' => 'blockedasrange', 'info' => "IP address \"\$1\" was blocked as part of range \"\$2\". You can't unblock the IP individually, but you can unblock the range as a whole." ),
-               'ipb_cant_unblock' => array( 'code' => 'cantunblock', 'info' => "The block you specified was not found. It may have been unblocked already" ),
-               'mailnologin' => array( 'code' => 'cantsend', 'info' => "You are not logged in, you do not have a confirmed email address, or you are not allowed to send email to other users, so you cannot send email" ),
-               'ipbblocked' => array( 'code' => 'ipbblocked', 'info' => 'You cannot block or unblock users while you are yourself blocked' ),
-               'ipbnounblockself' => array( 'code' => 'ipbnounblockself', 'info' => 'You are not allowed to unblock yourself' ),
-               'usermaildisabled' => array( 'code' => 'usermaildisabled', 'info' => "User email has been disabled" ),
-               'blockedemailuser' => array( 'code' => 'blockedfrommail', 'info' => "You have been blocked from sending email" ),
-               'notarget' => array( 'code' => 'notarget', 'info' => "You have not specified a valid target for this action" ),
-               'noemail' => array( 'code' => 'noemail', 'info' => "The user has not specified a valid email address, or has chosen not to receive email from other users" ),
-               'rcpatroldisabled' => array( 'code' => 'patroldisabled', 'info' => "Patrolling is disabled on this wiki" ),
-               'markedaspatrollederror-noautopatrol' => array( 'code' => 'noautopatrol', 'info' => "You don't have permission to patrol your own changes" ),
-               'delete-toobig' => array( 'code' => 'bigdelete', 'info' => "You can't delete this page because it has more than \$1 revisions" ),
-               'movenotallowedfile' => array( 'code' => 'cantmovefile', 'info' => "You don't have permission to move files" ),
-               'userrights-no-interwiki' => array( 'code' => 'nointerwikiuserrights', 'info' => "You don't have permission to change user rights on other wikis" ),
-               'userrights-nodatabase' => array( 'code' => 'nosuchdatabase', 'info' => "Database \"\$1\" does not exist or is not local" ),
+               'ipb_already_blocked' => array(
+                       'code' => 'alreadyblocked',
+                       'info' => "The user you tried to block was already blocked"
+               ),
+               'ipb_blocked_as_range' => array(
+                       'code' => 'blockedasrange',
+                       'info' => "IP address \"\$1\" was blocked as part of range \"\$2\". You can't unblock the IP individually, but you can unblock the range as a whole."
+               ),
+               'ipb_cant_unblock' => array(
+                       'code' => 'cantunblock',
+                       'info' => "The block you specified was not found. It may have been unblocked already"
+               ),
+               'mailnologin' => array(
+                       'code' => 'cantsend',
+                       'info' => "You are not logged in, you do not have a confirmed email address, or you are not allowed to send email to other users, so you cannot send email"
+               ),
+               'ipbblocked' => array(
+                       'code' => 'ipbblocked',
+                       'info' => 'You cannot block or unblock users while you are yourself blocked'
+               ),
+               'ipbnounblockself' => array(
+                       'code' => 'ipbnounblockself',
+                       'info' => 'You are not allowed to unblock yourself'
+               ),
+               'usermaildisabled' => array(
+                       'code' => 'usermaildisabled',
+                       'info' => "User email has been disabled"
+               ),
+               'blockedemailuser' => array(
+                       'code' => 'blockedfrommail',
+                       'info' => "You have been blocked from sending email"
+               ),
+               'notarget' => array(
+                       'code' => 'notarget',
+                       'info' => "You have not specified a valid target for this action"
+               ),
+               'noemail' => array(
+                       'code' => 'noemail',
+                       'info' => "The user has not specified a valid email address, or has chosen not to receive email from other users"
+               ),
+               'rcpatroldisabled' => array(
+                       'code' => 'patroldisabled',
+                       'info' => "Patrolling is disabled on this wiki"
+               ),
+               'markedaspatrollederror-noautopatrol' => array(
+                       'code' => 'noautopatrol',
+                       'info' => "You don't have permission to patrol your own changes"
+               ),
+               'delete-toobig' => array(
+                       'code' => 'bigdelete',
+                       'info' => "You can't delete this page because it has more than \$1 revisions"
+               ),
+               'movenotallowedfile' => array(
+                       'code' => 'cantmovefile',
+                       'info' => "You don't have permission to move files"
+               ),
+               'userrights-no-interwiki' => array(
+                       'code' => 'nointerwikiuserrights',
+                       'info' => "You don't have permission to change user rights on other wikis"
+               ),
+               'userrights-nodatabase' => array(
+                       'code' => 'nosuchdatabase',
+                       'info' => "Database \"\$1\" does not exist or is not local"
+               ),
                'nouserspecified' => array( 'code' => 'invaliduser', 'info' => "Invalid username \"\$1\"" ),
                'noname' => array( 'code' => 'invaliduser', 'info' => "Invalid username \"\$1\"" ),
                'summaryrequired' => array( 'code' => 'summaryrequired', 'info' => 'Summary required' ),
-               'import-rootpage-invalid' => array( 'code' => 'import-rootpage-invalid', 'info' => 'Root page is an invalid title' ),
-               'import-rootpage-nosubpage' => array( 'code' => 'import-rootpage-nosubpage', 'info' => 'Namespace "$1" of the root page does not allow subpages' ),
+               'import-rootpage-invalid' => array(
+                       'code' => 'import-rootpage-invalid',
+                       'info' => 'Root page is an invalid title'
+               ),
+               'import-rootpage-nosubpage' => array(
+                       'code' => 'import-rootpage-nosubpage',
+                       'info' => 'Namespace "$1" of the root page does not allow subpages'
+               ),
 
                // API-specific messages
-               'readrequired' => array( 'code' => 'readapidenied', 'info' => "You need read permission to use this module" ),
-               'writedisabled' => array( 'code' => 'noapiwrite', 'info' => "Editing of this wiki through the API is disabled. Make sure the \$wgEnableWriteAPI=true; statement is included in the wiki's LocalSettings.php file" ),
-               'writerequired' => array( 'code' => 'writeapidenied', 'info' => "You're not allowed to edit this wiki through the API" ),
+               'readrequired' => array(
+                       'code' => 'readapidenied',
+                       'info' => "You need read permission to use this module"
+               ),
+               'writedisabled' => array(
+                       'code' => 'noapiwrite',
+                       'info' => "Editing of this wiki through the API is disabled. Make sure the \$wgEnableWriteAPI=true; statement is included in the wiki's LocalSettings.php file"
+               ),
+               'writerequired' => array(
+                       'code' => 'writeapidenied',
+                       'info' => "You're not allowed to edit this wiki through the API"
+               ),
                'missingparam' => array( 'code' => 'no$1', 'info' => "The \$1 parameter must be set" ),
                'invalidtitle' => array( 'code' => 'invalidtitle', 'info' => "Bad title \"\$1\"" ),
                'nosuchpageid' => array( 'code' => 'nosuchpageid', 'info' => "There is no page with ID \$1" ),
@@ -1339,80 +1629,245 @@ abstract class ApiBase extends ContextSource {
                'invaliduser' => array( 'code' => 'invaliduser', 'info' => "Invalid username \"\$1\"" ),
                'invalidexpiry' => array( 'code' => 'invalidexpiry', 'info' => "Invalid expiry time \"\$1\"" ),
                'pastexpiry' => array( 'code' => 'pastexpiry', 'info' => "Expiry time \"\$1\" is in the past" ),
-               'create-titleexists' => array( 'code' => 'create-titleexists', 'info' => "Existing titles can't be protected with 'create'" ),
-               'missingtitle-createonly' => array( 'code' => 'missingtitle-createonly', 'info' => "Missing titles can only be protected with 'create'" ),
-               'cantblock' => array( 'code' => 'cantblock', 'info' => "You don't have permission to block users" ),
-               'canthide' => array( 'code' => 'canthide', 'info' => "You don't have permission to hide user names from the block log" ),
-               'cantblock-email' => array( 'code' => 'cantblock-email', 'info' => "You don't have permission to block users from sending email through the wiki" ),
-               'unblock-notarget' => array( 'code' => 'notarget', 'info' => "Either the id or the user parameter must be set" ),
-               'unblock-idanduser' => array( 'code' => 'idanduser', 'info' => "The id and user parameters can't be used together" ),
-               'cantunblock' => array( 'code' => 'permissiondenied', 'info' => "You don't have permission to unblock users" ),
-               'cannotundelete' => array( 'code' => 'cantundelete', 'info' => "Couldn't undelete: the requested revisions may not exist, or may have been undeleted already" ),
-               'permdenied-undelete' => array( 'code' => 'permissiondenied', 'info' => "You don't have permission to restore deleted revisions" ),
-               'createonly-exists' => array( 'code' => 'articleexists', 'info' => "The article you tried to create has been created already" ),
-               'nocreate-missing' => array( 'code' => 'missingtitle', 'info' => "The article you tried to edit doesn't exist" ),
-               'nosuchrcid' => array( 'code' => 'nosuchrcid', 'info' => "There is no change with rcid \"\$1\"" ),
-               'protect-invalidaction' => array( 'code' => 'protect-invalidaction', 'info' => "Invalid protection type \"\$1\"" ),
-               'protect-invalidlevel' => array( 'code' => 'protect-invalidlevel', 'info' => "Invalid protection level \"\$1\"" ),
-               'toofewexpiries' => array( 'code' => 'toofewexpiries', 'info' => "\$1 expiry timestamps were provided where \$2 were needed" ),
-               'cantimport' => array( 'code' => 'cantimport', 'info' => "You don't have permission to import pages" ),
-               'cantimport-upload' => array( 'code' => 'cantimport-upload', 'info' => "You don't have permission to import uploaded pages" ),
+               'create-titleexists' => array(
+                       'code' => 'create-titleexists',
+                       'info' => "Existing titles can't be protected with 'create'"
+               ),
+               'missingtitle-createonly' => array(
+                       'code' => 'missingtitle-createonly',
+                       'info' => "Missing titles can only be protected with 'create'"
+               ),
+               'cantblock' => array( 'code' => 'cantblock',
+                       'info' => "You don't have permission to block users"
+               ),
+               'canthide' => array(
+                       'code' => 'canthide',
+                       'info' => "You don't have permission to hide user names from the block log"
+               ),
+               'cantblock-email' => array(
+                       'code' => 'cantblock-email',
+                       'info' => "You don't have permission to block users from sending email through the wiki"
+               ),
+               'unblock-notarget' => array(
+                       'code' => 'notarget',
+                       'info' => "Either the id or the user parameter must be set"
+               ),
+               'unblock-idanduser' => array(
+                       'code' => 'idanduser',
+                       'info' => "The id and user parameters can't be used together"
+               ),
+               'cantunblock' => array(
+                       'code' => 'permissiondenied',
+                       'info' => "You don't have permission to unblock users"
+               ),
+               'cannotundelete' => array(
+                       'code' => 'cantundelete',
+                       'info' => "Couldn't undelete: the requested revisions may not exist, or may have been undeleted already"
+               ),
+               'permdenied-undelete' => array(
+                       'code' => 'permissiondenied',
+                       'info' => "You don't have permission to restore deleted revisions"
+               ),
+               'createonly-exists' => array(
+                       'code' => 'articleexists',
+                       'info' => "The article you tried to create has been created already"
+               ),
+               'nocreate-missing' => array(
+                       'code' => 'missingtitle',
+                       'info' => "The article you tried to edit doesn't exist"
+               ),
+               'nosuchrcid' => array(
+                       'code' => 'nosuchrcid',
+                       'info' => "There is no change with rcid \"\$1\""
+               ),
+               'protect-invalidaction' => array(
+                       'code' => 'protect-invalidaction',
+                       'info' => "Invalid protection type \"\$1\""
+               ),
+               'protect-invalidlevel' => array(
+                       'code' => 'protect-invalidlevel',
+                       'info' => "Invalid protection level \"\$1\""
+               ),
+               'toofewexpiries' => array(
+                       'code' => 'toofewexpiries',
+                       'info' => "\$1 expiry timestamps were provided where \$2 were needed"
+               ),
+               'cantimport' => array(
+                       'code' => 'cantimport',
+                       'info' => "You don't have permission to import pages"
+               ),
+               'cantimport-upload' => array(
+                       'code' => 'cantimport-upload',
+                       'info' => "You don't have permission to import uploaded pages"
+               ),
                'importnofile' => array( 'code' => 'nofile', 'info' => "You didn't upload a file" ),
-               'importuploaderrorsize' => array( 'code' => 'filetoobig', 'info' => 'The file you uploaded is bigger than the maximum upload size' ),
-               'importuploaderrorpartial' => array( 'code' => 'partialupload', 'info' => 'The file was only partially uploaded' ),
-               'importuploaderrortemp' => array( 'code' => 'notempdir', 'info' => 'The temporary upload directory is missing' ),
-               'importcantopen' => array( 'code' => 'cantopenfile', 'info' => "Couldn't open the uploaded file" ),
-               'import-noarticle' => array( 'code' => 'badinterwiki', 'info' => 'Invalid interwiki title specified' ),
-               'importbadinterwiki' => array( 'code' => 'badinterwiki', 'info' => 'Invalid interwiki title specified' ),
-               'import-unknownerror' => array( 'code' => 'import-unknownerror', 'info' => "Unknown error on import: \"\$1\"" ),
-               'cantoverwrite-sharedfile' => array( 'code' => 'cantoverwrite-sharedfile', 'info' => 'The target file exists on a shared repository and you do not have permission to override it' ),
-               'sharedfile-exists' => array( 'code' => 'fileexists-sharedrepo-perm', 'info' => 'The target file exists on a shared repository. Use the ignorewarnings parameter to override it.' ),
-               'mustbeposted' => array( 'code' => 'mustbeposted', 'info' => "The \$1 module requires a POST request" ),
-               'show' => array( 'code' => 'show', 'info' => 'Incorrect parameter - mutually exclusive values may not be supplied' ),
-               'specialpage-cantexecute' => array( 'code' => 'specialpage-cantexecute', 'info' => "You don't have permission to view the results of this special page" ),
-               'invalidoldimage' => array( 'code' => 'invalidoldimage', 'info' => 'The oldimage parameter has invalid format' ),
-               'nodeleteablefile' => array( 'code' => 'nodeleteablefile', 'info' => 'No such old version of the file' ),
-               'fileexists-forbidden' => array( 'code' => 'fileexists-forbidden', 'info' => 'A file with name "$1" already exists, and cannot be overwritten.' ),
-               'fileexists-shared-forbidden' => array( 'code' => 'fileexists-shared-forbidden', 'info' => 'A file with name "$1" already exists in the shared file repository, and cannot be overwritten.' ),
-               'filerevert-badversion' => array( 'code' => 'filerevert-badversion', 'info' => 'There is no previous local version of this file with the provided timestamp.' ),
+               'importuploaderrorsize' => array(
+                       'code' => 'filetoobig',
+                       'info' => 'The file you uploaded is bigger than the maximum upload size'
+               ),
+               'importuploaderrorpartial' => array(
+                       'code' => 'partialupload',
+                       'info' => 'The file was only partially uploaded'
+               ),
+               'importuploaderrortemp' => array(
+                       'code' => 'notempdir',
+                       'info' => 'The temporary upload directory is missing'
+               ),
+               'importcantopen' => array(
+                       'code' => 'cantopenfile',
+                       'info' => "Couldn't open the uploaded file"
+               ),
+               'import-noarticle' => array(
+                       'code' => 'badinterwiki',
+                       'info' => 'Invalid interwiki title specified'
+               ),
+               'importbadinterwiki' => array(
+                       'code' => 'badinterwiki',
+                       'info' => 'Invalid interwiki title specified'
+               ),
+               'import-unknownerror' => array(
+                       'code' => 'import-unknownerror',
+                       'info' => "Unknown error on import: \"\$1\""
+               ),
+               'cantoverwrite-sharedfile' => array(
+                       'code' => 'cantoverwrite-sharedfile',
+                       'info' => 'The target file exists on a shared repository and you do not have permission to override it'
+               ),
+               'sharedfile-exists' => array(
+                       'code' => 'fileexists-sharedrepo-perm',
+                       'info' => 'The target file exists on a shared repository. Use the ignorewarnings parameter to override it.'
+               ),
+               'mustbeposted' => array(
+                       'code' => 'mustbeposted',
+                       'info' => "The \$1 module requires a POST request"
+               ),
+               'show' => array(
+                       'code' => 'show',
+                       'info' => 'Incorrect parameter - mutually exclusive values may not be supplied'
+               ),
+               'specialpage-cantexecute' => array(
+                       'code' => 'specialpage-cantexecute',
+                       'info' => "You don't have permission to view the results of this special page"
+               ),
+               'invalidoldimage' => array(
+                       'code' => 'invalidoldimage',
+                       'info' => 'The oldimage parameter has invalid format'
+               ),
+               'nodeleteablefile' => array(
+                       'code' => 'nodeleteablefile',
+                       'info' => 'No such old version of the file'
+               ),
+               'fileexists-forbidden' => array(
+                       'code' => 'fileexists-forbidden',
+                       'info' => 'A file with name "$1" already exists, and cannot be overwritten.'
+               ),
+               'fileexists-shared-forbidden' => array(
+                       'code' => 'fileexists-shared-forbidden',
+                       'info' => 'A file with name "$1" already exists in the shared file repository, and cannot be overwritten.'
+               ),
+               'filerevert-badversion' => array(
+                       'code' => 'filerevert-badversion',
+                       'info' => 'There is no previous local version of this file with the provided timestamp.'
+               ),
 
                // ApiEditPage messages
-               'noimageredirect-anon' => array( 'code' => 'noimageredirect-anon', 'info' => "Anonymous users can't create image redirects" ),
-               'noimageredirect-logged' => array( 'code' => 'noimageredirect', 'info' => "You don't have permission to create image redirects" ),
-               'spamdetected' => array( 'code' => 'spamdetected', 'info' => "Your edit was refused because it contained a spam fragment: \"\$1\"" ),
-               'contenttoobig' => array( 'code' => 'contenttoobig', 'info' => "The content you supplied exceeds the article size limit of \$1 kilobytes" ),
+               'noimageredirect-anon' => array(
+                       'code' => 'noimageredirect-anon',
+                       'info' => "Anonymous users can't create image redirects"
+               ),
+               'noimageredirect-logged' => array(
+                       'code' => 'noimageredirect',
+                       'info' => "You don't have permission to create image redirects"
+               ),
+               'spamdetected' => array(
+                       'code' => 'spamdetected',
+                       'info' => "Your edit was refused because it contained a spam fragment: \"\$1\""
+               ),
+               'contenttoobig' => array(
+                       'code' => 'contenttoobig',
+                       'info' => "The content you supplied exceeds the article size limit of \$1 kilobytes"
+               ),
                'noedit-anon' => array( 'code' => 'noedit-anon', 'info' => "Anonymous users can't edit pages" ),
                'noedit' => array( 'code' => 'noedit', 'info' => "You don't have permission to edit pages" ),
-               'wasdeleted' => array( 'code' => 'pagedeleted', 'info' => "The page has been deleted since you fetched its timestamp" ),
-               'blankpage' => array( 'code' => 'emptypage', 'info' => "Creating new, empty pages is not allowed" ),
+               'wasdeleted' => array(
+                       'code' => 'pagedeleted',
+                       'info' => "The page has been deleted since you fetched its timestamp"
+               ),
+               'blankpage' => array(
+                       'code' => 'emptypage',
+                       'info' => "Creating new, empty pages is not allowed"
+               ),
                'editconflict' => array( 'code' => 'editconflict', 'info' => "Edit conflict detected" ),
                'hashcheckfailed' => array( 'code' => 'badmd5', 'info' => "The supplied MD5 hash was incorrect" ),
-               'missingtext' => array( 'code' => 'notext', 'info' => "One of the text, appendtext, prependtext and undo parameters must be set" ),
-               'emptynewsection' => array( 'code' => 'emptynewsection', 'info' => 'Creating empty new sections is not possible.' ),
-               'revwrongpage' => array( 'code' => 'revwrongpage', 'info' => "r\$1 is not a revision of \"\$2\"" ),
-               'undo-failure' => array( 'code' => 'undofailure', 'info' => 'Undo failed due to conflicting intermediate edits' ),
+               'missingtext' => array(
+                       'code' => 'notext',
+                       'info' => "One of the text, appendtext, prependtext and undo parameters must be set"
+               ),
+               'emptynewsection' => array(
+                       'code' => 'emptynewsection',
+                       'info' => 'Creating empty new sections is not possible.'
+               ),
+               'revwrongpage' => array(
+                       'code' => 'revwrongpage',
+                       'info' => "r\$1 is not a revision of \"\$2\""
+               ),
+               'undo-failure' => array(
+                       'code' => 'undofailure',
+                       'info' => 'Undo failed due to conflicting intermediate edits'
+               ),
 
                // Messages from WikiPage::doEit()
-               'edit-hook-aborted' => array( 'code' => 'edit-hook-aborted', 'info' => "Your edit was aborted by an ArticleSave hook" ),
-               'edit-gone-missing' => array( 'code' => 'edit-gone-missing', 'info' => "The page you tried to edit doesn't seem to exist anymore" ),
+               'edit-hook-aborted' => array(
+                       'code' => 'edit-hook-aborted',
+                       'info' => "Your edit was aborted by an ArticleSave hook"
+               ),
+               'edit-gone-missing' => array(
+                       'code' => 'edit-gone-missing',
+                       'info' => "The page you tried to edit doesn't seem to exist anymore"
+               ),
                'edit-conflict' => array( 'code' => 'editconflict', 'info' => "Edit conflict detected" ),
-               'edit-already-exists' => array( 'code' => 'edit-already-exists', 'info' => "It seems the page you tried to create already exist" ),
+               'edit-already-exists' => array(
+                       'code' => 'edit-already-exists',
+                       'info' => 'It seems the page you tried to create already exist'
+               ),
 
                // uploadMsgs
                'invalid-file-key' => array( 'code' => 'invalid-file-key', 'info' => 'Not a valid file key' ),
                'nouploadmodule' => array( 'code' => 'nouploadmodule', 'info' => 'No upload module set' ),
-               'uploaddisabled' => array( 'code' => 'uploaddisabled', 'info' => 'Uploads are not enabled. Make sure $wgEnableUploads is set to true in LocalSettings.php and the PHP ini setting file_uploads is true' ),
-               'copyuploaddisabled' => array( 'code' => 'copyuploaddisabled', 'info' => 'Uploads by URL is not enabled. Make sure $wgAllowCopyUploads is set to true in LocalSettings.php.' ),
-               'copyuploadbaddomain' => array( 'code' => 'copyuploadbaddomain', 'info' => 'Uploads by URL are not allowed from this domain.' ),
-               'copyuploadbadurl' => array( 'code' => 'copyuploadbadurl', 'info' => 'Upload not allowed from this URL.' ),
-
-               'filename-tooshort' => array( 'code' => 'filename-tooshort', 'info' => 'The filename is too short' ),
+               'uploaddisabled' => array(
+                       'code' => 'uploaddisabled',
+                       'info' => 'Uploads are not enabled. Make sure $wgEnableUploads is set to true in LocalSettings.php and the PHP ini setting file_uploads is true'
+               ),
+               'copyuploaddisabled' => array(
+                       'code' => 'copyuploaddisabled',
+                       'info' => 'Uploads by URL is not enabled. Make sure $wgAllowCopyUploads is set to true in LocalSettings.php.'
+               ),
+               'copyuploadbaddomain' => array(
+                       'code' => 'copyuploadbaddomain',
+                       'info' => 'Uploads by URL are not allowed from this domain.'
+               ),
+               'copyuploadbadurl' => array(
+                       'code' => 'copyuploadbadurl',
+                       'info' => 'Upload not allowed from this URL.'
+               ),
+
+               'filename-tooshort' => array(
+                       'code' => 'filename-tooshort',
+                       'info' => 'The filename is too short'
+               ),
                'filename-toolong' => array( 'code' => 'filename-toolong', 'info' => 'The filename is too long' ),
-               'illegal-filename' => array( 'code' => 'illegal-filename', 'info' => 'The filename is not allowed' ),
-               'filetype-missing' => array( 'code' => 'filetype-missing', 'info' => 'The file is missing an extension' ),
+               'illegal-filename' => array(
+                       'code' => 'illegal-filename',
+                       'info' => 'The filename is not allowed'
+               ),
+               'filetype-missing' => array(
+                       'code' => 'filetype-missing',
+                       'info' => 'The file is missing an extension'
+               ),
 
                'mustbeloggedin' => array( 'code' => 'mustbeloggedin', 'info' => 'You must be logged in to $1.' )
        );
+       // @codingStandardsIgnoreEnd
 
        /**
         * Helper function for readonly errors
@@ -1447,18 +1902,19 @@ abstract class ApiBase extends ContextSource {
                global $wgDebugAPI;
                if ( $wgDebugAPI !== true ) {
                        $this->dieUsageMsg( $error );
-               } else {
-                       if ( is_string( $error ) ) {
-                               $error = array( $error );
-                       }
-                       $parsed = $this->parseMsg( $error );
-                       $this->setWarning( '$wgDebugAPI: ' . $parsed['code']
-                               . ' - ' . $parsed['info'] );
                }
+
+               if ( is_string( $error ) ) {
+                       $error = array( $error );
+               }
+
+               $parsed = $this->parseMsg( $error );
+               $this->setWarning( '$wgDebugAPI: ' . $parsed['code'] . ' - ' . $parsed['info'] );
        }
 
        /**
-        * Die with the $prefix.'badcontinue' error. This call is common enough to make it into the base method.
+        * Die with the $prefix.'badcontinue' error. This call is common enough to
+        * make it into the base method.
         * @param $condition boolean will only die if this value is true
         * @since 1.21
         */
@@ -1501,6 +1957,7 @@ abstract class ApiBase extends ContextSource {
         * Internal code errors should be reported with this method
         * @param string $method Method or function name
         * @param string $message Error message
+        * @throws MWException
         */
        protected static function dieDebug( $method, $message ) {
                throw new MWException( "Internal error in $method: $message" );
@@ -1521,6 +1978,7 @@ abstract class ApiBase extends ContextSource {
        public function isReadMode() {
                return true;
        }
+
        /**
         * Indicates whether this module requires write mode
         * @return bool
@@ -1573,7 +2031,10 @@ abstract class ApiBase extends ContextSource {
                        }
                        $token = $user->getOption( 'watchlisttoken' );
                        if ( $token == '' || $token != $params['token'] ) {
-                               $this->dieUsage( 'Incorrect watchlist token provided -- please set a correct token in Special:Preferences', 'bad_wltoken' );
+                               $this->dieUsage(
+                                       'Incorrect watchlist token provided -- please set a correct token in Special:Preferences',
+                                       'bad_wltoken'
+                               );
                        }
                } else {
                        if ( !$this->getUser()->isLoggedIn() ) {
@@ -1584,11 +2045,13 @@ abstract class ApiBase extends ContextSource {
                        }
                        $user = $this->getUser();
                }
+
                return $user;
        }
 
        /**
-        * @return bool|string|array Returns a false if the module has no help url, else returns a (array of) string
+        * @return bool|string|array Returns a false if the module has no help URL,
+        *   else returns a (array of) string
         */
        public function getHelpUrls() {
                return false;
@@ -1600,7 +2063,8 @@ abstract class ApiBase extends ContextSource {
         * Don't call this function directly: use getFinalPossibleErrors() to allow
         * hooks to modify parameters as needed.
         *
-        * @return array in the format of array( key, param1, param2, ... ) or array( 'code' => ..., 'info' => ... )
+        * @return array in the format of array( key, param1, param2, ... )
+        *   or array( 'code' => ..., 'info' => ... )
         */
        public function getPossibleErrors() {
                $ret = array();
@@ -1608,14 +2072,17 @@ abstract class ApiBase extends ContextSource {
                $params = $this->getFinalParams();
                if ( $params ) {
                        foreach ( $params as $paramName => $paramSettings ) {
-                               if ( isset( $paramSettings[ApiBase::PARAM_REQUIRED] ) && $paramSettings[ApiBase::PARAM_REQUIRED] ) {
+                               if ( isset( $paramSettings[ApiBase::PARAM_REQUIRED] )
+                                       && $paramSettings[ApiBase::PARAM_REQUIRED]
+                               ) {
                                        $ret[] = array( 'missingparam', $paramName );
                                }
                        }
                        if ( array_key_exists( 'continue', $params ) ) {
                                $ret[] = array(
                                        'code' => 'badcontinue',
-                                       'info' => 'Invalid continue param. You should pass the original value returned by the previous query'
+                                       'info' => 'Invalid continue param. You should pass the ' .
+                                               'original value returned by the previous query'
                                );
                        }
                }
@@ -1656,12 +2123,14 @@ abstract class ApiBase extends ContextSource {
        public function getFinalPossibleErrors() {
                $possibleErrors = $this->getPossibleErrors();
                wfRunHooks( 'APIGetPossibleErrors', array( $this, &$possibleErrors ) );
+
                return $possibleErrors;
        }
 
        /**
         * Parses a list of errors into a standardised format
-        * @param array $errors List of errors. Items can be in the for array( key, param1, param2, ... ) or array( 'code' => ..., 'info' => ... )
+        * @param array $errors List of errors. Items can be in the for
+        *   array( key, param1, param2, ... ) or array( 'code' => ..., 'info' => ... )
         * @return array Parsed list of errors with items in the form array( 'code' => ..., 'info' => ... )
         */
        public function parseErrors( $errors ) {
@@ -1674,6 +2143,7 @@ abstract class ApiBase extends ContextSource {
                                $ret[] = $this->parseMsg( $row );
                        }
                }
+
                return $ret;
        }
 
@@ -1687,7 +2157,7 @@ abstract class ApiBase extends ContextSource {
         */
        public function profileIn() {
                if ( $this->mTimeIn !== 0 ) {
-                       ApiBase::dieDebug( __METHOD__, 'called twice without calling profileOut()' );
+                       ApiBase::dieDebug( __METHOD__, 'Called twice without calling profileOut()' );
                }
                $this->mTimeIn = microtime( true );
                wfProfileIn( $this->getModuleProfileName() );
@@ -1698,10 +2168,13 @@ abstract class ApiBase extends ContextSource {
         */
        public function profileOut() {
                if ( $this->mTimeIn === 0 ) {
-                       ApiBase::dieDebug( __METHOD__, 'called without calling profileIn() first' );
+                       ApiBase::dieDebug( __METHOD__, 'Called without calling profileIn() first' );
                }
                if ( $this->mDBTimeIn !== 0 ) {
-                       ApiBase::dieDebug( __METHOD__, 'must be called after database profiling is done with profileDBOut()' );
+                       ApiBase::dieDebug(
+                               __METHOD__,
+                               'Must be called after database profiling is done with profileDBOut()'
+                       );
                }
 
                $this->mModuleTime += microtime( true ) - $this->mTimeIn;
@@ -1728,8 +2201,9 @@ abstract class ApiBase extends ContextSource {
         */
        public function getProfileTime() {
                if ( $this->mTimeIn !== 0 ) {
-                       ApiBase::dieDebug( __METHOD__, 'called without calling profileOut() first' );
+                       ApiBase::dieDebug( __METHOD__, 'Called without calling profileOut() first' );
                }
+
                return $this->mModuleTime;
        }
 
@@ -1743,10 +2217,13 @@ abstract class ApiBase extends ContextSource {
         */
        public function profileDBIn() {
                if ( $this->mTimeIn === 0 ) {
-                       ApiBase::dieDebug( __METHOD__, 'must be called while profiling the entire module with profileIn()' );
+                       ApiBase::dieDebug(
+                               __METHOD__,
+                               'Must be called while profiling the entire module with profileIn()'
+                       );
                }
                if ( $this->mDBTimeIn !== 0 ) {
-                       ApiBase::dieDebug( __METHOD__, 'called twice without calling profileDBOut()' );
+                       ApiBase::dieDebug( __METHOD__, 'Called twice without calling profileDBOut()' );
                }
                $this->mDBTimeIn = microtime( true );
                wfProfileIn( $this->getModuleProfileName( true ) );
@@ -1757,10 +2234,11 @@ abstract class ApiBase extends ContextSource {
         */
        public function profileDBOut() {
                if ( $this->mTimeIn === 0 ) {
-                       ApiBase::dieDebug( __METHOD__, 'must be called while profiling the entire module with profileIn()' );
+                       ApiBase::dieDebug( __METHOD__, 'Must be called while profiling ' .
+                               'the entire module with profileIn()' );
                }
                if ( $this->mDBTimeIn === 0 ) {
-                       ApiBase::dieDebug( __METHOD__, 'called without calling profileDBIn() first' );
+                       ApiBase::dieDebug( __METHOD__, 'Called without calling profileDBIn() first' );
                }
 
                $time = microtime( true ) - $this->mDBTimeIn;
@@ -1777,8 +2255,9 @@ abstract class ApiBase extends ContextSource {
         */
        public function getProfileDBTime() {
                if ( $this->mDBTimeIn !== 0 ) {
-                       ApiBase::dieDebug( __METHOD__, 'called without calling profileDBOut() first' );
+                       ApiBase::dieDebug( __METHOD__, 'Called without calling profileDBOut() first' );
                }
+
                return $this->mDBTime;
        }
 
@@ -1792,6 +2271,7 @@ abstract class ApiBase extends ContextSource {
                        $this->mSlaveDB = wfGetDB( DB_SLAVE, 'api' );
                        $this->profileDBOut();
                }
+
                return $this->mSlaveDB;
        }
 
index 975153a..332fa9e 100644 (file)
@@ -55,8 +55,11 @@ class ApiBlock extends ApiBase {
                }
 
                $target = User::newFromName( $params['user'] );
-               // Bug 38633 - if the target is a user (not an IP address), but it doesn't exist or is unusable, error.
-               if ( $target instanceof User && ( $target->isAnon() /* doesn't exist */ || !User::isUsableName( $target->getName() ) ) ) {
+               // Bug 38633 - if the target is a user (not an IP address), but it
+               // doesn't exist or is unusable, error.
+               if ( $target instanceof User &&
+                       ( $target->isAnon() /* doesn't exist */ || !User::isUsableName( $target->getName() ) )
+               ) {
                        $this->dieUsageMsg( array( 'nosuchuser', $params['user'] ) );
                }
 
@@ -167,14 +170,18 @@ class ApiBlock extends ApiBase {
                return array(
                        'user' => 'Username, IP address or IP range you want to block',
                        'token' => 'A block token previously obtained through prop=info',
-                       'expiry' => 'Relative expiry time, e.g. \'5 months\' or \'2 weeks\'. If set to \'infinite\', \'indefinite\' or \'never\', the block will never expire.',
+                       'expiry' => 'Relative expiry time, e.g. \'5 months\' or \'2 weeks\'. ' .
+                               'If set to \'infinite\', \'indefinite\' or \'never\', the block will never expire.',
                        'reason' => 'Reason for block',
                        'anononly' => 'Block anonymous users only (i.e. disable anonymous edits for this IP)',
                        'nocreate' => 'Prevent account creation',
-                       'autoblock' => 'Automatically block the last used IP address, and any subsequent IP addresses they try to login from',
-                       'noemail' => 'Prevent user from sending email through the wiki. (Requires the "blockemail" right.)',
+                       'autoblock' => 'Automatically block the last used IP address, and ' .
+                               'any subsequent IP addresses they try to login from',
+                       'noemail'
+                               => 'Prevent user from sending email through the wiki. (Requires the "blockemail" right.)',
                        'hidename' => 'Hide the username from the block log. (Requires the "hideuser" right.)',
-                       'allowusertalk' => 'Allow the user to edit their own talk page (depends on $wgBlockAllowsUTEdit)',
+                       'allowusertalk'
+                               => 'Allow the user to edit their own talk page (depends on $wgBlockAllowsUTEdit)',
                        'reblock' => 'If the user is already blocked, overwrite the existing block',
                        'watchuser' => 'Watch the user/IP\'s user and talk pages',
                );
index 1e35c34..237e8c8 100644 (file)
@@ -65,12 +65,15 @@ class ApiComparePages extends ApiBase {
                $difftext = $de->getDiffBody();
 
                if ( $difftext === false ) {
-                       $this->dieUsage( 'The diff cannot be retrieved. ' .
-                               'Maybe one or both revisions do not exist or you do not have permission to view them.', 'baddiff' );
-               } else {
-                       ApiResult::setContent( $vals, $difftext );
+                       $this->dieUsage(
+                               'The diff cannot be retrieved. Maybe one or both revisions do ' .
+                                       'not exist or you do not have permission to view them.',
+                               'baddiff'
+                       );
                }
 
+               ApiResult::setContent( $vals, $difftext );
+
                $this->getResult()->addValue( null, $this->getModuleName(), $vals );
        }
 
@@ -88,15 +91,20 @@ class ApiComparePages extends ApiBase {
                        if ( !$title || $title->isExternal() ) {
                                $this->dieUsageMsg( array( 'invalidtitle', $titleText ) );
                        }
+
                        return $title->getLatestRevID();
                } elseif ( $titleId ) {
                        $title = Title::newFromID( $titleId );
                        if ( !$title ) {
                                $this->dieUsageMsg( array( 'nosuchpageid', $titleId ) );
                        }
+
                        return $title->getLatestRevID();
                }
-               $this->dieUsage( 'inputneeded', 'A title, a page ID, or a revision number is needed for both the from and the to parameters' );
+               $this->dieUsage(
+                       'A title, a page ID, or a revision number is needed for both the from and the to parameters',
+                       'inputneeded'
+               );
        }
 
        public function getAllowedParams() {
@@ -159,7 +167,11 @@ class ApiComparePages extends ApiBase {
                        array( 'code' => 'inputneeded', 'info' => 'A title or a revision is needed' ),
                        array( 'invalidtitle', 'title' ),
                        array( 'nosuchpageid', 'pageid' ),
-                       array( 'code' => 'baddiff', 'info' => 'The diff cannot be retrieved. Maybe one or both revisions do not exist or you do not have permission to view them.' ),
+                       array(
+                               'code' => 'baddiff',
+                               'info' => 'The diff cannot be retrieved. Maybe one or both ' .
+                                       'revisions do not exist or you do not have permission to view them.'
+                       ),
                ) );
        }
 
index 0e752c5..439f46b 100644 (file)
@@ -39,7 +39,10 @@ class ApiCreateAccount extends ApiBase {
                // Use userCan in order to hit GlobalBlock checks (according to Special:userlogin)
                $loginTitle = SpecialPage::getTitleFor( 'Userlogin' );
                if ( !$loginTitle->userCan( 'createaccount', $this->getUser() ) ) {
-                       $this->dieUsage( 'You do not have the right to create a new account', 'permdenied-createaccount' );
+                       $this->dieUsage(
+                               'You do not have the right to create a new account',
+                               'permdenied-createaccount'
+                       );
                }
                if ( $this->getUser()->isBlockedFromCreateAccount() ) {
                        $this->dieUsage( 'You cannot create a new account because you are blocked', 'blocked' );
@@ -96,7 +99,12 @@ class ApiCreateAccount extends ApiBase {
                        if ( $params['mailpassword'] ) {
                                // If mailpassword was set, disable the password and send an email.
                                $user->setPassword( null );
-                               $status->merge( $loginForm->mailPasswordInternal( $user, false, 'createaccount-title', 'createaccount-text' ) );
+                               $status->merge( $loginForm->mailPasswordInternal(
+                                       $user,
+                                       false,
+                                       'createaccount-title',
+                                       'createaccount-text'
+                               ) );
                        } elseif ( $wgEmailAuthentication && Sanitizer::validateEmail( $user->getEmail() ) ) {
                                // Send out an email authentication message if needed
                                $status->merge( $user->sendConfirmationMail() );
@@ -172,6 +180,7 @@ class ApiCreateAccount extends ApiBase {
 
        public function getAllowedParams() {
                global $wgEmailConfirmToEdit;
+
                return array(
                        'name' => array(
                                ApiBase::PARAM_TYPE => 'user',
@@ -196,6 +205,7 @@ class ApiCreateAccount extends ApiBase {
 
        public function getParamDescription() {
                $p = $this->getModulePrefix();
+
                return array(
                        'name' => 'Username',
                        'password' => "Password (ignored if {$p}mailpassword is set)",
@@ -205,7 +215,8 @@ class ApiCreateAccount extends ApiBase {
                        'realname' => 'Real name of user (optional)',
                        'mailpassword' => 'If set to any value, a random password will be emailed to the user',
                        'reason' => 'Optional reason for creating the account to be put in the logs',
-                       'language' => 'Language code to set as default for the user (optional, defaults to content language)'
+                       'language'
+                               => 'Language code to set as default for the user (optional, defaults to content language)'
                );
        }
 
@@ -254,7 +265,10 @@ class ApiCreateAccount extends ApiBase {
                $errors = parent::getPossibleErrors();
                // All local errors are from LoginForm, which means they're actually message keys.
                foreach ( $localErrors as $error ) {
-                       $errors[] = array( 'code' => $error, 'info' => wfMessage( $error )->inLanguage( 'en' )->useDatabase( false )->parse() );
+                       $errors[] = array(
+                               'code' => $error,
+                               'info' => wfMessage( $error )->inLanguage( 'en' )->useDatabase( false )->parse()
+                       );
                }
 
                $errors[] = array(
@@ -278,8 +292,10 @@ class ApiCreateAccount extends ApiBase {
                global $wgMinimalPasswordLength;
                $errors[] = array(
                        'code' => 'passwordtooshort',
-                       'info' => wfMessage( 'passwordtooshort', $wgMinimalPasswordLength )->inLanguage( 'en' )->useDatabase( false )->parse()
+                       'info' => wfMessage( 'passwordtooshort', $wgMinimalPasswordLength )
+                               ->inLanguage( 'en' )->useDatabase( false )->parse()
                );
+
                return $errors;
        }
 
index aea1048..c09cad3 100644 (file)
@@ -31,7 +31,6 @@
  * @ingroup API
  */
 class ApiDelete extends ApiBase {
-
        /**
         * Extracts the title, token, and reason from the request parameters and invokes
         * the local delete() function with these as arguments. It does not make use of
@@ -52,7 +51,14 @@ class ApiDelete extends ApiBase {
                $user = $this->getUser();
 
                if ( $titleObj->getNamespace() == NS_FILE ) {
-                       $status = self::deleteFile( $pageObj, $user, $params['token'], $params['oldimage'], $reason, false );
+                       $status = self::deleteFile(
+                               $pageObj,
+                               $user,
+                               $params['token'],
+                               $params['oldimage'],
+                               $reason,
+                               false
+                       );
                } else {
                        $status = self::delete( $pageObj, $user, $params['token'], $reason );
                }
@@ -121,20 +127,23 @@ class ApiDelete extends ApiBase {
                }
 
                $error = '';
+
                // Luckily, Article.php provides a reusable delete function that does the hard work for us
                return $page->doDeleteArticleReal( $reason, false, 0, true, $error );
        }
 
        /**
-        * @param $page WikiPage|Page object to work on
-        * @param $user User doing the action
-        * @param $token
-        * @param $oldimage
-        * @param $reason
-        * @param $suppress bool
+        * @param Page $page Object to work on
+        * @param User $user User doing the action
+        * @param string $token Delete token (same as edit token)
+        * @param string $oldimage Archive name
+        * @param string $reason Reason for the deletion. Autogenerated if null.
+        * @param bool $suppress Whether to mark all deleted versions as restricted
         * @return Status|array
         */
-       public static function deleteFile( Page $page, User $user, $token, $oldimage, &$reason = null, $suppress = false ) {
+       public static function deleteFile( Page $page, User $user, $token, $oldimage,
+               &$reason = null, $suppress = false
+       ) {
                $title = $page->getTitle();
                $errors = self::getPermissionsError( $title, $user, $token );
                if ( count( $errors ) ) {
@@ -159,6 +168,7 @@ class ApiDelete extends ApiBase {
                if ( is_null( $reason ) ) { // Log and RC don't like null reasons
                        $reason = '';
                }
+
                return FileDeleteForm::doDelete( $title, $file, $oldimage, $reason, $suppress, $user );
        }
 
@@ -204,13 +214,16 @@ class ApiDelete extends ApiBase {
 
        public function getParamDescription() {
                $p = $this->getModulePrefix();
+
                return array(
                        'title' => "Title of the page you want to delete. Cannot be used together with {$p}pageid",
                        'pageid' => "Page ID of the page you want to delete. Cannot be used together with {$p}title",
                        'token' => 'A delete token previously retrieved through prop=info',
-                       'reason' => 'Reason for the deletion. If not set, an automatically generated reason will be used',
+                       'reason'
+                               => 'Reason for the deletion. If not set, an automatically generated reason will be used',
                        'watch' => 'Add the page to your watchlist',
-                       'watchlist' => 'Unconditionally add or remove the page from your watchlist, use preferences or do not change watch',
+                       'watchlist' => 'Unconditionally add or remove the page from your ' .
+                               'watchlist, use preferences or do not change watch',
                        'unwatch' => 'Remove the page from your watchlist',
                        'oldimage' => 'The name of the old image to delete as provided by iiprop=archivename'
                );
@@ -255,7 +268,8 @@ class ApiDelete extends ApiBase {
        public function getExamples() {
                return array(
                        'api.php?action=delete&title=Main%20Page&token=123ABC' => 'Delete the Main Page',
-                       'api.php?action=delete&title=Main%20Page&token=123ABC&reason=Preparing%20for%20move' => 'Delete the Main Page with the reason "Preparing for move"',
+                       'api.php?action=delete&title=Main%20Page&token=123ABC&reason=Preparing%20for%20move'
+                               => 'Delete the Main Page with the reason "Preparing for move"',
                );
        }
 
index bd61895..73eebca 100644 (file)
  * @ingroup API
  */
 class ApiEditPage extends ApiBase {
-
        public function execute() {
                $user = $this->getUser();
                $params = $this->extractRequestParams();
 
                if ( is_null( $params['text'] ) && is_null( $params['appendtext'] ) &&
-                               is_null( $params['prependtext'] ) &&
-                               $params['undo'] == 0 )
-               {
+                       is_null( $params['prependtext'] ) &&
+                       $params['undo'] == 0
+               {
                        $this->dieUsageMsg( 'missingtext' );
                }
 
@@ -53,8 +52,8 @@ class ApiEditPage extends ApiBase {
                                $oldTitle = $titleObj;
 
                                $titles = Revision::newFromTitle( $oldTitle, false, Revision::READ_LATEST )
-                                                       ->getContent( Revision::FOR_THIS_USER, $user )
-                                                       ->getRedirectChain();
+                                       ->getContent( Revision::FOR_THIS_USER, $user )
+                                       ->getRedirectChain();
                                // array_shift( $titles );
 
                                $redirValues = array();
@@ -88,7 +87,8 @@ class ApiEditPage extends ApiBase {
                        $contentHandler = ContentHandler::getForModelID( $params['contentmodel'] );
                }
 
-               // @todo ask handler whether direct editing is supported at all! make allowFlatEdit() method or some such
+               // @todo Ask handler whether direct editing is supported at all! make
+               // allowFlatEdit() method or some such
 
                if ( !isset( $params['contentformat'] ) || $params['contentformat'] == '' ) {
                        $params['contentformat'] = $contentHandler->getDefaultFormat();
@@ -101,7 +101,7 @@ class ApiEditPage extends ApiBase {
                        $model = $contentHandler->getModelID();
 
                        $this->dieUsage( "The requested format $contentFormat is not supported for content model " .
-                                                       " $model used by $name", 'badformat' );
+                               " $model used by $name", 'badformat' );
                }
 
                if ( $params['createonly'] && $titleObj->exists() ) {
@@ -121,8 +121,7 @@ class ApiEditPage extends ApiBase {
                }
 
                $toMD5 = $params['text'];
-               if ( !is_null( $params['appendtext'] ) || !is_null( $params['prependtext'] ) )
-               {
+               if ( !is_null( $params['appendtext'] ) || !is_null( $params['prependtext'] ) ) {
                        $content = $pageObj->getContent();
 
                        if ( !$content ) {
@@ -138,6 +137,7 @@ class ApiEditPage extends ApiBase {
                                                $content = ContentHandler::makeContent( $text, $this->getTitle() );
                                        } catch ( MWContentSerializationException $ex ) {
                                                $this->dieUsage( $ex->getMessage(), 'parseerror' );
+
                                                return;
                                        }
                                } else {
@@ -156,7 +156,10 @@ class ApiEditPage extends ApiBase {
                        if ( !is_null( $params['section'] ) ) {
                                if ( !$contentHandler->supportsSections() ) {
                                        $modelName = $contentHandler->getModelID();
-                                       $this->dieUsage( "Sections are not supported for this content model: $modelName.", 'sectionsnotsupported' );
+                                       $this->dieUsage(
+                                               "Sections are not supported for this content model: $modelName.",
+                                               'sectionsnotsupported'
+                                       );
                                }
 
                                if ( $params['section'] == 'new' ) {
@@ -187,7 +190,7 @@ class ApiEditPage extends ApiBase {
                        if ( $params['undoafter'] > 0 ) {
                                if ( $params['undo'] < $params['undoafter'] ) {
                                        list( $params['undo'], $params['undoafter'] ) =
-                                       array( $params['undoafter'], $params['undo'] );
+                                               array( $params['undoafter'], $params['undo'] );
                                }
                                $undoafterRev = Revision::newFromID( $params['undoafter'] );
                        }
@@ -204,13 +207,19 @@ class ApiEditPage extends ApiBase {
                        }
 
                        if ( $undoRev->getPage() != $pageObj->getID() ) {
-                               $this->dieUsageMsg( array( 'revwrongpage', $undoRev->getID(), $titleObj->getPrefixedText() ) );
+                               $this->dieUsageMsg( array( 'revwrongpage', $undoRev->getID(),
+                                       $titleObj->getPrefixedText() ) );
                        }
                        if ( $undoafterRev->getPage() != $pageObj->getID() ) {
-                               $this->dieUsageMsg( array( 'revwrongpage', $undoafterRev->getID(), $titleObj->getPrefixedText() ) );
+                               $this->dieUsageMsg( array( 'revwrongpage', $undoafterRev->getID(),
+                                       $titleObj->getPrefixedText() ) );
                        }
 
-                       $newContent = $contentHandler->getUndoContent( $pageObj->getRevision(), $undoRev, $undoafterRev );
+                       $newContent = $contentHandler->getUndoContent(
+                               $pageObj->getRevision(),
+                               $undoRev,
+                               $undoafterRev
+                       );
 
                        if ( !$newContent ) {
                                $this->dieUsageMsg( 'undo-failure' );
@@ -220,8 +229,11 @@ class ApiEditPage extends ApiBase {
 
                        // If no summary was given and we only undid one rev,
                        // use an autosummary
-                       if ( is_null( $params['summary'] ) && $titleObj->getNextRevisionID( $undoafterRev->getID() ) == $params['undo'] ) {
-                               $params['summary'] = wfMessage( 'undo-summary', $params['undo'], $undoRev->getUserText() )->inContentLanguage()->text();
+                       if ( is_null( $params['summary'] ) &&
+                               $titleObj->getNextRevisionID( $undoafterRev->getID() ) == $params['undo']
+                       ) {
+                               $params['summary'] = wfMessage( 'undo-summary' )
+                                       ->params ( $params['undo'], $undoRev->getUserText() )->inContentLanguage()->text();
                        }
                }
 
@@ -333,9 +345,9 @@ class ApiEditPage extends ApiBase {
 
                // The following is needed to give the hook the full content of the
                // new revision rather than just the current section. (Bug 52077)
-               if ( !is_null( $params['section'] ) && $contentHandler->supportsSections() && $titleObj->exists() ) {
-
-                       $sectionTitle = '';
+               if ( !is_null( $params['section'] ) &&
+                       $contentHandler->supportsSections() && $titleObj->exists()
+               ) {
                        // If sectiontitle is set, use it, otherwise use the summary as the section title (for
                        // backwards compatibility with old forms/bots).
                        if ( $ep->sectiontitle !== '' ) {
@@ -346,7 +358,11 @@ class ApiEditPage extends ApiBase {
 
                        $contentObj = $contentHandler->unserializeContent( $content, $contentFormat );
 
-                       $fullContentObj = $articleObject->replaceSectionContent( $params['section'], $contentObj, $sectionTitle );
+                       $fullContentObj = $articleObject->replaceSectionContent(
+                               $params['section'],
+                               $contentObj,
+                               $sectionTitle
+                       );
                        if ( $fullContentObj ) {
                                $content = $fullContentObj->serialize( $contentFormat );
                        } else {
@@ -363,10 +379,11 @@ class ApiEditPage extends ApiBase {
                        if ( count( $r ) ) {
                                $r['result'] = 'Failure';
                                $apiResult->addValue( null, $this->getModuleName(), $r );
+
                                return;
-                       } else {
-                               $this->dieUsageMsg( 'hookaborted' );
                        }
+
+                       $this->dieUsageMsg( 'hookaborted' );
                }
 
                // Do the actual save
@@ -510,14 +527,25 @@ class ApiEditPage extends ApiBase {
                                array( 'emptynewsection' ),
                                array( 'unknownerror', 'retval' ),
                                array( 'code' => 'nosuchsection', 'info' => 'There is no section section.' ),
-                               array( 'code' => 'invalidsection', 'info' => 'The section parameter must be set to an integer or \'new\'' ),
-                               array( 'code' => 'sectionsnotsupported', 'info' => 'Sections are not supported for this type of page.' ),
-                               array( 'code' => 'editnotsupported', 'info' => 'Editing of this type of page is not supported using '
-                                                                                                                               . 'the text based edit API.' ),
-                               array( 'code' => 'appendnotsupported', 'info' => 'This type of page can not be edited by appending '
-                                                                                                                               . 'or prepending text.' ),
-                               array( 'code' => 'badformat', 'info' => 'The requested serialization format can not be applied to '
-                                                                                                               . 'the page\'s content model' ),
+                               array(
+                                       'code' => 'invalidsection',
+                                       'info' => 'The section parameter must be set to an integer or \'new\''
+                               ),
+                               array(
+                                       'code' => 'sectionsnotsupported',
+                                       'info' => 'Sections are not supported for this type of page.'
+                               ),
+                               array(
+                                       'code' => 'editnotsupported',
+                                       'info' => 'Editing of this type of page is not supported using the text based edit API.'
+                               ),
+                               array(
+                                       'code' => 'appendnotsupported',
+                                       'info' => 'This type of page can not be edited by appending or prepending text.' ),
+                               array(
+                                       'code' => 'badformat',
+                                       'info' => 'The requested serialization format can not be applied to the page\'s content model'
+                               ),
                                array( 'customcssprotected' ),
                                array( 'customjsprotected' ),
                        )
@@ -591,36 +619,46 @@ class ApiEditPage extends ApiBase {
 
        public function getParamDescription() {
                $p = $this->getModulePrefix();
+
                return array(
                        'title' => "Title of the page you want to edit. Cannot be used together with {$p}pageid",
                        'pageid' => "Page ID of the page you want to edit. Cannot be used together with {$p}title",
                        'section' => 'Section number. 0 for the top section, \'new\' for a new section',
                        'sectiontitle' => 'The title for a new section',
                        'text' => 'Page content',
-                       'token' => array( 'Edit token. You can get one of these through prop=info.',
-                                               "The token should always be sent as the last parameter, or at least, after the {$p}text parameter"
+                       'token' => array(
+                               'Edit token. You can get one of these through prop=info.',
+                               "The token should always be sent as the last parameter, or at " .
+                                       "least, after the {$p}text parameter"
                        ),
-                       'summary' => "Edit summary. Also section title when {$p}section=new and {$p}sectiontitle is not set",
+                       'summary'
+                               => "Edit summary. Also section title when {$p}section=new and {$p}sectiontitle is not set",
                        'minor' => 'Minor edit',
                        'notminor' => 'Non-minor edit',
                        'bot' => 'Mark this edit as bot',
-                       'basetimestamp' => array( 'Timestamp of the base revision (obtained through prop=revisions&rvprop=timestamp).',
-                                               'Used to detect edit conflicts; leave unset to ignore conflicts'
+                       'basetimestamp' => array(
+                               'Timestamp of the base revision (obtained through prop=revisions&rvprop=timestamp).',
+                               'Used to detect edit conflicts; leave unset to ignore conflicts'
                        ),
-                       'starttimestamp' => array( 'Timestamp when you obtained the edit token.',
-                                               'Used to detect edit conflicts; leave unset to ignore conflicts'
+                       'starttimestamp' => array(
+                               'Timestamp when you obtained the edit token.',
+                               'Used to detect edit conflicts; leave unset to ignore conflicts'
                        ),
                        'recreate' => 'Override any errors about the article having been deleted in the meantime',
                        'createonly' => 'Don\'t edit the page if it exists already',
                        'nocreate' => 'Throw an error if the page doesn\'t exist',
                        'watch' => 'Add the page to your watchlist',
                        'unwatch' => 'Remove the page from your watchlist',
-                       'watchlist' => 'Unconditionally add or remove the page from your watchlist, use preferences or do not change watch',
-                       'md5' => array( "The MD5 hash of the {$p}text parameter, or the {$p}prependtext and {$p}appendtext parameters concatenated.",
-                                       'If set, the edit won\'t be done unless the hash is correct' ),
+                       'watchlist' => 'Unconditionally add or remove the page from your ' .
+                               'watchlist, use preferences or do not change watch',
+                       'md5' => array(
+                               "The MD5 hash of the {$p}text parameter, or the {$p}prependtext " .
+                                       "and {$p}appendtext parameters concatenated.",
+                               'If set, the edit won\'t be done unless the hash is correct'
+                       ),
                        'prependtext' => "Add this text to the beginning of the page. Overrides {$p}text",
                        'appendtext' => array( "Add this text to the end of the page. Overrides {$p}text.",
-                                               "Use {$p}section=new to append a new section" ),
+                               "Use {$p}section=new to append a new section" ),
                        'undo' => "Undo this revision. Overrides {$p}text, {$p}prependtext and {$p}appendtext",
                        'undoafter' => 'Undo all revisions from undo to this one. If not set, just undo one revision',
                        'redirect' => 'Automatically resolve redirects',
@@ -674,11 +712,14 @@ class ApiEditPage extends ApiBase {
 
        public function getExamples() {
                return array(
-                       'api.php?action=edit&title=Test&summary=test%20summary&text=article%20content&basetimestamp=20070824123454&token=%2B\\'
+                       'api.php?action=edit&title=Test&summary=test%20summary&' .
+                       'text=article%20content&basetimestamp=20070824123454&token=%2B\\'
                                => 'Edit a page (anonymous user)',
-                       'api.php?action=edit&title=Test&summary=NOTOC&minor=&prependtext=__NOTOC__%0A&basetimestamp=20070824123454&token=%2B\\'
+                       'api.php?action=edit&title=Test&summary=NOTOC&minor=&' .
+                               'prependtext=__NOTOC__%0A&basetimestamp=20070824123454&token=%2B\\'
                                => 'Prepend __NOTOC__ to a page (anonymous user)',
-                       'api.php?action=edit&title=Test&undo=13585&undoafter=13579&basetimestamp=20070824123454&token=%2B\\'
+                       'api.php?action=edit&title=Test&undo=13585&undoafter=13579&' .
+                               'basetimestamp=20070824123454&token=%2B\\'
                                => 'Undo r13579 through r13585 with autosummary (anonymous user)',
                );
        }
index cd0d0cb..29f7e05 100644 (file)
@@ -149,7 +149,8 @@ class ApiEmailUser extends ApiBase {
 
        public function getExamples() {
                return array(
-                       'api.php?action=emailuser&target=WikiSysop&text=Content' => 'Send an email to the User "WikiSysop" with the text "Content"',
+                       'api.php?action=emailuser&target=WikiSysop&text=Content'
+                               => 'Send an email to the User "WikiSysop" with the text "Content"',
                );
        }
 
index 0569109..27037cb 100644 (file)
@@ -61,8 +61,8 @@ class ApiFeedContributions extends ApiBase {
                $feedUrl = SpecialPage::getTitleFor( 'Contributions', $params['user'] )->getFullURL();
 
                $target = $params['user'] == 'newbies'
-                               ? 'newbies'
-                               : Title::makeTitleSafe( NS_USER, $params['user'] )->getText();
+                       ? 'newbies'
+                       : Title::makeTitleSafe( NS_USER, $params['user'] )->getText();
 
                $feed = new $wgFeedClasses[$params['feedformat']] (
                        $feedTitle,
@@ -107,6 +107,7 @@ class ApiFeedContributions extends ApiBase {
                                $comments
                        );
                }
+
                return null;
        }
 
@@ -142,12 +143,14 @@ class ApiFeedContributions extends ApiBase {
                                htmlspecialchars( FeedItem::stripComment( $revision->getComment() ) ) .
                                "</p>\n<hr />\n<div>" . $html . "</div>";
                }
+
                return '';
        }
 
        public function getAllowedParams() {
                global $wgFeedClasses;
                $feedFormatNames = array_keys( $wgFeedClasses );
+
                return array(
                        'feedformat' => array(
                                ApiBase::PARAM_DFLT => 'rss',
index fbb70fb..84c1fae 100644 (file)
@@ -132,16 +132,21 @@ class ApiFeedWatchlist extends ApiBase {
                        $feedTitle = $wgSitename . ' - ' . $msg . ' [' . $wgLanguageCode . ']';
                        $feedUrl = SpecialPage::getTitleFor( 'Watchlist' )->getFullURL();
 
-                       $feed = new $wgFeedClasses[$params['feedformat']] ( $feedTitle, htmlspecialchars( $msg ), $feedUrl );
+                       $feed = new $wgFeedClasses[$params['feedformat']] (
+                               $feedTitle,
+                               htmlspecialchars( $msg ),
+                               $feedUrl
+                       );
 
                        ApiFormatFeedWrapper::setResult( $this->getResult(), $feed, $feedItems );
-
                } catch ( Exception $e ) {
-
                        // Error results should not be cached
                        $this->getMain()->setCacheMaxAge( 0 );
 
-                       $feedTitle = $wgSitename . ' - Error - ' . wfMessage( 'watchlist' )->inContentLanguage()->text() . ' [' . $wgLanguageCode . ']';
+                       // @todo FIXME: Localise  brackets
+                       $feedTitle = $wgSitename . ' - Error - ' .
+                               wfMessage( 'watchlist' )->inContentLanguage()->text() .
+                               ' [' . $wgLanguageCode . ']';
                        $feedUrl = SpecialPage::getTitleFor( 'Watchlist' )->getFullURL();
 
                        $feedFormat = isset( $params['feedformat'] ) ? $params['feedformat'] : 'rss';
@@ -179,8 +184,11 @@ class ApiFeedWatchlist extends ApiBase {
                // The anchor won't work for sections that have dupes on page
                // as there's no way to strip that info from ApiWatchlist (apparently?).
                // RegExp in the line below is equal to Linker::formatAutocomments().
-               if ( $this->linkToSections && $comment !== null && preg_match( '!(.*)/\*\s*(.*?)\s*\*/(.*)!', $comment, $matches ) ) {
+               if ( $this->linkToSections && $comment !== null &&
+                       preg_match( '!(.*)/\*\s*(.*?)\s*\*/(.*)!', $comment, $matches )
+               ) {
                        global $wgParser;
+
                        $sectionTitle = $wgParser->stripSectionName( $matches[2] );
                        $sectionTitle = Sanitizer::normalizeSectionNameWhitespace( $sectionTitle );
                        $titleUrl .= Title::newFromText( '#' . $sectionTitle )->getFragmentForURL();
@@ -199,6 +207,7 @@ class ApiFeedWatchlist extends ApiBase {
                        $this->watchlistModule = $this->getMain()->getModuleManager()->getModule( 'query' )
                                ->getModuleManager()->getModule( 'watchlist' );
                }
+
                return $this->watchlistModule;
        }
 
@@ -235,11 +244,13 @@ class ApiFeedWatchlist extends ApiBase {
                        $ret['wltype'] = null;
                        $ret['wlexcludeuser'] = null;
                }
+
                return $ret;
        }
 
        public function getParamDescription() {
                $wldescr = $this->getWatchlistModule()->getParamDescription();
+
                return array(
                        'feedformat' => 'The format of the feed',
                        'hours' => 'List pages modified within this many hours from now',
index cbb2ba6..dc5e24e 100644 (file)
@@ -46,7 +46,15 @@ class ApiFileRevert extends ApiBase {
                $this->checkPermissions( $this->getUser() );
 
                $sourceUrl = $this->file->getArchiveVirtualUrl( $this->archiveName );
-               $status = $this->file->upload( $sourceUrl, $this->params['comment'], $this->params['comment'], 0, false, false, $this->getUser() );
+               $status = $this->file->upload(
+                       $sourceUrl,
+                       $this->params['comment'],
+                       $this->params['comment'],
+                       0,
+                       false,
+                       false,
+                       $this->getUser()
+               );
 
                if ( $status->isGood() ) {
                        $result = array( 'result' => 'Success' );
@@ -58,7 +66,6 @@ class ApiFileRevert extends ApiBase {
                }
 
                $this->getResult()->addValue( null, $this->getModuleName(), $result );
-
        }
 
        /**
@@ -130,7 +137,6 @@ class ApiFileRevert extends ApiBase {
                                ApiBase::PARAM_REQUIRED => true
                        ),
                );
-
        }
 
        public function getParamDescription() {
@@ -187,7 +193,8 @@ class ApiFileRevert extends ApiBase {
 
        public function getExamples() {
                return array(
-                       'api.php?action=filerevert&filename=Wiki.png&comment=Revert&archivename=20110305152740!Wiki.png&token=123ABC'
+                       'api.php?action=filerevert&filename=Wiki.png&comment=Revert&' .
+                               'archivename=20110305152740!Wiki.png&token=123ABC'
                                => 'Revert Wiki.png to the version of 20110305152740',
                );
        }
index b89fb3a..63a5502 100644 (file)
@@ -30,7 +30,6 @@
  * @ingroup API
  */
 abstract class ApiFormatBase extends ApiBase {
-
        private $mIsHtml, $mFormat, $mUnescapeAmps, $mHelp, $mCleared;
        private $mBufferResult = false, $mBuffer, $mDisabled = false;
 
@@ -43,9 +42,9 @@ abstract class ApiFormatBase extends ApiBase {
        public function __construct( $main, $format ) {
                parent::__construct( $main, $format );
 
-               $this->mIsHtml = ( substr( $format, - 2, 2 ) === 'fm' ); // ends with 'fm'
+               $this->mIsHtml = ( substr( $format, -2, 2 ) === 'fm' ); // ends with 'fm'
                if ( $this->mIsHtml ) {
-                       $this->mFormat = substr( $format, 0, - 2 ); // remove ending 'fm'
+                       $this->mFormat = substr( $format, 0, -2 ); // remove ending 'fm'
                } else {
                        $this->mFormat = $format;
                }
@@ -156,17 +155,20 @@ abstract class ApiFormatBase extends ApiBase {
 <!DOCTYPE HTML>
 <html>
 <head>
-<?php if ( $this->mUnescapeAmps ) {
+<?php
+                       if ( $this->mUnescapeAmps ) {
 ?>     <title>MediaWiki API</title>
-<?php } else {
+<?php
+                       } else {
 ?>     <title>MediaWiki API Result</title>
-<?php } ?>
+<?php
+                       }
+?>
 </head>
 <body>
 <?php
-
-
                        if ( !$isHelpScreen ) {
+// @codingStandardsIgnoreStart Exclude long line from CodeSniffer checks
 ?>
 <br />
 <small>
@@ -179,15 +181,14 @@ See the <a href='https://www.mediawiki.org/wiki/API'>complete documentation</a>,
 </small>
 <pre style='white-space: pre-wrap;'>
 <?php
-
-
-                       } else { // don't wrap the contents of the <pre> for help screens
-                                 // because these are actually formatted to rely on
-                                 // the monospaced font for layout purposes
+// @codingStandardsIgnoreEnd
+                       // don't wrap the contents of the <pre> for help screens
+                       // because these are actually formatted to rely on
+                       // the monospaced font for layout purposes
+                       } else {
 ?>
 <pre>
 <?php
-
                        }
                }
        }
@@ -206,8 +207,6 @@ See the <a href='https://www.mediawiki.org/wiki/API'>complete documentation</a>,
 </body>
 </html>
 <?php
-
-
                }
        }
 
@@ -281,7 +280,11 @@ See the <a href='https://www.mediawiki.org/wiki/API'>complete documentation</a>,
                // identify URLs
                $protos = wfUrlProtocolsWithoutProtRel();
                // This regex hacks around bug 13218 (&quot; included in the URL)
-               $text = preg_replace( "#(((?i)$protos).*?)(&quot;)?([ \\'\"<>\n]|&lt;|&gt;|&quot;)#", '<a href="\\1">\\1</a>\\3\\4', $text );
+               $text = preg_replace(
+                       "#(((?i)$protos).*?)(&quot;)?([ \\'\"<>\n]|&lt;|&gt;|&quot;)#",
+                       '<a href="\\1">\\1</a>\\3\\4',
+                       $text
+               );
 
                /**
                 * Temporary fix for bad links in help messages. As a special case,
@@ -360,8 +363,8 @@ 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
+        * $result['_feed'] - an instance of one of the $wgFeedClasses classes
+        * $result['_feeditems'] - an array of FeedItem instances
         */
        public function execute() {
                $data = $this->getResultData();
index 342a580..be0b58b 100644 (file)
@@ -43,6 +43,7 @@ class ApiFormatJson extends ApiFormatBase {
                if ( $params['callback'] ) {
                        return 'text/javascript';
                }
+
                return 'application/json';
        }
 
@@ -80,16 +81,18 @@ class ApiFormatJson extends ApiFormatBase {
 
        public function getParamDescription() {
                return array(
-                       'callback' => 'If specified, wraps the output into a given function call. For safety, all user-specific data will be restricted.',
-                       'utf8' => 'If specified, encodes most (but not all) non-ASCII characters as UTF-8 instead of replacing them with hexadecimal escape sequences.',
+                       'callback' => 'If specified, wraps the output into a given function ' .
+                               'call. For safety, all user-specific data will be restricted.',
+                       'utf8' => 'If specified, encodes most (but not all) non-ASCII ' .
+                               'characters as UTF-8 instead of replacing them with hexadecimal escape sequences.',
                );
        }
 
        public function getDescription() {
                if ( $this->mIsRaw ) {
                        return 'Output data with the debugging elements in JSON format' . parent::getDescription();
-               } else {
-                       return 'Output data in JSON format' . parent::getDescription();
                }
+
+               return 'Output data in JSON format' . parent::getDescription();
        }
 }
index d278efa..45003e9 100644 (file)
@@ -58,6 +58,7 @@ class ApiFormatRaw extends ApiFormatBase {
                $data = $this->getResultData();
                if ( isset( $data['error'] ) ) {
                        $this->mErrorFallback->execute();
+
                        return;
                }
 
index 5685d93..df8e745 100644 (file)
@@ -38,10 +38,12 @@ class ApiFormatWddx extends ApiFormatBase {
                // Some versions of PHP have a broken wddx_serialize_value, see
                // PHP bug 45314. Test encoding an affected character (U+00A0)
                // to avoid this.
-               $expected = "<wddxPacket version='1.0'><header/><data><string>\xc2\xa0</string></data></wddxPacket>";
+               $expected =
+                       "<wddxPacket version='1.0'><header/><data><string>\xc2\xa0</string></data></wddxPacket>";
                if ( function_exists( 'wddx_serialize_value' )
-                               && !$this->getIsHtml()
-                               && wddx_serialize_value( "\xc2\xa0" ) == $expected ) {
+                       && !$this->getIsHtml()
+                       && wddx_serialize_value( "\xc2\xa0" ) == $expected
+               ) {
                        $this->printText( wddx_serialize_value( $this->getResultData() ) );
                } else {
                        // Don't do newlines and indentation if we weren't asked
index 4ec149c..e707eb4 100644 (file)
@@ -69,7 +69,7 @@ class ApiFormatXml extends ApiFormatBase {
                $this->printText(
                        self::recXmlPrint( $this->mRootElemName,
                                $data,
-                               $this->getIsHtml() ? - 2 : null
+                               $this->getIsHtml() ? -2 : null
                        )
                );
        }
@@ -160,7 +160,8 @@ class ApiFormatXml extends ApiFormatBase {
                        }
 
                        if ( is_null( $subElemIndName ) && count( $indElements ) ) {
-                               ApiBase::dieDebug( __METHOD__, "($elemName, ...) has integer keys without _element value. Use ApiResult::setIndexedTagName()." );
+                               ApiBase::dieDebug( __METHOD__, "($elemName, ...) has integer keys " .
+                                       "without _element value. Use ApiResult::setIndexedTagName()." );
                        }
 
                        if ( count( $subElements ) && count( $indElements ) && !is_null( $subElemContent ) ) {
@@ -193,6 +194,7 @@ class ApiFormatXml extends ApiFormatBase {
                                $retval .= $indstr . Xml::element( $elemName, null, $elemValue );
                        }
                }
+
                return $retval;
        }
 
@@ -200,17 +202,21 @@ class ApiFormatXml extends ApiFormatBase {
                $nt = Title::newFromText( $this->mXslt );
                if ( is_null( $nt ) || !$nt->exists() ) {
                        $this->setWarning( 'Invalid or non-existent stylesheet specified' );
+
                        return;
                }
                if ( $nt->getNamespace() != NS_MEDIAWIKI ) {
                        $this->setWarning( 'Stylesheet should be in the MediaWiki namespace.' );
+
                        return;
                }
-               if ( substr( $nt->getText(), - 4 ) !== '.xsl' ) {
+               if ( substr( $nt->getText(), -4 ) !== '.xsl' ) {
                        $this->setWarning( 'Stylesheet should have .xsl extension.' );
+
                        return;
                }
-               $this->printText( '<?xml-stylesheet href="' . htmlspecialchars( $nt->getLocalURL( 'action=raw' ) ) . '" type="text/xsl" ?>' );
+               $this->printText( '<?xml-stylesheet href="' .
+                       htmlspecialchars( $nt->getLocalURL( 'action=raw' ) ) . '" type="text/xsl" ?>' );
        }
 
        public function getAllowedParams() {
index 9cafc5b..5b1f29c 100644 (file)
@@ -30,7 +30,6 @@
  * @ingroup API
  */
 class ApiHelp extends ApiBase {
-
        /**
         * Module for displaying help
         */
@@ -68,19 +67,22 @@ class ApiHelp extends ApiBase {
                                // In case the '+' was typed into URL, it resolves as a space
                                $subNames = explode( ' ', $m );
                        }
+
                        $module = $this->getMain();
-                       for ( $i = 0; $i < count( $subNames ); $i++ ) {
+                       $subNamesCount = count( $subNames );
+                       for ( $i = 0; $i < $subNamesCount; $i++ ) {
                                $subs = $module->getModuleManager();
                                if ( $subs === null ) {
                                        $module = null;
                                } else {
                                        $module = $subs->getModule( $subNames[$i] );
                                }
+
                                if ( $module === null ) {
                                        if ( count( $subNames ) === 2
-                                                       && $i === 1
-                                                       && $subNames[0] === 'query'
-                                                       && in_array( $subNames[1], $queryModules )
+                                               && $i === 1
+                                               && $subNames[0] === 'query'
+                                               && in_array( $subNames[1], $queryModules )
                                        ) {
                                                // Legacy: This is one of the renamed 'querymodule=...' parameters,
                                                // do not use '+' notation in the output, use submodule's name instead.
@@ -94,6 +96,7 @@ class ApiHelp extends ApiBase {
                                        $type = $subs->getModuleGroup( $subNames[$i] );
                                }
                        }
+
                        if ( $module !== null ) {
                                $r[] = $this->buildModuleHelp( $module, $type );
                        }
@@ -141,8 +144,10 @@ class ApiHelp extends ApiBase {
 
        public function getParamDescription() {
                return array(
-                       'modules' => 'List of module names (value of the action= parameter). Can specify submodules with a \'+\'',
-                       'querymodules' => 'Use modules=query+value instead. List of query module names (value of prop=, meta= or list= parameter)',
+                       'modules' => 'List of module names (value of the action= parameter). ' .
+                               'Can specify submodules with a \'+\'',
+                       'querymodules' => 'Use modules=query+value instead. List of query ' .
+                               'module names (value of prop=, meta= or list= parameter)',
                );
        }
 
@@ -154,8 +159,10 @@ class ApiHelp extends ApiBase {
                return array(
                        'api.php?action=help' => 'Whole help page',
                        'api.php?action=help&modules=protect' => 'Module (action) help page',
-                       'api.php?action=help&modules=query+categorymembers' => 'Help for the query/categorymembers module',
-                       'api.php?action=help&modules=login|query+info' => 'Help for the login and query/info modules',
+                       'api.php?action=help&modules=query+categorymembers'
+                               => 'Help for the query/categorymembers module',
+                       'api.php?action=help&modules=login|query+info'
+                               => 'Help for the login and query/info modules',
                );
        }
 
index 7a60e83..5d2ee6f 100644 (file)
 class ApiImageRotate extends ApiBase {
        private $mPageSet = null;
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        /**
         * Add all items from $values into the result
         * @param array $result output
@@ -145,6 +141,7 @@ class ApiImageRotate extends ApiBase {
                if ( $this->mPageSet === null ) {
                        $this->mPageSet = new ApiPageSet( $this, 0, NS_FILE );
                }
+
                return $this->mPageSet;
        }
 
@@ -163,6 +160,7 @@ class ApiImageRotate extends ApiBase {
                if ( $permissionErrors ) {
                        // Just return the first error
                        $msg = $this->parseMsg( $permissionErrors[0] );
+
                        return $msg['info'];
                }
 
@@ -191,11 +189,13 @@ class ApiImageRotate extends ApiBase {
                if ( $flags ) {
                        $result += $this->getPageSet()->getFinalParams( $flags );
                }
+
                return $result;
        }
 
        public function getParamDescription() {
                $pageSet = $this->getPageSet();
+
                return $pageSet->getFinalParamDescription() + array(
                        'rotation' => 'Degrees to rotate image clockwise',
                        'token' => 'Edit token. You can get one of these through action=tokens',
@@ -216,6 +216,7 @@ class ApiImageRotate extends ApiBase {
 
        public function getPossibleErrors() {
                $pageSet = $this->getPageSet();
+
                return array_merge(
                        parent::getPossibleErrors(),
                        $pageSet->getFinalPossibleErrors()
index f48a822..295f16e 100644 (file)
@@ -99,6 +99,7 @@ class ApiImport extends ApiBase {
 
        public function getAllowedParams() {
                global $wgImportSources;
+
                return array(
                        'token' => array(
                                ApiBase::PARAM_TYPE => 'string',
@@ -176,7 +177,8 @@ class ApiImport extends ApiBase {
 
        public function getExamples() {
                return array(
-                       'api.php?action=import&interwikisource=meta&interwikipage=Help:ParserFunctions&namespace=100&fullhistory=&token=123ABC'
+                       'api.php?action=import&interwikisource=meta&interwikipage=Help:ParserFunctions&' .
+                               'namespace=100&fullhistory=&token=123ABC'
                                => 'Import [[meta:Help:Parserfunctions]] to namespace 100 with full history',
                );
        }
index 13e58b8..fe3143e 100644 (file)
@@ -52,6 +52,7 @@ class ApiLogin extends ApiBase {
                                'result' => 'Aborted',
                                'reason' => 'Cannot log in when using a callback',
                        ) );
+
                        return;
                }
 
@@ -131,7 +132,9 @@ class ApiLogin extends ApiBase {
                                $result['result'] = 'NotExists';
                                break;
 
-                       case LoginForm::RESET_PASS: // bug 20223 - Treat a temporary password as wrong. Per SpecialUserLogin - "The e-mailed temporary password should not be used for actual logins;"
+                       // bug 20223 - Treat a temporary password as wrong. Per SpecialUserLogin:
+                       // The e-mailed temporary password should not be used for actual logins.
+                       case LoginForm::RESET_PASS:
                        case LoginForm::WRONG_PASS:
                                $result['result'] = 'WrongPass';
                                break;
@@ -255,24 +258,39 @@ class ApiLogin extends ApiBase {
        public function getDescription() {
                return array(
                        'Log in and get the authentication tokens.',
-                       'In the event of a successful log-in, a cookie will be attached',
-                       'to your session. In the event of a failed log-in, you will not',
-                       'be able to attempt another log-in through this method for 5 seconds.',
-                       'This is to prevent password guessing by automated password crackers'
+                       'In the event of a successful log-in, a cookie will be attached to your session.',
+                       'In the event of a failed log-in, you will not be able to attempt another log-in',
+                       'through this method for 5 seconds. This is to prevent password guessing by',
+                       'automated password crackers'
                );
        }
 
        public function getPossibleErrors() {
                return array_merge( parent::getPossibleErrors(), array(
-                       array( 'code' => 'NeedToken', 'info' => 'You need to resubmit your login with the specified token. See https://bugzilla.wikimedia.org/show_bug.cgi?id=23076' ),
+                       array(
+                               'code' => 'NeedToken', 'info' => 'You need to resubmit your ' .
+                               'login with the specified token. See ' .
+                                       'https://bugzilla.wikimedia.org/show_bug.cgi?id=23076'
+                       ),
                        array( 'code' => 'WrongToken', 'info' => 'You specified an invalid token' ),
                        array( 'code' => 'NoName', 'info' => 'You didn\'t set the lgname parameter' ),
                        array( 'code' => 'Illegal', 'info' => 'You provided an illegal username' ),
                        array( 'code' => 'NotExists', 'info' => 'The username you provided doesn\'t exist' ),
-                       array( 'code' => 'EmptyPass', 'info' => 'You didn\'t set the lgpassword parameter or you left it empty' ),
+                       array(
+                               'code' => 'EmptyPass',
+                               'info' => 'You didn\'t set the lgpassword parameter or you left it empty'
+                       ),
                        array( 'code' => 'WrongPass', 'info' => 'The password you provided is incorrect' ),
-                       array( 'code' => 'WrongPluginPass', 'info' => 'Same as "WrongPass", returned when an authentication plugin rather than MediaWiki itself rejected the password' ),
-                       array( 'code' => 'CreateBlocked', 'info' => 'The wiki tried to automatically create a new account for you, but your IP address has been blocked from account creation' ),
+                       array(
+                               'code' => 'WrongPluginPass',
+                               'info' => 'Same as "WrongPass", returned when an authentication ' .
+                                       'plugin rather than MediaWiki itself rejected the password'
+                       ),
+                       array(
+                               'code' => 'CreateBlocked',
+                               'info' => 'The wiki tried to automatically create a new account ' .
+                                       'for you, but your IP address has been blocked from account creation'
+                       ),
                        array( 'code' => 'Throttled', 'info' => 'You\'ve logged in too many times in a short time' ),
                        array( 'code' => 'Blocked', 'info' => 'User is blocked' ),
                ) );
index c11f16c..a9aebe9 100644 (file)
@@ -110,6 +110,7 @@ class ApiMain extends ApiBase {
                'none' => 'ApiFormatNone',
        );
 
+       // @codingStandardsIgnoreStart String contenation on "msg" not allowed to break long line
        /**
         * List of user roles that are specifically relevant to the API.
         * array( 'right' => array ( 'msg'    => 'Some message with a $1',
@@ -126,6 +127,7 @@ class ApiMain extends ApiBase {
                        'params' => array( ApiBase::LIMIT_SML2, ApiBase::LIMIT_BIG2 )
                )
        );
+       // @codingStandardsIgnoreEnd
 
        /**
         * @var ApiFormatBase
@@ -144,7 +146,8 @@ class ApiMain extends ApiBase {
        /**
         * Constructs an instance of ApiMain that utilizes the module and format specified by $request.
         *
-        * @param $context IContextSource|WebRequest - if this is an instance of FauxRequest, errors are thrown and no printing occurs
+        * @param $context IContextSource|WebRequest - if this is an instance of
+        *    FauxRequest, errors are thrown and no printing occurs
         * @param bool $enableWrite should be set to true if the api may modify data
         */
        public function __construct( $context = null, $enableWrite = false ) {
@@ -191,7 +194,7 @@ class ApiMain extends ApiBase {
                $this->mResult = new ApiResult( $this );
                $this->mEnableWrite = $enableWrite;
 
-               $this->mSquidMaxage = - 1; // flag for executeActionWithErrorHandling()
+               $this->mSquidMaxage = -1; // flag for executeActionWithErrorHandling()
                $this->mCommit = false;
        }
 
@@ -270,6 +273,7 @@ class ApiMain extends ApiBase {
        public function setCacheMode( $mode ) {
                if ( !in_array( $mode, array( 'private', 'public', 'anon-public-user-private' ) ) ) {
                        wfDebug( __METHOD__ . ": unrecognised cache mode \"$mode\"\n" );
+
                        // Ignore for forwards-compatibility
                        return;
                }
@@ -278,6 +282,7 @@ class ApiMain extends ApiBase {
                        // Private wiki, only private headers
                        if ( $mode !== 'private' ) {
                                wfDebug( __METHOD__ . ": ignoring request for $mode cache mode, private wiki\n" );
+
                                return;
                        }
                }
@@ -337,6 +342,7 @@ class ApiMain extends ApiBase {
                if ( $printer === null ) {
                        $this->dieUsage( "Unrecognized format: {$format}", 'unknown_format' );
                }
+
                return $printer;
        }
 
@@ -456,6 +462,7 @@ class ApiMain extends ApiBase {
                } else {
                        $origins = explode( ' ', $originHeader );
                }
+
                if ( !in_array( $originParam, $origins ) ) {
                        // origin parameter set but incorrect
                        // Send a 403 response
@@ -463,13 +470,22 @@ class ApiMain extends ApiBase {
                        $response->header( "HTTP/1.1 403 $message", true, 403 );
                        $response->header( 'Cache-Control: no-cache' );
                        echo "'origin' parameter does not match Origin header\n";
+
                        return false;
                }
-               if ( self::matchOrigin( $originParam, $wgCrossSiteAJAXdomains, $wgCrossSiteAJAXdomainExceptions ) ) {
+
+               $matchOrigin = self::matchOrigin(
+                       $originParam,
+                       $wgCrossSiteAJAXdomains,
+                       $wgCrossSiteAJAXdomainExceptions
+               );
+
+               if ( $matchOrigin ) {
                        $response->header( "Access-Control-Allow-Origin: $originParam" );
                        $response->header( 'Access-Control-Allow-Credentials: true' );
                        $this->getOutput()->addVaryHeader( 'Origin' );
                }
+
                return true;
        }
 
@@ -478,7 +494,8 @@ class ApiMain extends ApiBase {
         * @param string $value Origin header
         * @param array $rules Set of wildcard rules
         * @param array $exceptions Set of wildcard rules
-        * @return bool True if $value matches a rule in $rules and doesn't match any rules in $exceptions, false otherwise
+        * @return bool True if $value matches a rule in $rules and doesn't match
+        *    any rules in $exceptions, false otherwise
         */
        protected static function matchOrigin( $value, $rules, $exceptions ) {
                foreach ( $rules as $rule ) {
@@ -489,9 +506,11 @@ class ApiMain extends ApiBase {
                                                return false;
                                        }
                                }
+
                                return true;
                        }
                }
+
                return false;
        }
 
@@ -510,6 +529,7 @@ class ApiMain extends ApiBase {
                        array( '.*?', '.' ),
                        $wildcard
                );
+
                return "/https?:\/\/$wildcard/";
        }
 
@@ -524,6 +544,7 @@ class ApiMain extends ApiBase {
 
                if ( $this->mCacheMode == 'private' ) {
                        $response->header( 'Cache-Control: private' );
+
                        return;
                }
 
@@ -535,6 +556,7 @@ class ApiMain extends ApiBase {
                                if ( $out->haveCacheVaryCookies() ) {
                                        // Logged in, mark this request private
                                        $response->header( 'Cache-Control: private' );
+
                                        return;
                                }
                                // Logged out, send normal public headers below
@@ -542,6 +564,7 @@ class ApiMain extends ApiBase {
                                // Logged in or otherwise has session (e.g. anonymous users who have edited)
                                // Mark request private
                                $response->header( 'Cache-Control: private' );
+
                                return;
                        } // else no XVO and anonymous, send public headers below
                }
@@ -565,6 +588,7 @@ class ApiMain extends ApiBase {
                        // Sending a Vary header in this case is harmless, and protects us
                        // against conditional calls of setCacheMaxAge().
                        $response->header( 'Cache-Control: private' );
+
                        return;
                }
 
@@ -638,7 +662,10 @@ class ApiMain extends ApiBase {
                                'code' => 'internal_api_error_' . get_class( $e ),
                                'info' => $info,
                        );
-                       ApiResult::setContent( $errMessage, $wgShowExceptionDetails ? "\n\n{$e->getTraceAsString()}\n\n" : '' );
+                       ApiResult::setContent(
+                               $errMessage,
+                               $wgShowExceptionDetails ? "\n\n{$e->getTraceAsString()}\n\n" : ''
+                       );
                }
 
                // Remember all the warnings to re-add them later
@@ -714,12 +741,13 @@ class ApiMain extends ApiBase {
                if ( $salt !== false ) {
                        if ( !isset( $moduleParams['token'] ) ) {
                                $this->dieUsageMsg( array( 'missingparam', 'token' ) );
-                       } else {
-                               if ( !$this->getUser()->matchEditToken( $moduleParams['token'], $salt, $this->getContext()->getRequest() ) ) {
-                                       $this->dieUsageMsg( 'sessionfailure' );
-                               }
+                       }
+
+                       if ( !$this->getUser()->matchEditToken( $moduleParams['token'], $salt, $this->getContext()->getRequest() ) ) {
+                               $this->dieUsageMsg( 'sessionfailure' );
                        }
                }
+
                return $module;
        }
 
@@ -743,12 +771,12 @@ class ApiMain extends ApiBase {
 
                                if ( $wgShowHostnames ) {
                                        $this->dieUsage( "Waiting for $host: $lag seconds lagged", 'maxlag' );
-                               } else {
-                                       $this->dieUsage( "Waiting for a database server: $lag seconds lagged", 'maxlag' );
                                }
-                               return false;
+
+                               $this->dieUsage( "Waiting for a database server: $lag seconds lagged", 'maxlag' );
                        }
                }
+
                return true;
        }
 
@@ -759,8 +787,8 @@ class ApiMain extends ApiBase {
        protected function checkExecutePermissions( $module ) {
                $user = $this->getUser();
                if ( $module->isReadMode() && !User::isEveryoneAllowed( 'read' ) &&
-                       !$user->isAllowed( 'read' ) )
-               {
+                       !$user->isAllowed( 'read' )
+               {
                        $this->dieUsageMsg( 'readrequired' );
                }
                if ( $module->isWriteMode() ) {
@@ -843,7 +871,7 @@ class ApiMain extends ApiBase {
 
        /**
         * Log the preceding request
-        * @param $time Time in seconds
+        * @param int $time Time in seconds
         */
        protected function logRequest( $time ) {
                $request = $this->getRequest();
@@ -877,10 +905,12 @@ class ApiMain extends ApiBase {
                static $table;
                if ( !$table ) {
                        $chars = ';@$!*(),/:';
-                       for ( $i = 0; $i < strlen( $chars ); $i++ ) {
+                       $numChars = strlen( $chars );
+                       for ( $i = 0; $i < $numChars; $i++ ) {
                                $table[rawurlencode( $chars[$i] )] = $chars[$i];
                        }
                }
+
                return strtr( rawurlencode( $s ), $table );
        }
 
@@ -896,6 +926,7 @@ class ApiMain extends ApiBase {
         */
        public function getVal( $name, $default = null ) {
                $this->mParamsUsed[$name] = true;
+
                return $this->getRequest()->getVal( $name, $default );
        }
 
@@ -905,6 +936,7 @@ class ApiMain extends ApiBase {
         */
        public function getCheck( $name ) {
                $this->mParamsUsed[$name] = true;
+
                return $this->getRequest()->getCheck( $name );
        }
 
@@ -917,6 +949,7 @@ class ApiMain extends ApiBase {
         */
        public function getUpload( $name ) {
                $this->mParamsUsed[$name] = true;
+
                return $this->getRequest()->getUpload( $name );
        }
 
@@ -1034,13 +1067,17 @@ class ApiMain extends ApiBase {
                        'smaxage' => 'Set the s-maxage header to this many seconds. Errors are never cached',
                        'maxage' => 'Set the max-age header to this many seconds. Errors are never cached',
                        'requestid' => 'Request ID to distinguish requests. This will just be output back to you',
-                       'servedby' => 'Include the hostname that served the request in the results. Unconditionally shown on error',
+                       'servedby' => 'Include the hostname that served the request in the ' .
+                               'results. Unconditionally shown on error',
                        'origin' => array(
-                               'When accessing the API using a cross-domain AJAX request (CORS), set this to the originating domain.',
-                               'This must be included in any pre-flight request, and therefore must be part of the request URI (not the POST body).',
-                               'This must match one of the origins in the Origin: header exactly, so it has to be set to something like http://en.wikipedia.org or https://meta.wikimedia.org .',
-                               'If this parameter does not match the Origin: header, a 403 response will be returned.',
-                               'If this parameter matches the Origin: header and the origin is whitelisted, an Access-Control-Allow-Origin header will be set.',
+                               'When accessing the API using a cross-domain AJAX request (CORS), set this to the',
+                               'originating domain. This must be included in any pre-flight request, and',
+                               'therefore must be part of the request URI (not the POST body). This must match',
+                               'one of the origins in the Origin: header exactly, so it has to be set to ',
+                               'something like http://en.wikipedia.org or https://meta.wikimedia.org . If this',
+                               'parameter does not match the Origin: header, a 403 response will be returned. If',
+                               'this parameter matches the Origin: header and the origin is whitelisted, an',
+                               'Access-Control-Allow-Origin header will be set.',
                        ),
                );
        }
@@ -1054,14 +1091,14 @@ class ApiMain extends ApiBase {
                return array(
                        '',
                        '',
-                       '**********************************************************************************************************',
-                       '**                                                                                                      **',
-                       '**                      This is an auto-generated MediaWiki API documentation page                      **',
-                       '**                                                                                                      **',
-                       '**                                     Documentation and Examples:                                      **',
-                       '**                                  https://www.mediawiki.org/wiki/API                                  **',
-                       '**                                                                                                      **',
-                       '**********************************************************************************************************',
+                       '**********************************************************************************************',
+                       '**                                                                                          **',
+                       '**                This is an auto-generated MediaWiki API documentation page                **',
+                       '**                                                                                          **',
+                       '**                               Documentation and Examples:                                **',
+                       '**                            https://www.mediawiki.org/wiki/API                            **',
+                       '**                                                                                          **',
+                       '**********************************************************************************************',
                        '',
                        'Status:                All features shown on this page should be working, but the API',
                        '                       is still in active development, and may change at any time.',
@@ -1074,13 +1111,15 @@ class ApiMain extends ApiBase {
                        '                       In the case of an invalid action being passed, these will have a value',
                        '                       of "unknown_action"',
                        '',
-                       '                       For more information see https://www.mediawiki.org/wiki/API:Errors_and_warnings',
+                       '                       For more information see https://www.mediawiki.org' .
+                               '/wiki/API:Errors_and_warnings',
                        '',
                        'Documentation:         https://www.mediawiki.org/wiki/API:Main_page',
                        'FAQ                    https://www.mediawiki.org/wiki/API:FAQ',
                        'Mailing list:          https://lists.wikimedia.org/mailman/listinfo/mediawiki-api',
                        'Api Announcements:     https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce',
-                       'Bugs & Requests:       https://bugzilla.wikimedia.org/buglist.cgi?component=API&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&order=bugs.delta_ts',
+                       'Bugs & Requests:       https://bugzilla.wikimedia.org/buglist.cgi?component=API&' .
+                               'bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&order=bugs.delta_ts',
                        '',
                        '',
                        '',
@@ -1109,11 +1148,12 @@ class ApiMain extends ApiBase {
        protected function getCredits() {
                return array(
                        'API developers:',
-                       '    Roan Kattouw "<Firstname>.<Lastname>@gmail.com" (lead developer Sep 2007-2009)',
+                       '    Roan Kattouw - roan . kattouw @ gmail . com (lead developer Sep 2007-2009)',
                        '    Victor Vasiliev - vasilvv @ gmail . com',
                        '    Bryan Tong Minh - bryan . tongminh @ gmail . com',
                        '    Sam Reed - sam @ reedyboy . net',
-                       '    Yuri Astrakhan "<Firstname><Lastname>@gmail.com" (creator, lead developer Sep 2006-Sep 2007, 2012-present)',
+                       '    Yuri Astrakhan - yuri . astrakhan @ gmail . com (creator, lead ' .
+                               'developer Sep 2006-Sep 2007, 2012-present)',
                        '',
                        'Please send your comments, suggestions and questions to mediawiki-api@lists.wikimedia.org',
                        'or file a bug report at https://bugzilla.wikimedia.org/'
@@ -1150,6 +1190,7 @@ class ApiMain extends ApiBase {
                if ( $wgAPICacheHelpTimeout > 0 ) {
                        $wgMemc->set( $key, $retval, $wgAPICacheHelpTimeout );
                }
+
                return $retval;
        }
 
@@ -1180,7 +1221,7 @@ class ApiMain extends ApiBase {
                foreach ( self::$mRights as $right => $rightMsg ) {
                        $groups = User::getGroupsWithPermission( $right );
                        $msg .= "* " . $right . " *\n  " . wfMsgReplaceArgs( $rightMsg['msg'], $rightMsg['params'] ) .
-                                               "\nGranted to:\n  " . str_replace( '*', 'all', implode( ', ', $groups ) ) . "\n\n";
+                               "\nGranted to:\n  " . str_replace( '*', 'all', implode( ', ', $groups ) ) . "\n\n";
                }
 
                $msg .= "\n$astriks Formats  $astriks\n\n";
@@ -1201,7 +1242,8 @@ class ApiMain extends ApiBase {
 
        /**
         * @param $module ApiBase
-        * @param string $paramName What type of request is this? e.g. action, query, list, prop, meta, format
+        * @param string $paramName What type of request is this? e.g. action,
+        *    query, list, prop, meta, format
         * @return string
         */
        public static function makeHelpMsgHeader( $module, $paramName ) {
@@ -1234,6 +1276,7 @@ class ApiMain extends ApiBase {
         */
        public function getShowVersions() {
                wfDeprecated( __METHOD__, '1.21' );
+
                return false;
        }
 
@@ -1336,6 +1379,7 @@ class UsageException extends MWException {
                if ( is_array( $this->mExtraData ) ) {
                        $result = array_merge( $result, $this->mExtraData );
                }
+
                return $result;
        }
 
index 100392b..c33e18c 100644 (file)
@@ -97,6 +97,7 @@ class ApiModuleManager extends ContextSource {
                                // cache this instance in case it is needed later
                                $this->mInstances[$moduleName] = $instance;
                        }
+
                        return $instance;
                }
        }
@@ -116,6 +117,7 @@ class ApiModuleManager extends ContextSource {
                                $result[] = $name;
                        }
                }
+
                return $result;
        }
 
@@ -131,6 +133,7 @@ class ApiModuleManager extends ContextSource {
                                $result[$name] = $grpCls[1];
                        }
                }
+
                return $result;
        }
 
@@ -143,9 +146,9 @@ class ApiModuleManager extends ContextSource {
        public function isDefined( $moduleName, $group = null ) {
                if ( isset( $this->mModules[$moduleName] ) ) {
                        return $group === null || $this->mModules[$moduleName][0] === $group;
-               } else {
-                       return false;
                }
+
+               return false;
        }
 
        /**
@@ -156,9 +159,9 @@ class ApiModuleManager extends ContextSource {
        public function getModuleGroup( $moduleName ) {
                if ( isset( $this->mModules[$moduleName] ) ) {
                        return $this->mModules[$moduleName][0];
-               } else {
-                       return null;
                }
+
+               return null;
        }
 
        /**
index c18036c..20ac48a 100644 (file)
@@ -61,8 +61,8 @@ class ApiMove extends ApiBase {
 
                if ( $toTitle->getNamespace() == NS_FILE
                        && !RepoGroup::singleton()->getLocalRepo()->findFile( $toTitle )
-                       && wfFindFile( $toTitle ) )
-               {
+                       && wfFindFile( $toTitle )
+               {
                        if ( !$params['ignorewarnings'] && $user->isAllowed( 'reupload-shared' ) ) {
                                $this->dieUsageMsg( 'sharedfile-exists' );
                        } elseif ( !$user->isAllowed( 'reupload-shared' ) ) {
@@ -77,7 +77,11 @@ class ApiMove extends ApiBase {
                        $this->dieUsageMsg( reset( $retval ) );
                }
 
-               $r = array( 'from' => $fromTitle->getPrefixedText(), 'to' => $toTitle->getPrefixedText(), 'reason' => $params['reason'] );
+               $r = array(
+                       'from' => $fromTitle->getPrefixedText(),
+                       'to' => $toTitle->getPrefixedText(),
+                       'reason' => $params['reason']
+               );
 
                if ( $fromTitle->exists() ) {
                        //NOTE: we assume that if the old title exists, it's because it was re-created as
@@ -115,7 +119,7 @@ class ApiMove extends ApiBase {
                // Move subpages
                if ( $params['movesubpages'] ) {
                        $r['subpages'] = $this->moveSubpages( $fromTitle, $toTitle,
-                                       $params['reason'], $params['noredirect'] );
+                               $params['reason'], $params['noredirect'] );
                        $result->setIndexedTagName( $r['subpages'], 'subpage' );
 
                        if ( $params['movetalk'] ) {
@@ -153,20 +157,21 @@ class ApiMove extends ApiBase {
                $success = $fromTitle->moveSubpages( $toTitle, true, $reason, !$noredirect );
                if ( isset( $success[0] ) ) {
                        return array( 'error' => $this->parseMsg( $success ) );
-               } else {
-                       // At least some pages could be moved
-                       // Report each of them separately
-                       foreach ( $success as $oldTitle => $newTitle ) {
-                               $r = array( 'from' => $oldTitle );
-                               if ( is_array( $newTitle ) ) {
-                                       $r['error'] = $this->parseMsg( reset( $newTitle ) );
-                               } else {
-                                       // Success
-                                       $r['to'] = $newTitle;
-                               }
-                               $retval[] = $r;
+               }
+
+               // At least some pages could be moved
+               // Report each of them separately
+               foreach ( $success as $oldTitle => $newTitle ) {
+                       $r = array( 'from' => $oldTitle );
+                       if ( is_array( $newTitle ) ) {
+                               $r['error'] = $this->parseMsg( reset( $newTitle ) );
+                       } else {
+                               // Success
+                               $r['to'] = $newTitle;
                        }
+                       $retval[] = $r;
                }
+
                return $retval;
        }
 
@@ -219,6 +224,7 @@ class ApiMove extends ApiBase {
 
        public function getParamDescription() {
                $p = $this->getModulePrefix();
+
                return array(
                        'from' => "Title of the page you want to move. Cannot be used together with {$p}fromid",
                        'fromid' => "Page ID of the page you want to move. Cannot be used together with {$p}from",
@@ -230,7 +236,8 @@ class ApiMove extends ApiBase {
                        'noredirect' => 'Don\'t create a redirect',
                        'watch' => 'Add the page and the redirect to your watchlist',
                        'unwatch' => 'Remove the page and the redirect from your watchlist',
-                       'watchlist' => 'Unconditionally add or remove the page from your watchlist, use preferences or do not change watch',
+                       'watchlist' => 'Unconditionally add or remove the page from your ' .
+                               'watchlist, use preferences or do not change watch',
                        'ignorewarnings' => 'Ignore any warnings'
                );
        }
@@ -291,7 +298,8 @@ class ApiMove extends ApiBase {
 
        public function getExamples() {
                return array(
-                       'api.php?action=move&from=Badtitle&to=Goodtitle&token=123ABC&reason=Misspelled%20title&movetalk=&noredirect='
+                       'api.php?action=move&from=Badtitle&to=Goodtitle&token=123ABC&' .
+                               'reason=Misspelled%20title&movetalk=&noredirect='
                );
        }
 
index 315ace3..4b8578b 100644 (file)
@@ -40,6 +40,7 @@ class ApiOpenSearch extends ApiBase {
                if ( in_array( $format, $allowed ) ) {
                        return $this->getMain()->createPrinterByName( $format );
                }
+
                return $this->getMain()->createPrinterByName( $allowed[0] );
        }
 
@@ -89,10 +90,12 @@ class ApiOpenSearch extends ApiBase {
        }
 
        public function getAllowedParams() {
+               global $wgOpenSearchDefaultLimit;
+
                return array(
                        'search' => null,
                        'limit' => array(
-                               ApiBase::PARAM_DFLT => 10,
+                               ApiBase::PARAM_DFLT => $wgOpenSearchDefaultLimit,
                                ApiBase::PARAM_TYPE => 'limit',
                                ApiBase::PARAM_MIN => 1,
                                ApiBase::PARAM_MAX => 100,
index 7256066..929b0b6 100644 (file)
@@ -31,7 +31,6 @@
  * @ingroup API
  */
 class ApiOptions extends ApiBase {
-
        /**
         * Changes preferences of the current user.
         */
@@ -172,9 +171,13 @@ class ApiOptions extends ApiBase {
                        'token' => 'An options token previously obtained through the action=tokens',
                        'reset' => 'Resets preferences to the site defaults',
                        'resetkinds' => 'List of types of options to reset when the "reset" option is set',
-                       'change' => 'List of changes, formatted name=value (e.g. skin=vector), value cannot contain pipe characters. If no value is given (not even an equals sign), e.g., optionname|otheroption|..., the option will be reset to its default value',
+                       'change' => 'List of changes, formatted name=value (e.g. skin=vector), ' .
+                               'value cannot contain pipe characters. If no value is given (not ' .
+                               'even an equals sign), e.g., optionname|otheroption|..., the ' .
+                               'option will be reset to its default value',
                        'optionname' => 'A name of a option which should have an optionvalue set',
-                       'optionvalue' => 'A value of the option specified by the optionname, can contain pipe characters',
+                       'optionvalue' => 'A value of the option specified by the optionname, ' .
+                               'can contain pipe characters',
                );
        }
 
@@ -182,7 +185,8 @@ class ApiOptions extends ApiBase {
                return array(
                        'Change preferences of the current user',
                        'Only options which are registered in core or in one of installed extensions,',
-                       'or as options with keys prefixed with \'userjs-\' (intended to be used by user scripts), can be set.'
+                       'or as options with keys prefixed with \'userjs-\' (intended to be used by user',
+                       'scripts), can be set.'
                );
        }
 
@@ -209,7 +213,8 @@ class ApiOptions extends ApiBase {
                return array(
                        'api.php?action=options&reset=&token=123ABC',
                        'api.php?action=options&change=skin=vector|hideminor=1&token=123ABC',
-                       'api.php?action=options&reset=&change=skin=monobook&optionname=nickname&optionvalue=[[User:Beau|Beau]]%20([[User_talk:Beau|talk]])&token=123ABC',
+                       'api.php?action=options&reset=&change=skin=monobook&optionname=nickname&' .
+                               'optionvalue=[[User:Beau|Beau]]%20([[User_talk:Beau|talk]])&token=123ABC',
                );
        }
 }
index b05cb2b..e95e680 100644 (file)
@@ -112,7 +112,8 @@ class ApiPageSet extends ApiBase {
 
        /**
         * Populate the PageSet from the request parameters.
-        * @param bool $isDryRun If true, instantiates generator, but only to mark relevant parameters as used
+        * @param bool $isDryRun If true, instantiates generator, but only to mark
+        *    relevant parameters as used
         */
        private function executeInternal( $isDryRun ) {
                $this->profileIn();
@@ -200,8 +201,9 @@ class ApiPageSet extends ApiBase {
                                                break;
                                        case 'revids':
                                                if ( $this->mResolveRedirects ) {
-                                                       $this->setWarning( 'Redirect resolution cannot be used together with the revids= parameter. ' .
-                                                               'Any redirects the revids= point to have not been resolved.' );
+                                                       $this->setWarning( 'Redirect resolution cannot be used ' .
+                                                               'together with the revids= parameter. Any redirects ' .
+                                                               'the revids= point to have not been resolved.' );
                                                }
                                                $this->mResolveRedirects = false;
                                                $this->initFromRevIDs( $this->mParams['revids'] );
@@ -244,6 +246,7 @@ class ApiPageSet extends ApiBase {
                if ( isset( $this->mParams['revids'] ) ) {
                        return 'revids';
                }
+
                return null;
        }
 
@@ -289,6 +292,7 @@ class ApiPageSet extends ApiBase {
                $this->mRequestedPageFields = array_diff_key( $this->mRequestedPageFields, $pageFlds );
 
                $pageFlds = array_merge( $pageFlds, $this->mRequestedPageFields );
+
                return array_keys( $pageFlds );
        }
 
@@ -391,6 +395,7 @@ class ApiPageSet extends ApiBase {
                if ( !empty( $values ) && $result ) {
                        $result->setIndexedTagName( $values, 'r' );
                }
+
                return $values;
        }
 
@@ -421,6 +426,7 @@ class ApiPageSet extends ApiBase {
                if ( !empty( $values ) && $result ) {
                        $result->setIndexedTagName( $values, 'n' );
                }
+
                return $values;
        }
 
@@ -451,6 +457,7 @@ class ApiPageSet extends ApiBase {
                if ( !empty( $values ) && $result ) {
                        $result->setIndexedTagName( $values, 'c' );
                }
+
                return $values;
        }
 
@@ -487,6 +494,7 @@ class ApiPageSet extends ApiBase {
                if ( !empty( $values ) && $result ) {
                        $result->setIndexedTagName( $values, 'i' );
                }
+
                return $values;
        }
 
@@ -522,6 +530,7 @@ class ApiPageSet extends ApiBase {
                if ( !empty( $values ) && $result ) {
                        $result->setIndexedTagName( $values, 'rev' );
                }
+
                return $values;
        }
 
@@ -584,7 +593,7 @@ class ApiPageSet extends ApiBase {
 
        /**
         * Extract all requested fields from the row received from the database
-        * @param $row Result row
+        * @param stdClass $row Result row
         */
        public function processDbRow( $row ) {
                // Store Title object in various data structures
@@ -642,7 +651,7 @@ class ApiPageSet extends ApiBase {
                // Get pageIDs data from the `page` table
                $this->profileDBIn();
                $res = $db->select( 'page', $this->getPageTableFields(), $set,
-                                       __METHOD__ );
+                       __METHOD__ );
                $this->profileDBOut();
 
                // Hack: get the ns:titles stored in array(ns => array(titles)) format
@@ -676,7 +685,7 @@ class ApiPageSet extends ApiBase {
                        // Get pageIDs data from the `page` table
                        $this->profileDBIn();
                        $res = $db->select( 'page', $this->getPageTableFields(), $set,
-                                               __METHOD__ );
+                               __METHOD__ );
                        $this->profileDBOut();
                }
 
@@ -863,7 +872,12 @@ class ApiPageSet extends ApiBase {
                foreach ( $res as $row ) {
                        $rdfrom = intval( $row->rd_from );
                        $from = $this->mPendingRedirectIDs[$rdfrom]->getPrefixedText();
-                       $to = Title::makeTitle( $row->rd_namespace, $row->rd_title, $row->rd_fragment, $row->rd_interwiki );
+                       $to = Title::makeTitle(
+                               $row->rd_namespace,
+                               $row->rd_title,
+                               $row->rd_fragment,
+                               $row->rd_interwiki
+                       );
                        unset( $this->mPendingRedirectIDs[$rdfrom] );
                        if ( !$to->isExternal() && !isset( $this->mAllPages[$row->rd_namespace][$row->rd_title] ) ) {
                                $lb->add( $row->rd_namespace, $row->rd_title );
@@ -886,6 +900,7 @@ class ApiPageSet extends ApiBase {
                                unset( $this->mPendingRedirectIDs[$id] );
                        }
                }
+
                return $lb;
        }
 
@@ -941,8 +956,9 @@ class ApiPageSet extends ApiBase {
                                // Variants checking
                                global $wgContLang;
                                if ( $this->mConvertTitles &&
-                                               count( $wgContLang->getVariants() ) > 1 &&
-                                               !$titleObj->exists() ) {
+                                       count( $wgContLang->getVariants() ) > 1 &&
+                                       !$titleObj->exists()
+                               ) {
                                        // Language::findVariantLink will modify titleText and titleObj into
                                        // the canonical variant if possible
                                        $titleText = is_string( $title ) ? $title : $titleObj->getPrefixedText();
@@ -1040,6 +1056,7 @@ class ApiPageSet extends ApiBase {
                                $result['generator'] = null;
                        }
                }
+
                return $result;
        }
 
@@ -1067,6 +1084,7 @@ class ApiPageSet extends ApiBase {
                        sort( $gens );
                        self::$generators = $gens;
                }
+
                return self::$generators;
        }
 
@@ -1075,19 +1093,34 @@ class ApiPageSet extends ApiBase {
                        'titles' => 'A list of titles to work on',
                        'pageids' => 'A list of page IDs to work on',
                        'revids' => 'A list of revision IDs to work on',
-                       'generator' => array( 'Get the list of pages to work on by executing the specified query module.',
-                               'NOTE: generator parameter names must be prefixed with a \'g\', see examples' ),
+                       'generator' => array(
+                               'Get the list of pages to work on by executing the specified query module.',
+                               'NOTE: generator parameter names must be prefixed with a \'g\', see examples'
+                       ),
                        'redirects' => 'Automatically resolve redirects',
-                       'converttitles' => array( 'Convert titles to other variants if necessary. Only works if the wiki\'s content language supports variant conversion.',
-                               'Languages that support variant conversion include ' . implode( ', ', LanguageConverter::$languagesWithVariants ) ),
+                       'converttitles' => array(
+                               'Convert titles to other variants if necessary. Only works if ' .
+                                       'the wiki\'s content language supports variant conversion.',
+                               'Languages that support variant conversion include ' .
+                                       implode( ', ', LanguageConverter::$languagesWithVariants )
+                       ),
                );
        }
 
        public function getPossibleErrors() {
                return array_merge( parent::getPossibleErrors(), array(
-                       array( 'code' => 'multisource', 'info' => "Cannot use 'pageids' at the same time as 'dataSource'" ),
-                       array( 'code' => 'multisource', 'info' => "Cannot use 'revids' at the same time as 'dataSource'" ),
-                       array( 'code' => 'badgenerator', 'info' => 'Module $generatorName cannot be used as a generator' ),
+                       array(
+                               'code' => 'multisource',
+                               'info' => "Cannot use 'pageids' at the same time as 'dataSource'"
+                       ),
+                       array(
+                               'code' => 'multisource',
+                               'info' => "Cannot use 'revids' at the same time as 'dataSource'"
+                       ),
+                       array(
+                               'code' => 'badgenerator',
+                               'info' => 'Module $generatorName cannot be used as a generator'
+                       ),
                ) );
        }
 }
index 3e1a753..2b4710a 100644 (file)
@@ -226,7 +226,8 @@ class ApiParamInfo extends ApiBase {
                        if ( isset( $p[ApiBase::PARAM_TYPE] ) ) {
                                $a['type'] = $p[ApiBase::PARAM_TYPE];
                                if ( is_array( $a['type'] ) ) {
-                                       $a['type'] = array_values( $a['type'] ); // to prevent sparse arrays from being serialized to JSON as objects
+                                       // To prevent sparse arrays from being serialized to JSON as objects
+                                       $a['type'] = array_values( $a['type'] );
                                        $result->setIndexedTagName( $a['type'], 't' );
                                }
                        }
@@ -317,6 +318,7 @@ class ApiParamInfo extends ApiBase {
                sort( $querymodules );
                $formatmodules = $this->getMain()->getModuleManager()->getNames( 'format' );
                sort( $formatmodules );
+
                return array(
                        'modules' => array(
                                ApiBase::PARAM_ISMULTI => true,
@@ -340,7 +342,8 @@ class ApiParamInfo extends ApiBase {
                        'modules' => 'List of module names (value of the action= parameter)',
                        'querymodules' => 'List of query module names (value of prop=, meta= or list= parameter)',
                        'mainmodule' => 'Get information about the main (top-level) module as well',
-                       'pagesetmodule' => 'Get information about the pageset module (providing titles= and friends) as well',
+                       'pagesetmodule' => 'Get information about the pageset module ' .
+                               '(providing titles= and friends) as well',
                        'formatmodules' => 'List of format module names (value of format= parameter)',
                );
        }
index 301affb..ddc032d 100644 (file)
@@ -60,7 +60,10 @@ class ApiParse extends ApiBase {
                $format = $params['contentformat'];
 
                if ( !is_null( $page ) && ( !is_null( $text ) || $titleProvided ) ) {
-                       $this->dieUsage( 'The page parameter cannot be used together with the text and title parameters', 'params' );
+                       $this->dieUsage(
+                               'The page parameter cannot be used together with the text and title parameters',
+                               'params'
+                       );
                }
 
                $prop = array_flip( $params['prop'] );
@@ -76,9 +79,12 @@ class ApiParse extends ApiBase {
                // TODO: Does this still need $wgTitle?
                global $wgParser, $wgTitle;
 
-               // Currently unnecessary, code to act as a safeguard against any change in current behavior of uselang
+               // Currently unnecessary, code to act as a safeguard against any change
+               // in current behavior of uselang
                $oldLang = null;
-               if ( isset( $params['uselang'] ) && $params['uselang'] != $this->getContext()->getLanguage()->getCode() ) {
+               if ( isset( $params['uselang'] )
+                       && $params['uselang'] != $this->getContext()->getLanguage()->getCode()
+               ) {
                        $oldLang = $this->getContext()->getLanguage(); // Backup language
                        $this->getContext()->setLanguage( Language::factory( $params['uselang'] ) );
                }
@@ -125,7 +131,7 @@ class ApiParse extends ApiBase {
                                                'action' => 'query',
                                                'redirects' => '',
                                        );
-                                       if ( !is_null ( $pageid ) ) {
+                                       if ( !is_null( $pageid ) ) {
                                                $reqParams['pageids'] = $pageid;
                                        } else { // $page
                                                $reqParams['titles'] = $page;
@@ -219,6 +225,7 @@ class ApiParse extends ApiBase {
                                        ApiResult::setContent( $result_array['wikitext'], $this->content->serialize( $format ) );
                                }
                                $result->addValue( null, $this->getModuleName(), $result_array );
+
                                return;
                        }
 
@@ -249,7 +256,10 @@ class ApiParse extends ApiBase {
 
                if ( !is_null( $params['summary'] ) ) {
                        $result_array['parsedsummary'] = array();
-                       ApiResult::setContent( $result_array['parsedsummary'], Linker::formatComment( $params['summary'], $titleObj ) );
+                       ApiResult::setContent(
+                               $result_array['parsedsummary'],
+                               Linker::formatComment( $params['summary'], $titleObj )
+                       );
                }
 
                if ( isset( $prop['langlinks'] ) || isset( $prop['languageshtml'] ) ) {
@@ -300,8 +310,8 @@ class ApiParse extends ApiBase {
 
                if ( isset( $prop['displaytitle'] ) ) {
                        $result_array['displaytitle'] = $p_result->getDisplayTitle() ?
-                                                       $p_result->getDisplayTitle() :
-                                                       $titleObj->getPrefixedText();
+                               $p_result->getDisplayTitle() :
+                               $titleObj->getPrefixedText();
                }
 
                if ( isset( $prop['headitems'] ) || isset( $prop['headhtml'] ) ) {
@@ -321,7 +331,10 @@ class ApiParse extends ApiBase {
 
                        if ( isset( $prop['headhtml'] ) ) {
                                $result_array['headhtml'] = array();
-                               ApiResult::setContent( $result_array['headhtml'], $context->getOutput()->headElement( $context->getSkin() ) );
+                               ApiResult::setContent(
+                                       $result_array['headhtml'],
+                                       $context->getOutput()->headElement( $context->getSkin() )
+                               );
                        }
                }
 
@@ -395,6 +408,7 @@ class ApiParse extends ApiBase {
                $popts->setIsSectionPreview( $params['sectionpreview'] );
 
                wfProfileOut( __METHOD__ );
+
                return $popts;
        }
 
@@ -411,22 +425,24 @@ class ApiParse extends ApiBase {
                if ( $this->section !== false && $this->content !== null ) {
                        $this->content = $this->getSectionContent(
                                $this->content,
-                               !is_null( $pageId ) ? 'page id ' . $pageId : $page->getTitle()->getText() );
+                               !is_null( $pageId ) ? 'page id ' . $pageId : $page->getTitle()->getText()
+                       );
 
                        // Not cached (save or load)
                        return $this->content->getParserOutput( $page->getTitle(), null, $popts );
-               } else {
-                       // Try the parser cache first
-                       // getParserOutput will save to Parser cache if able
-                       $pout = $page->getParserOutput( $popts );
-                       if ( !$pout ) {
-                               $this->dieUsage( "There is no revision ID {$page->getLatest()}", 'missingrev' );
-                       }
-                       if ( $getWikitext ) {
-                               $this->content = $page->getContent( Revision::RAW );
-                       }
-                       return $pout;
                }
+
+               // Try the parser cache first
+               // getParserOutput will save to Parser cache if able
+               $pout = $page->getParserOutput( $popts );
+               if ( !$pout ) {
+                       $this->dieUsage( "There is no revision ID {$page->getLatest()}", 'missingrev' );
+               }
+               if ( $getWikitext ) {
+                       $this->content = $page->getContent( Revision::RAW );
+               }
+
+               return $pout;
        }
 
        private function getSectionContent( Content $content, $what ) {
@@ -439,6 +455,7 @@ class ApiParse extends ApiBase {
                        $this->dieUsage( "Sections are not supported by " . $what, 'nosuchsection' );
                        $section = false;
                }
+
                return $section;
        }
 
@@ -456,6 +473,7 @@ class ApiParse extends ApiBase {
                        ApiResult::setContent( $entry, $bits[1] );
                        $result[] = $entry;
                }
+
                return $result;
        }
 
@@ -502,12 +520,13 @@ class ApiParse extends ApiBase {
        private function categoriesHtml( $categories ) {
                $context = $this->getContext();
                $context->getOutput()->addCategoryLinks( $categories );
+
                return $context->getSkin()->getCategories();
        }
 
        /**
-        * @deprecated since 1.18 No modern skin generates language links this way, please use language links
-        *                        data to generate your own HTML.
+        * @deprecated since 1.18 No modern skin generates language links this way,
+        * please use language links data to generate your own HTML.
         * @param $languages array
         * @return string
         */
@@ -520,7 +539,8 @@ class ApiParse extends ApiBase {
                        return '';
                }
 
-               $s = htmlspecialchars( wfMessage( 'otherlanguages' )->text() . wfMessage( 'colon-separator' )->text() );
+               $s = htmlspecialchars( wfMessage( 'otherlanguages' )->text() .
+                       wfMessage( 'colon-separator' )->text() );
 
                $langs = array();
                foreach ( $languages as $l ) {
@@ -554,6 +574,7 @@ class ApiParse extends ApiBase {
                                $result[] = $entry;
                        }
                }
+
                return $result;
        }
 
@@ -573,6 +594,7 @@ class ApiParse extends ApiBase {
                                $result[] = $entry;
                        }
                }
+
                return $result;
        }
 
@@ -584,6 +606,7 @@ class ApiParse extends ApiBase {
                        ApiResult::setContent( $entry, $content );
                        $result[] = $entry;
                }
+
                return $result;
        }
 
@@ -595,6 +618,7 @@ class ApiParse extends ApiBase {
                        ApiResult::setContent( $entry, $value );
                        $result[] = $entry;
                }
+
                return $result;
        }
 
@@ -606,6 +630,7 @@ class ApiParse extends ApiBase {
                        ApiResult::setContent( $entry, $link );
                        $result[] = $entry;
                }
+
                return $result;
        }
 
@@ -631,7 +656,8 @@ class ApiParse extends ApiBase {
                                ApiBase::PARAM_TYPE => 'integer',
                        ),
                        'prop' => array(
-                               ApiBase::PARAM_DFLT => 'text|langlinks|categories|links|templates|images|externallinks|sections|revid|displaytitle|iwlinks|properties',
+                               ApiBase::PARAM_DFLT => 'text|langlinks|categories|links|templates|' .
+                                       'images|externallinks|sections|revid|displaytitle|iwlinks|properties',
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => array(
                                        'text',
@@ -674,6 +700,7 @@ class ApiParse extends ApiBase {
        public function getParamDescription() {
                $p = $this->getModulePrefix();
                $wikitext = CONTENT_MODEL_WIKITEXT;
+
                return array(
                        'text' => "Text to parse. Use {$p}title or {$p}contentmodel to control the content model",
                        'summary' => 'Summary to parse',
@@ -736,9 +763,11 @@ class ApiParse extends ApiBase {
 
        public function getDescription() {
                $p = $this->getModulePrefix();
+
                return array(
                        'Parses content and returns parser output',
-                       'See the various prop-Modules of action=query to get information from the current version of a page',
+                       'See the various prop-Modules of action=query to get information from the current' .
+                               'version of a page',
                        'There are several ways to specify the text to parse:',
                        "1) Specify a page or revision, using {$p}page, {$p}pageid, or {$p}oldid.",
                        "2) Specify content explicitly, using {$p}text, {$p}title, and {$p}contentmodel.",
@@ -748,15 +777,24 @@ class ApiParse extends ApiBase {
 
        public function getPossibleErrors() {
                return array_merge( parent::getPossibleErrors(), array(
-                       array( 'code' => 'params', 'info' => 'The page parameter cannot be used together with the text and title parameters' ),
+                       array(
+                               'code' => 'params',
+                               'info' => 'The page parameter cannot be used together with the text and title parameters'
+                       ),
                        array( 'code' => 'missingrev', 'info' => 'There is no revision ID oldid' ),
-                       array( 'code' => 'permissiondenied', 'info' => 'You don\'t have permission to view deleted revisions' ),
+                       array(
+                               'code' => 'permissiondenied',
+                               'info' => 'You don\'t have permission to view deleted revisions'
+                       ),
                        array( 'code' => 'missingtitle', 'info' => 'The page you specified doesn\'t exist' ),
                        array( 'code' => 'nosuchsection', 'info' => 'There is no section sectionnumber in page' ),
                        array( 'nosuchpageid' ),
                        array( 'invalidtitle', 'title' ),
                        array( 'code' => 'parseerror', 'info' => 'Failed to parse the given text.' ),
-                       array( 'code' => 'notwikitext', 'info' => 'The requested operation is only supported on wikitext content.' ),
+                       array(
+                               'code' => 'notwikitext',
+                               'info' => 'The requested operation is only supported on wikitext content.'
+                       ),
                        array( 'code' => 'pagecannotexist', 'info' => "Namespace doesn't allow actual pages" ),
                ) );
        }
@@ -765,7 +803,8 @@ class ApiParse extends ApiBase {
                return array(
                        'api.php?action=parse&page=Project:Sandbox' => 'Parse a page',
                        'api.php?action=parse&text={{Project:Sandbox}}' => 'Parse wikitext',
-                       'api.php?action=parse&text={{PAGENAME}}&title=Test' => 'Parse wikitext, specifying the page title',
+                       'api.php?action=parse&text={{PAGENAME}}&title=Test'
+                               => 'Parse wikitext, specifying the page title',
                        'api.php?action=parse&summary=Some+[[link]]&prop=' => 'Parse a summary',
                );
        }
index bd2fde2..46bd94e 100644 (file)
@@ -123,7 +123,8 @@ class ApiPatrol extends ApiBase {
                                        'code' => 'notpatrollable',
                                        'info' => "The revision can't be patrolled as it's too old"
                                )
-               ) );
+                       )
+               );
        }
 
        public function needsToken() {
index 7830c8b..80c76b3 100644 (file)
@@ -28,7 +28,6 @@
  * @ingroup API
  */
 class ApiProtect extends ApiBase {
-
        public function execute() {
                global $wgRestrictionLevels;
                $params = $this->extractRequestParams();
@@ -47,7 +46,11 @@ class ApiProtect extends ApiBase {
                        if ( count( $expiry ) == 1 ) {
                                $expiry = array_fill( 0, count( $params['protections'] ), $expiry[0] );
                        } else {
-                               $this->dieUsageMsg( array( 'toofewexpiries', count( $expiry ), count( $params['protections'] ) ) );
+                               $this->dieUsageMsg( array(
+                                       'toofewexpiries',
+                                       count( $expiry ),
+                                       count( $params['protections'] )
+                               ) );
                        }
                }
 
@@ -90,17 +93,23 @@ class ApiProtect extends ApiBase {
                                $expiryarray[$p[0]] = $exp;
                        }
                        $resultProtections[] = array( $p[0] => $protections[$p[0]],
-                                       'expiry' => ( $expiryarray[$p[0]] == $db->getInfinity() ?
-                                                               'infinite' :
-                                                               wfTimestamp( TS_ISO_8601, $expiryarray[$p[0]] ) ) );
+                               'expiry' => ( $expiryarray[$p[0]] == $db->getInfinity() ?
+                                       'infinite' :
+                                       wfTimestamp( TS_ISO_8601, $expiryarray[$p[0]] ) ) );
                }
 
                $cascade = $params['cascade'];
 
                $watch = $params['watch'] ? 'watch' : $params['watchlist'];
-               $this->setWatch( $watch, $titleObj );
-
-               $status = $pageObj->doUpdateRestrictions( $protections, $expiryarray, $cascade, $params['reason'], $this->getUser() );
+               $this->setWatch( $watch, $titleObj, 'watchdefault' );
+
+               $status = $pageObj->doUpdateRestrictions(
+                       $protections,
+                       $expiryarray,
+                       $cascade,
+                       $params['reason'],
+                       $this->getUser()
+               );
 
                if ( !$status->isOK() ) {
                        $this->dieStatus( $status );
@@ -167,18 +176,25 @@ class ApiProtect extends ApiBase {
 
        public function getParamDescription() {
                $p = $this->getModulePrefix();
+
                return array(
                        'title' => "Title of the page you want to (un)protect. Cannot be used together with {$p}pageid",
                        'pageid' => "ID of the page you want to (un)protect. Cannot be used together with {$p}title",
                        'token' => 'A protect token previously retrieved through prop=info',
                        'protections' => 'List of protection levels, formatted action=group (e.g. edit=sysop)',
-                       'expiry' => array( 'Expiry timestamps. If only one timestamp is set, it\'ll be used for all protections.',
-                                       'Use \'infinite\', \'indefinite\' or \'never\', for a never-expiring protection.' ),
+                       'expiry' => array(
+                               'Expiry timestamps. If only one timestamp is ' .
+                                       'set, it\'ll be used for all protections.',
+                               'Use \'infinite\', \'indefinite\' or \'never\', for a never-expiring protection.'
+                       ),
                        'reason' => 'Reason for (un)protecting',
-                       'cascade' => array( 'Enable cascading protection (i.e. protect pages included in this page)',
-                                       'Ignored if not all protection levels are \'sysop\' or \'protect\'' ),
+                       'cascade' => array(
+                               'Enable cascading protection (i.e. protect pages included in this page)',
+                               'Ignored if not all protection levels are \'sysop\' or \'protect\''
+                       ),
                        'watch' => 'If set, add the page being (un)protected to your watchlist',
-                       'watchlist' => 'Unconditionally add or remove the page from your watchlist, use preferences or do not change watch',
+                       'watchlist' => 'Unconditionally add or remove the page from your ' .
+                               'watchlist, use preferences or do not change watch',
                );
        }
 
@@ -221,8 +237,10 @@ class ApiProtect extends ApiBase {
 
        public function getExamples() {
                return array(
-                       'api.php?action=protect&title=Main%20Page&token=123ABC&protections=edit=sysop|move=sysop&cascade=&expiry=20070901163000|never',
-                       'api.php?action=protect&title=Main%20Page&token=123ABC&protections=edit=all|move=all&reason=Lifting%20restrictions'
+                       'api.php?action=protect&title=Main%20Page&token=123ABC&' .
+                               'protections=edit=sysop|move=sysop&cascade=&expiry=20070901163000|never',
+                       'api.php?action=protect&title=Main%20Page&token=123ABC&' .
+                               'protections=edit=all|move=all&reason=Lifting%20restrictions'
                );
        }
 
index 0812ba5..c0dd808 100644 (file)
@@ -30,7 +30,6 @@
  * @ingroup API
  */
 class ApiPurge extends ApiBase {
-
        private $mPageSet;
 
        /**
@@ -91,7 +90,12 @@ class ApiPurge extends ApiBase {
 
                                        # Parse content; note that HTML generation is only needed if we want to cache the result.
                                        $content = $page->getContent( Revision::RAW );
-                                       $p_result = $content->getParserOutput( $title, $page->getLatest(), $popts, $wgEnableParserCache );
+                                       $p_result = $content->getParserOutput(
+                                               $title,
+                                               $page->getLatest(),
+                                               $popts,
+                                               $wgEnableParserCache
+                                       );
 
                                        # Update the links tables
                                        $updates = $content->getSecondaryDataUpdates(
@@ -139,6 +143,7 @@ class ApiPurge extends ApiBase {
                if ( !isset( $this->mPageSet ) ) {
                        $this->mPageSet = new ApiPageSet( $this );
                }
+
                return $this->mPageSet;
        }
 
@@ -159,6 +164,7 @@ class ApiPurge extends ApiBase {
                if ( $flags ) {
                        $result += $this->getPageSet()->getFinalParams( $flags );
                }
+
                return $result;
        }
 
index e03837f..cec1ca8 100644 (file)
@@ -163,6 +163,7 @@ class ApiQuery extends ApiBase {
                        $this->mNamedDB[$name] = wfGetDB( $db, $groups );
                        $this->profileDBOut();
                }
+
                return $this->mNamedDB[$name];
        }
 
@@ -181,6 +182,7 @@ class ApiQuery extends ApiBase {
         */
        public function getModules() {
                wfDeprecated( __METHOD__, '1.21' );
+
                return $this->getModuleManager()->getNamesWithClasses();
        }
 
@@ -197,6 +199,7 @@ class ApiQuery extends ApiBase {
                                $gens[$name] = $class;
                        }
                }
+
                return $gens;
        }
 
@@ -216,8 +219,8 @@ class ApiQuery extends ApiBase {
        public function getCustomPrinter() {
                // If &exportnowrap is set, use the raw formatter
                if ( $this->getParameter( 'export' ) &&
-                               $this->getParameter( 'exportnowrap' ) )
-               {
+                       $this->getParameter( 'exportnowrap' )
+               {
                        return new ApiFormatRaw( $this->getMain(),
                                $this->getMain()->createPrinterByName( 'xml' ) );
                } else {
@@ -407,6 +410,7 @@ class ApiQuery extends ApiBase {
                        }
                }
                $this->dieContinueUsageIf( $completeModules !== null && count( $tmp ) !== 0 );
+
                return $modules;
        }
 
@@ -429,6 +433,7 @@ class ApiQuery extends ApiBase {
                } else { // private
                        $cacheMode = 'private';
                }
+
                return $cacheMode;
        }
 
@@ -514,10 +519,12 @@ class ApiQuery extends ApiBase {
                        ApiQueryBase::addTitleInfo( $vals, $title );
                        $vals['special'] = '';
                        if ( $title->isSpecialPage() &&
-                                       !SpecialPageFactory::exists( $title->getDBkey() ) ) {
+                               !SpecialPageFactory::exists( $title->getDBkey() )
+                       ) {
                                $vals['missing'] = '';
                        } elseif ( $title->getNamespace() == NS_MEDIA &&
-                                       !wfFindFile( $title ) ) {
+                               !wfFindFile( $title )
+                       ) {
                                $vals['missing'] = '';
                        }
                        $pages[$fakeId] = $vals;
@@ -566,6 +573,7 @@ class ApiQuery extends ApiBase {
                        $this->mGeneratorContinue = array();
                }
                $this->mGeneratorContinue[$paramName] = $paramValue;
+
                return true;
        }
 
@@ -638,6 +646,7 @@ class ApiQuery extends ApiBase {
                if ( $flags ) {
                        $result += $this->getPageSet()->getFinalParams( $flags );
                }
+
                return $result;
        }
 
@@ -699,25 +708,32 @@ class ApiQuery extends ApiBase {
 
        public function getParamDescription() {
                return $this->getPageSet()->getFinalParamDescription() + array(
-                       'prop' => 'Which properties to get for the titles/revisions/pageids. Module help is available below',
+                       'prop' => 'Which properties to get for the titles/revisions/pageids. ' .
+                               'Module help is available below',
                        'list' => 'Which lists to get. Module help is available below',
                        'meta' => 'Which metadata to get about the site. Module help is available below',
                        'indexpageids' => 'Include an additional pageids section listing all returned page IDs',
                        'export' => 'Export the current revisions of all given or generated pages',
-                       'exportnowrap' => 'Return the export XML without wrapping it in an XML result (same format as Special:Export). Can only be used with export',
+                       'exportnowrap' => 'Return the export XML without wrapping it in an ' .
+                               'XML result (same format as Special:Export). Can only be used with export',
                        'iwurl' => 'Whether to get the full URL if the title is an interwiki link',
                        'continue' => array(
-                               'When present, formats query-continue as key-value pairs that should simply be merged into the original request.',
+                               'When present, formats query-continue as key-value pairs that ' .
+                                       'should simply be merged into the original request.',
                                'This parameter must be set to an empty string in the initial query.',
-                               'This parameter is recommended for all new development, and will be made default in the next API version.' ),
+                               'This parameter is recommended for all new development, and ' .
+                                       'will be made default in the next API version.'
+                       ),
                );
        }
 
        public function getDescription() {
                return array(
-                       'Query API module allows applications to get needed pieces of data from the MediaWiki databases,',
+                       'Query API module allows applications to get needed pieces of data ' .
+                               'from the MediaWiki databases,',
                        'and is loosely based on the old query.php interface.',
-                       'All data modifications will first have to use query to acquire a token to prevent abuse from malicious sites'
+                       'All data modifications will first have to use query to acquire a ' .
+                               'token to prevent abuse from malicious sites'
                );
        }
 
@@ -730,7 +746,8 @@ class ApiQuery extends ApiBase {
 
        public function getExamples() {
                return array(
-                       'api.php?action=query&prop=revisions&meta=siteinfo&titles=Main%20Page&rvprop=user|comment&continue=',
+                       'api.php?action=query&prop=revisions&meta=siteinfo&' .
+                               'titles=Main%20Page&rvprop=user|comment&continue=',
                        'api.php?action=query&generator=allpages&gapprefix=API/&prop=revisions&continue=',
                );
        }
index 3f5c6ee..d0ab59e 100644 (file)
@@ -80,7 +80,8 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
                }
 
                if ( isset( $params['prefix'] ) ) {
-                       $this->addWhere( 'cat_title' . $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
+                       $this->addWhere( 'cat_title' .
+                               $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
                }
 
                $this->addOption( 'LIMIT', $params['limit'] + 1 );
@@ -109,8 +110,9 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
                $result = $this->getResult();
                $count = 0;
                foreach ( $res as $row ) {
-                       if ( ++ $count > $params['limit'] ) {
-                               // We've reached the one extra which shows that there are additional cats to be had. Stop here...
+                       if ( ++$count > $params['limit'] ) {
+                               // We've reached the one extra which shows that there are
+                               // additional cats to be had. Stop here...
                                $this->setContinueEnumParameter( 'continue', $row->cat_title );
                                break;
                        }
index ccc7a3a..9f97cac 100644 (file)
@@ -32,7 +32,6 @@
  * @ingroup API
  */
 class ApiQueryAllImages extends ApiQueryGeneratorBase {
-
        protected $mRepo;
 
        public function __construct( $query, $moduleName ) {
@@ -65,7 +64,11 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
         */
        public function executeGenerator( $resultPageSet ) {
                if ( $resultPageSet->isResolvingRedirects() ) {
-                       $this->dieUsage( 'Use "gaifilterredir=nonredirects" option instead of "redirects" when using allimages as a generator', 'params' );
+                       $this->dieUsage(
+                               'Use "gaifilterredir=nonredirects" option instead of "redirects" ' .
+                                       'when using allimages as a generator',
+                               'params'
+                       );
                }
 
                $this->run( $resultPageSet );
@@ -78,7 +81,10 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
        private function run( $resultPageSet = null ) {
                $repo = $this->mRepo;
                if ( !$repo instanceof LocalRepo ) {
-                       $this->dieUsage( 'Local file repository does not support querying all images', 'unsupportedrepo' );
+                       $this->dieUsage(
+                               'Local file repository does not support querying all images',
+                               'unsupportedrepo'
+                       );
                }
 
                $prefix = $this->getModulePrefix();
@@ -103,11 +109,17 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                        $disallowed = array( 'start', 'end', 'user' );
                        foreach ( $disallowed as $pname ) {
                                if ( isset( $params[$pname] ) ) {
-                                       $this->dieUsage( "Parameter '{$prefix}{$pname}' can only be used with {$prefix}sort=timestamp", 'badparams' );
+                                       $this->dieUsage(
+                                               "Parameter '{$prefix}{$pname}' can only be used with {$prefix}sort=timestamp",
+                                               'badparams'
+                                       );
                                }
                        }
                        if ( $params['filterbots'] != 'all' ) {
-                                       $this->dieUsage( "Parameter '{$prefix}filterbots' can only be used with {$prefix}sort=timestamp", 'badparams' );
+                               $this->dieUsage(
+                                       "Parameter '{$prefix}filterbots' can only be used with {$prefix}sort=timestamp",
+                                       'badparams'
+                               );
                        }
 
                        // Pagination
@@ -125,23 +137,36 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                        $this->addWhereRange( 'img_name', ( $ascendingOrder ? 'newer' : 'older' ), $from, $to );
 
                        if ( isset( $params['prefix'] ) ) {
-                               $this->addWhere( 'img_name' . $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
+                               $this->addWhere( 'img_name' .
+                                       $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
                        }
                } else {
                        // Check mutually exclusive params
                        $disallowed = array( 'from', 'to', 'prefix' );
                        foreach ( $disallowed as $pname ) {
                                if ( isset( $params[$pname] ) ) {
-                                       $this->dieUsage( "Parameter '{$prefix}{$pname}' can only be used with {$prefix}sort=name", 'badparams' );
+                                       $this->dieUsage(
+                                               "Parameter '{$prefix}{$pname}' can only be used with {$prefix}sort=name",
+                                               'badparams'
+                                       );
                                }
                        }
                        if ( !is_null( $params['user'] ) && $params['filterbots'] != 'all' ) {
-                               // Since filterbots checks if each user has the bot right, it doesn't make sense to use it with user
-                               $this->dieUsage( "Parameters '{$prefix}user' and '{$prefix}filterbots' cannot be used together", 'badparams' );
+                               // Since filterbots checks if each user has the bot right, it
+                               // doesn't make sense to use it with user
+                               $this->dieUsage(
+                                       "Parameters '{$prefix}user' and '{$prefix}filterbots' cannot be used together",
+                                       'badparams'
+                               );
                        }
 
                        // Pagination
-                       $this->addTimestampWhereRange( 'img_timestamp', ( $ascendingOrder ? 'newer' : 'older' ), $params['start'], $params['end'] );
+                       $this->addTimestampWhereRange(
+                               'img_timestamp',
+                               $ascendingOrder ? 'newer' : 'older',
+                               $params['start'],
+                               $params['end']
+                       );
 
                        // Image filters
                        if ( !is_null( $params['user'] ) ) {
@@ -156,7 +181,7 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                                                'ug_user = img_user'
                                        )
                                ) ) );
-                               $groupCond = ( $params['filterbots'] == 'nobots' ? 'NULL': 'NOT NULL' );
+                               $groupCond = ( $params['filterbots'] == 'nobots' ? 'NULL' : 'NOT NULL' );
                                $this->addWhere( "ug_group IS $groupCond" );
                        }
                }
@@ -222,8 +247,9 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                $count = 0;
                $result = $this->getResult();
                foreach ( $res as $row ) {
-                       if ( ++ $count > $limit ) {
-                               // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+                       if ( ++$count > $limit ) {
+                               // We've reached the one extra which shows that there are
+                               // additional pages to be had. Stop here...
                                if ( $params['sort'] == 'name' ) {
                                        $this->setContinueEnumParameter( 'continue', $row->img_name );
                                } else {
@@ -326,6 +352,7 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
 
        public function getParamDescription() {
                $p = $this->getModulePrefix();
+
                return array(
                        'sort' => 'Property to sort by',
                        'dir' => 'The direction in which to list',
@@ -335,13 +362,16 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                        'start' => "The timestamp to start enumerating from. Can only be used with {$p}sort=timestamp",
                        'end' => "The timestamp to end enumerating. Can only be used with {$p}sort=timestamp",
                        'prop' => ApiQueryImageInfo::getPropertyDescriptions( $this->propertyFilter ),
-                       'prefix' => "Search for all image titles that begin with this value. Can only be used with {$p}sort=name",
+                       'prefix' => "Search for all image titles that begin with this " .
+                               "value. Can only be used with {$p}sort=name",
                        'minsize' => 'Limit to images with at least this many bytes',
                        'maxsize' => 'Limit to images with at most this many bytes',
                        'sha1' => "SHA1 hash of image. Overrides {$p}sha1base36",
                        'sha1base36' => 'SHA1 hash of image in base 36 (used in MediaWiki)',
-                       'user' => "Only return files uploaded by this user. Can only be used with {$p}sort=timestamp. Cannot be used together with {$p}filterbots",
-                       'filterbots' => "How to filter files uploaded by bots. Can only be used with {$p}sort=timestamp. Cannot be used together with {$p}user",
+                       'user' => "Only return files uploaded by this user. Can only be used " .
+                               "with {$p}sort=timestamp. Cannot be used together with {$p}filterbots",
+                       'filterbots' => "How to filter files uploaded by bots. Can only be " .
+                               "used with {$p}sort=timestamp. Cannot be used together with {$p}user",
                        'mime' => 'What MIME type to search for. e.g. image/jpeg. Disabled in Miser Mode',
                        'limit' => 'How many images in total to return',
                );
@@ -368,20 +398,54 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
 
        public function getPossibleErrors() {
                $p = $this->getModulePrefix();
+
                return array_merge( parent::getPossibleErrors(), array(
-                       array( 'code' => 'params', 'info' => 'Use "gaifilterredir=nonredirects" option instead of "redirects" when using allimages as a generator' ),
-                       array( 'code' => 'badparams', 'info' => "Parameter'{$p}start' can only be used with {$p}sort=timestamp" ),
-                       array( 'code' => 'badparams', 'info' => "Parameter'{$p}end' can only be used with {$p}sort=timestamp" ),
-                       array( 'code' => 'badparams', 'info' => "Parameter'{$p}user' can only be used with {$p}sort=timestamp" ),
-                       array( 'code' => 'badparams', 'info' => "Parameter'{$p}filterbots' can only be used with {$p}sort=timestamp" ),
-                       array( 'code' => 'badparams', 'info' => "Parameter'{$p}from' can only be used with {$p}sort=name" ),
-                       array( 'code' => 'badparams', 'info' => "Parameter'{$p}to' can only be used with {$p}sort=name" ),
-                       array( 'code' => 'badparams', 'info' => "Parameter'{$p}prefix' can only be used with {$p}sort=name" ),
-                       array( 'code' => 'badparams', 'info' => "Parameters '{$p}user' and '{$p}filterbots' cannot be used together" ),
-                       array( 'code' => 'unsupportedrepo', 'info' => 'Local file repository does not support querying all images' ),
+                       array(
+                               'code' => 'params',
+                               'info' => 'Use "gaifilterredir=nonredirects" option instead ' .
+                                       'of "redirects" when using allimages as a generator'
+                       ),
+                       array(
+                               'code' => 'badparams',
+                               'info' => "Parameter'{$p}start' can only be used with {$p}sort=timestamp"
+                       ),
+                       array(
+                               'code' => 'badparams',
+                               'info' => "Parameter'{$p}end' can only be used with {$p}sort=timestamp"
+                       ),
+                       array(
+                               'code' => 'badparams',
+                               'info' => "Parameter'{$p}user' can only be used with {$p}sort=timestamp"
+                       ),
+                       array(
+                               'code' => 'badparams',
+                               'info' => "Parameter'{$p}filterbots' can only be used with {$p}sort=timestamp"
+                       ),
+                       array(
+                               'code' => 'badparams',
+                               'info' => "Parameter'{$p}from' can only be used with {$p}sort=name"
+                       ),
+                       array(
+                               'code' => 'badparams',
+                               'info' => "Parameter'{$p}to' can only be used with {$p}sort=name"
+                       ),
+                       array(
+                               'code' => 'badparams',
+                               'info' => "Parameter'{$p}prefix' can only be used with {$p}sort=name"
+                       ),
+                       array(
+                               'code' => 'badparams',
+                               'info' => "Parameters '{$p}user' and '{$p}filterbots' cannot be used together"
+                       ),
+                       array(
+                               'code' => 'unsupportedrepo',
+                               'info' => 'Local file repository does not support querying all images' ),
                        array( 'code' => 'mimesearchdisabled', 'info' => 'MIME search disabled in Miser Mode' ),
                        array( 'code' => 'invalidsha1hash', 'info' => 'The SHA1 hash provided is not valid' ),
-                       array( 'code' => 'invalidsha1base36hash', 'info' => 'The SHA1Base36 hash provided is not valid' ),
+                       array(
+                               'code' => 'invalidsha1base36hash',
+                               'info' => 'The SHA1Base36 hash provided is not valid'
+                       ),
                ) );
        }
 
@@ -391,11 +455,13 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                                'Simple Use',
                                'Show a list of files starting at the letter "B"',
                        ),
-                       'api.php?action=query&list=allimages&aiprop=user|timestamp|url&aisort=timestamp&aidir=older' => array(
+                       'api.php?action=query&list=allimages&aiprop=user|timestamp|url&' .
+                               'aisort=timestamp&aidir=older' => array(
                                'Simple Use',
                                'Show a list of recently uploaded files similar to Special:NewFiles',
                        ),
-                       'api.php?action=query&generator=allimages&gailimit=4&gaifrom=T&prop=imageinfo' => array(
+                       'api.php?action=query&generator=allimages&gailimit=4&' .
+                               'gaifrom=T&prop=imageinfo' => array(
                                'Using as Generator',
                                'Show info about 4 files starting at the letter "T"',
                        ),
index 47d1bce..ff53d0f 100644 (file)
@@ -54,7 +54,8 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                                $this->dfltNamespace = NS_TEMPLATE;
                                $this->hasNamespace = true;
                                $this->indexTag = 't';
-                               $this->description = 'List all transclusions (pages embedded using {{x}}), including non-existing';
+                               $this->description =
+                                       'List all transclusions (pages embedded using {{x}}), including non-existing';
                                $this->descriptionWhat = 'transclusion';
                                $this->descriptionTargets = 'transcluded titles';
                                $this->descriptionLinking = 'transcluding';
@@ -113,8 +114,10 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                if ( $params['unique'] ) {
                        if ( $fld_ids ) {
                                $this->dieUsage(
-                                       "{$this->getModuleName()} cannot return corresponding page ids in unique {$this->descriptionWhat}s mode",
-                                       'params' );
+                                       "{$this->getModuleName()} cannot return corresponding page " .
+                                               "ids in unique {$this->descriptionWhat}s mode",
+                                       'params'
+                               );
                        }
                        $this->addOption( 'DISTINCT' );
                }
@@ -145,12 +148,15 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                }
 
                // 'continue' always overrides 'from'
-               $from = ( $continue || is_null( $params['from'] ) ? null : $this->titlePartToKey( $params['from'] ) );
+               $from = $continue || is_null( $params['from'] )
+                       ? null
+                       : $this->titlePartToKey( $params['from'] );
                $to = ( is_null( $params['to'] ) ? null : $this->titlePartToKey( $params['to'] ) );
                $this->addWhereRange( $pfx . $fieldTitle, 'newer', $from, $to );
 
                if ( isset( $params['prefix'] ) ) {
-                       $this->addWhere( $pfx . $fieldTitle . $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
+                       $this->addWhere( $pfx . $fieldTitle .
+                               $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
                }
 
                $this->addFields( array( 'pl_title' => $pfx . $fieldTitle ) );
@@ -177,8 +183,9 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                $count = 0;
                $result = $this->getResult();
                foreach ( $res as $row ) {
-                       if ( ++ $count > $limit ) {
-                               // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+                       if ( ++$count > $limit ) {
+                               // We've reached the one extra which shows that there are
+                               // additional pages to be had. Stop here...
                                if ( $params['unique'] ) {
                                        $this->setContinueEnumParameter( 'continue', $row->pl_title );
                                } else {
@@ -258,6 +265,7 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                if ( !$this->hasNamespace ) {
                        unset( $allowedParams['namespace'] );
                }
+
                return $allowedParams;
        }
 
@@ -287,6 +295,7 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                if ( !$this->hasNamespace ) {
                        unset( $paramDescription['namespace'] );
                }
+
                return $paramDescription;
        }
 
@@ -309,8 +318,12 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
        public function getPossibleErrors() {
                $m = $this->getModuleName();
                $what = $this->descriptionWhat;
+
                return array_merge( parent::getPossibleErrors(), array(
-                       array( 'code' => 'params', 'info' => "{$m} cannot return corresponding page ids in unique {$what}s mode" ),
+                       array(
+                               'code' => 'params',
+                               'info' => "{$m} cannot return corresponding page ids in unique {$what}s mode"
+                       ),
                ) );
        }
 
@@ -319,20 +332,22 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                $name = $this->getModuleName();
                $what = $this->descriptionWhat;
                $targets = $this->descriptionTargets;
+
                return array(
                        "api.php?action=query&list={$name}&{$p}from=B&{$p}prop=ids|title"
-                                       => "List $targets with page ids they are from, including missing ones. Start at B",
+                               => "List $targets with page ids they are from, including missing ones. Start at B",
                        "api.php?action=query&list={$name}&{$p}unique=&{$p}from=B"
-                                       => "List unique $targets",
+                               => "List unique $targets",
                        "api.php?action=query&generator={$name}&g{$p}unique=&g{$p}from=B"
-                                       => "Gets all $targets, marking the missing ones",
+                               => "Gets all $targets, marking the missing ones",
                        "api.php?action=query&generator={$name}&g{$p}from=B"
-                                       => "Gets pages containing the {$what}s",
+                               => "Gets pages containing the {$what}s",
                );
        }
 
        public function getHelpUrls() {
                $name = ucfirst( $this->getModuleName() );
+
                return "https://www.mediawiki.org/wiki/API:{$name}";
        }
 }
index d47c7b7..6b1d5a2 100644 (file)
@@ -241,10 +241,10 @@ class ApiQueryAllMessages extends ApiQueryBase {
                        'messages' => 'Which messages to output. "*" (default) means all messages',
                        'prop' => 'Which properties to get',
                        'enableparser' => array( 'Set to enable parser, will preprocess the wikitext of message',
-                                                       'Will substitute magic words, handle templates etc.' ),
+                               'Will substitute magic words, handle templates etc.' ),
                        'nocontent' => 'If set, do not include the content of the messages in the output.',
                        'includelocal' => array( "Also include local messages, i.e. messages that don't exist in the software but do exist as a MediaWiki: page.",
-                                                       "This lists all MediaWiki: pages, so it will also list those that aren't 'really' messages such as Common.js",
+                               "This lists all MediaWiki: pages, so it will also list those that aren't 'really' messages such as Common.js",
                        ),
                        'title' => 'Page name to use as context when parsing message (for enableparser option)',
                        'args' => 'Arguments to be substituted into message',
index d95980c..363d657 100644 (file)
@@ -49,7 +49,11 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
         */
        public function executeGenerator( $resultPageSet ) {
                if ( $resultPageSet->isResolvingRedirects() ) {
-                       $this->dieUsage( 'Use "gapfilterredir=nonredirects" option instead of "redirects" when using allpages as a generator', 'params' );
+                       $this->dieUsage(
+                               'Use "gapfilterredir=nonredirects" option instead of "redirects" ' .
+                                       'when using allpages as a generator',
+                               'params'
+                       );
                }
 
                $this->run( $resultPageSet );
@@ -88,7 +92,8 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
                $this->addWhereRange( 'page_title', $dir, $from, $to );
 
                if ( isset( $params['prefix'] ) ) {
-                       $this->addWhere( 'page_title' . $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
+                       $this->addWhere( 'page_title' .
+                               $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
                }
 
                if ( is_null( $resultPageSet ) ) {
@@ -145,7 +150,6 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
                        }
 
                        $this->addOption( 'DISTINCT' );
-
                } elseif ( isset( $params['prlevel'] ) ) {
                        $this->dieUsage( 'prlevel may not be used without prtype', 'params' );
                }
@@ -186,8 +190,9 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
                $count = 0;
                $result = $this->getResult();
                foreach ( $res as $row ) {
-                       if ( ++ $count > $limit ) {
-                               // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+                       if ( ++$count > $limit ) {
+                               // We've reached the one extra which shows that there are
+                               // additional pages to be had. Stop here...
                                $this->setContinueEnumParameter( 'continue', $row->page_title );
                                break;
                        }
@@ -291,6 +296,7 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
 
        public function getParamDescription() {
                $p = $this->getModulePrefix();
+
                return array(
                        'from' => 'The page title to start enumerating from',
                        'continue' => 'When more results are available, use this to continue',
@@ -303,7 +309,8 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
                        'maxsize' => 'Limit to pages with at most this many bytes',
                        'prtype' => 'Limit to protected pages only',
                        'prlevel' => "The protection level (must be used with {$p}prtype= parameter)",
-                       'prfiltercascade' => "Filter protections based on cascadingness (ignored when {$p}prtype isn't set)",
+                       'prfiltercascade'
+                               => "Filter protections based on cascadingness (ignored when {$p}prtype isn't set)",
                        'filterlanglinks' => array(
                                'Filter based on whether a page has langlinks',
                                'Note that this may not consider langlinks added by extensions.',
@@ -334,7 +341,11 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
 
        public function getPossibleErrors() {
                return array_merge( parent::getPossibleErrors(), array(
-                       array( 'code' => 'params', 'info' => 'Use "gapfilterredir=nonredirects" option instead of "redirects" when using allpages as a generator' ),
+                       array(
+                               'code' => 'params',
+                               'info' => 'Use "gapfilterredir=nonredirects" option instead of ' .
+                                       '"redirects" when using allpages as a generator'
+                       ),
                        array( 'code' => 'params', 'info' => 'prlevel may not be used without prtype' ),
                ) );
        }
@@ -349,9 +360,9 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
                                'Using as Generator',
                                'Show info about 4 pages starting at the letter "T"',
                        ),
-                       'api.php?action=query&generator=allpages&gaplimit=2&gapfilterredir=nonredirects&gapfrom=Re&prop=revisions&rvprop=content' => array(
-                               'Show content of first 2 non-redirect pages beginning at "Re"',
-                       )
+                       'api.php?action=query&generator=allpages&gaplimit=2&' .
+                               'gapfilterredir=nonredirects&gapfrom=Re&prop=revisions&rvprop=content'
+                               => array( 'Show content of first 2 non-redirect pages beginning at "Re"' )
                );
        }
 
index 1948a51..748dbaf 100644 (file)
@@ -58,7 +58,8 @@ class ApiQueryAllUsers extends ApiQueryBase {
                        $fld_registration = isset( $prop['registration'] );
                        $fld_implicitgroups = isset( $prop['implicitgroups'] );
                } else {
-                       $fld_blockinfo = $fld_editcount = $fld_groups = $fld_registration = $fld_rights = $fld_implicitgroups = false;
+                       $fld_blockinfo = $fld_editcount = $fld_groups = $fld_registration =
+                               $fld_rights = $fld_implicitgroups = false;
                }
 
                $limit = $params['limit'];
@@ -90,6 +91,7 @@ class ApiQueryAllUsers extends ApiQueryBase {
                        // no group with the given right(s) exists, no need for a query
                        if ( !count( $groups ) ) {
                                $this->getResult()->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), '' );
+
                                return;
                        }
 
@@ -111,7 +113,7 @@ class ApiQueryAllUsers extends ApiQueryBase {
                        // Filter only users that belong to a given group
                        $this->addTables( 'user_groups', 'ug1' );
                        $this->addJoinConds( array( 'ug1' => array( 'INNER JOIN', array( 'ug1.ug_user=user_id',
-                                       'ug1.ug_group' => $params['group'] ) ) ) );
+                               'ug1.ug_group' => $params['group'] ) ) ) );
                }
 
                if ( !is_null( $params['excludegroup'] ) && count( $params['excludegroup'] ) ) {
@@ -122,12 +124,14 @@ class ApiQueryAllUsers extends ApiQueryBase {
                        if ( count( $params['excludegroup'] ) == 1 ) {
                                $exclude = array( 'ug1.ug_group' => $params['excludegroup'][0] );
                        } else {
-                               $exclude = array( $db->makeList( array( 'ug1.ug_group' => $params['excludegroup'] ), LIST_OR ) );
+                               $exclude = array( $db->makeList(
+                                       array( 'ug1.ug_group' => $params['excludegroup'] ),
+                                       LIST_OR
+                               ) );
                        }
                        $this->addJoinConds( array( 'ug1' => array( 'LEFT OUTER JOIN',
                                array_merge( array( 'ug1.ug_user=user_id' ), $exclude )
-                               )
-                       ) );
+                       ) ) );
                        $this->addWhere( 'ug1.ug_user IS NULL' );
                }
 
@@ -187,12 +191,12 @@ class ApiQueryAllUsers extends ApiQueryBase {
                $lastUser = false;
                $result = $this->getResult();
 
-               //
-               // This loop keeps track of the last entry.
-               // For each new row, if the new row is for different user then the last, the last entry is added to results.
-               // Otherwise, the group of the new row is appended to the last entry.
-               // The setContinue... is more complex because of this, and takes into account the higher sql limit
-               // to make sure all rows that belong to the same user are received.
+               // This loop keeps track of the last entry. For each new row, if the
+               // new row is for different user then the last, the last entry is added
+               // to results. Otherwise, the group of the new row is appended to the
+               // last entry. The setContinue... is more complex because of this, and
+               // takes into account the higher sql limit to make sure all rows that
+               // belong to the same user are received.
 
                foreach ( $res as $row ) {
                        $count++;
@@ -201,7 +205,7 @@ class ApiQueryAllUsers extends ApiQueryBase {
                                // Save the last pass's user data
                                if ( is_array( $lastUserData ) ) {
                                        $fit = $result->addValue( array( 'query', $this->getModuleName() ),
-                                                       null, $lastUserData );
+                                               null, $lastUserData );
 
                                        $lastUserData = null;
 
@@ -212,7 +216,8 @@ class ApiQueryAllUsers extends ApiQueryBase {
                                }
 
                                if ( $count > $limit ) {
-                                       // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+                                       // We've reached the one extra which shows that there are
+                                       // additional pages to be had. Stop here...
                                        $this->setContinueEnumParameter( 'from', $row->user_name );
                                        break;
                                }
@@ -246,10 +251,13 @@ class ApiQueryAllUsers extends ApiQueryBase {
                        }
 
                        if ( $sqlLimit == $count ) {
-                               // BUG!  database contains group name that User::getAllGroups() does not return
-                               // TODO: should handle this more gracefully
-                               ApiBase::dieDebug( __METHOD__,
-                                       'MediaWiki configuration error: the database contains more user groups than known to User::getAllGroups() function' );
+                               // @todo BUG!  database contains group name that User::getAllGroups() does not return
+                               // Should handle this more gracefully
+                               ApiBase::dieDebug(
+                                       __METHOD__,
+                                       'MediaWiki configuration error: The database contains more ' .
+                                               'user groups than known to User::getAllGroups() function'
+                               );
                        }
 
                        $lastUserObj = User::newFromId( $row->user_id );
@@ -312,6 +320,7 @@ class ApiQueryAllUsers extends ApiQueryBase {
 
        public function getAllowedParams() {
                $userGroups = User::getAllGroups();
+
                return array(
                        'from' => null,
                        'to' => null,
@@ -360,6 +369,7 @@ class ApiQueryAllUsers extends ApiQueryBase {
 
        public function getParamDescription() {
                global $wgActiveUserDays;
+
                return array(
                        'from' => 'The user name to start enumerating from',
                        'to' => 'The user name to stop enumerating at',
@@ -367,16 +377,18 @@ class ApiQueryAllUsers extends ApiQueryBase {
                        'dir' => 'Direction to sort in',
                        'group' => 'Limit users to given group name(s)',
                        'excludegroup' => 'Exclude users in given group name(s)',
-                       'rights' => 'Limit users to given right(s) (does not include rights granted by implicit or auto-promoted groups like *, user, or autoconfirmed)',
+                       'rights' => 'Limit users to given right(s) (does not include rights ' .
+                               'granted by implicit or auto-promoted groups like *, user, or autoconfirmed)',
                        'prop' => array(
                                'What pieces of information to include.',
                                ' blockinfo      - Adds the information about a current block on the user',
-                               ' groups         - Lists groups that the user is in. This uses more server resources and may return fewer results than the limit',
+                               ' groups         - Lists groups that the user is in. This uses ' .
+                                       'more server resources and may return fewer results than the limit',
                                ' implicitgroups - Lists all the groups the user is automatically in',
                                ' rights         - Lists rights that the user has',
                                ' editcount      - Adds the edit count of the user',
                                ' registration   - Adds the timestamp of when the user registered if available (may be blank)',
-                               ),
+                       ),
                        'limit' => 'How many total user names to return',
                        'witheditsonly' => 'Only list users who have made edits',
                        'activeusers' => "Only list users active in the last {$wgActiveUserDays} days(s)"
@@ -431,7 +443,10 @@ class ApiQueryAllUsers extends ApiQueryBase {
 
        public function getPossibleErrors() {
                return array_merge( parent::getPossibleErrors(), array(
-                       array( 'code' => 'group-excludegroup', 'info' => 'group and excludegroup cannot be used together' ),
+                       array(
+                               'code' => 'group-excludegroup',
+                               'info' => 'group and excludegroup cannot be used together'
+                       ),
                ) );
        }
 
index 2d1089a..bda1e03 100644 (file)
@@ -149,7 +149,8 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                if ( $this->params['filterredir'] == 'redirects' ) {
                        $this->addWhereFld( 'page_is_redirect', 1 );
                } elseif ( $this->params['filterredir'] == 'nonredirects' && !$this->redirect ) {
-                       // bug 22245 - Check for !redirect, as filtering nonredirects, when getting what links to them is contradictory
+                       // bug 22245 - Check for !redirect, as filtering nonredirects, when
+                       // getting what links to them is contradictory
                        $this->addWhereFld( 'page_is_redirect', 0 );
                }
 
@@ -193,7 +194,7 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                        $redirNs = $t->getNamespace();
                        $redirDBkey = $t->getDBkey();
                        $titleWhere[] = "{$this->bl_title} = " . $db->addQuotes( $redirDBkey ) .
-                                       ( $this->hasNS ? " AND {$this->bl_ns} = {$redirNs}" : '' );
+                               ( $this->hasNS ? " AND {$this->bl_ns} = {$redirNs}" : '' );
                        $allRedirNs[] = $redirNs;
                        $allRedirDBkey[] = $redirDBkey;
                }
@@ -209,14 +210,14 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                        $from = $this->redirID;
                        if ( $this->hasNS ) {
                                $this->addWhere( "{$this->bl_ns} $op $ns OR " .
-                                               "({$this->bl_ns} = $ns AND " .
-                                               "({$this->bl_title} $op $title OR " .
-                                               "({$this->bl_title} = $title AND " .
-                                               "{$this->bl_from} $op= $from)))" );
+                                       "({$this->bl_ns} = $ns AND " .
+                                       "({$this->bl_title} $op $title OR " .
+                                       "({$this->bl_title} = $title AND " .
+                                       "{$this->bl_from} $op= $from)))" );
                        } else {
                                $this->addWhere( "{$this->bl_title} $op $title OR " .
-                                               "({$this->bl_title} = $title AND " .
-                                               "{$this->bl_from} $op= $from)" );
+                                       "({$this->bl_title} = $title AND " .
+                                       "{$this->bl_from} $op= $from)" );
                        }
                }
                if ( $this->params['filterredir'] == 'redirects' ) {
@@ -268,8 +269,9 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                $count = 0;
 
                foreach ( $res as $row ) {
-                       if ( ++ $count > $this->params['limit'] ) {
-                               // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+                       if ( ++$count > $this->params['limit'] ) {
+                               // We've reached the one extra which shows that there are
+                               // additional pages to be had. Stop here...
                                // Continue string preserved in case the redirect query doesn't pass the limit
                                $this->continueStr = $this->getContinueStr( $row->page_id );
                                break;
@@ -294,7 +296,8 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                        $count = 0;
                        foreach ( $res as $row ) {
                                if ( ++$count > $this->params['limit'] ) {
-                                       // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+                                       // We've reached the one extra which shows that there are
+                                       // additional pages to be had. Stop here...
                                        // We need to keep the parent page of this redir in
                                        if ( $this->hasNS ) {
                                                $parentID = $this->pageMap[$row->{$this->bl_ns}][$row->{$this->bl_title}];
@@ -384,7 +387,10 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                $parentID = $this->pageMap[$ns][$row->{$this->bl_title}];
                // Put all the results in an array first
                $this->resultArr[$parentID]['redirlinks'][] = $a;
-               $this->getResult()->setIndexedTagName( $this->resultArr[$parentID]['redirlinks'], $this->bl_code );
+               $this->getResult()->setIndexedTagName(
+                       $this->resultArr[$parentID]['redirlinks'],
+                       $this->bl_code
+               );
        }
 
        protected function processContinue() {
@@ -396,7 +402,10 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
 
                // only image titles are allowed for the root in imageinfo mode
                if ( !$this->hasNS && $this->rootTitle->getNamespace() !== NS_FILE ) {
-                       $this->dieUsage( "The title for {$this->getModuleName()} query must be an image", 'bad_image_title' );
+                       $this->dieUsage(
+                               "The title for {$this->getModuleName()} query must be an image",
+                               'bad_image_title'
+                       );
                }
        }
 
@@ -428,7 +437,6 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                        return;
                }
                $this->redirID = $redirID;
-
        }
 
        protected function getContinueStr( $lastPageID ) {
@@ -481,6 +489,7 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                        return $retval;
                }
                $retval['redirect'] = false;
+
                return $retval;
        }
 
@@ -494,11 +503,17 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                );
                if ( $this->getModuleName() != 'embeddedin' ) {
                        return array_merge( $retval, array(
-                               'redirect' => 'If linking page is a redirect, find all pages that link to that redirect as well. Maximum limit is halved.',
-                               'filterredir' => "How to filter for redirects. If set to nonredirects when {$this->bl_code}redirect is enabled, this is only applied to the second level",
-                               'limit' => "How many total pages to return. If {$this->bl_code}redirect is enabled, limit applies to each level separately (which means you may get up to 2 * limit results)."
+                               'redirect' => 'If linking page is a redirect, find all pages ' .
+                                       'that link to that redirect as well. Maximum limit is halved.',
+                               'filterredir' => 'How to filter for redirects. If set to ' .
+                                       "nonredirects when {$this->bl_code}redirect is enabled, " .
+                                       'this is only applied to the second level',
+                               'limit' => 'How many total pages to return. If ' .
+                                       "{$this->bl_code}redirect is enabled, limit applies to each " .
+                                       'level separately (which means you may get up to 2 * limit results).'
                        ) );
                }
+
                return array_merge( $retval, array(
                        'filterredir' => 'How to filter for redirects',
                        'limit' => 'How many total pages to return'
@@ -533,7 +548,10 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                return array_merge( parent::getPossibleErrors(),
                        $this->getTitleOrPageIdErrorMessage(),
                        array(
-                               array( 'code' => 'bad_image_title', 'info' => "The title for {$this->getModuleName()} query must be an image" ),
+                               array(
+                                       'code' => 'bad_image_title',
+                                       'info' => "The title for {$this->getModuleName()} query must be an image"
+                               ),
                        )
                );
        }
index 8668e04..fcd3180 100644 (file)
@@ -131,8 +131,10 @@ abstract class ApiQueryBase extends ApiBase {
        protected function addFieldsIf( $value, $condition ) {
                if ( $condition ) {
                        $this->addFields( $value );
+
                        return true;
                }
+
                return false;
        }
 
@@ -168,8 +170,10 @@ abstract class ApiQueryBase extends ApiBase {
        protected function addWhereIf( $value, $condition ) {
                if ( $condition ) {
                        $this->addWhere( $value );
+
                        return true;
                }
+
                return false;
        }
 
@@ -215,7 +219,9 @@ abstract class ApiQueryBase extends ApiBase {
                if ( $sort ) {
                        $order = $field . ( $isDirNewer ? '' : ' DESC' );
                        // Append ORDER BY
-                       $optionOrderBy = isset( $this->options['ORDER BY'] ) ? (array)$this->options['ORDER BY'] : array();
+                       $optionOrderBy = isset( $this->options['ORDER BY'] )
+                               ? (array)$this->options['ORDER BY']
+                               : array();
                        $optionOrderBy[] = $order;
                        $this->addOption( 'ORDER BY', $optionOrderBy );
                }
@@ -256,16 +262,37 @@ abstract class ApiQueryBase extends ApiBase {
         * @param string $method Function the query should be attributed to.
         *  You should usually use __METHOD__ here
         * @param array $extraQuery Query data to add but not store in the object
-        *  Format is array( 'tables' => ..., 'fields' => ..., 'where' => ..., 'options' => ..., 'join_conds' => ... )
+        *  Format is array(
+        *    'tables' => ...,
+        *    'fields' => ...,
+        *    'where' => ...,
+        *    'options' => ...,
+        *    'join_conds' => ...
+        *  )
         * @return ResultWrapper
         */
        protected function select( $method, $extraQuery = array() ) {
 
-               $tables = array_merge( $this->tables, isset( $extraQuery['tables'] ) ? (array)$extraQuery['tables'] : array() );
-               $fields = array_merge( $this->fields, isset( $extraQuery['fields'] ) ? (array)$extraQuery['fields'] : array() );
-               $where = array_merge( $this->where, isset( $extraQuery['where'] ) ? (array)$extraQuery['where'] : array() );
-               $options = array_merge( $this->options, isset( $extraQuery['options'] ) ? (array)$extraQuery['options'] : array() );
-               $join_conds = array_merge( $this->join_conds, isset( $extraQuery['join_conds'] ) ? (array)$extraQuery['join_conds'] : array() );
+               $tables = array_merge(
+                       $this->tables,
+                       isset( $extraQuery['tables'] ) ? (array)$extraQuery['tables'] : array()
+               );
+               $fields = array_merge(
+                       $this->fields,
+                       isset( $extraQuery['fields'] ) ? (array)$extraQuery['fields'] : array()
+               );
+               $where = array_merge(
+                       $this->where,
+                       isset( $extraQuery['where'] ) ? (array)$extraQuery['where'] : array()
+               );
+               $options = array_merge(
+                       $this->options,
+                       isset( $extraQuery['options'] ) ? (array)$extraQuery['options'] : array()
+               );
+               $join_conds = array_merge(
+                       $this->join_conds,
+                       isset( $extraQuery['join_conds'] ) ? (array)$extraQuery['join_conds'] : array()
+               );
 
                // getDB has its own profileDBIn/Out calls
                $db = $this->getDB();
@@ -285,13 +312,20 @@ abstract class ApiQueryBase extends ApiBase {
        protected function checkRowCount() {
                $db = $this->getDB();
                $this->profileDBIn();
-               $rowcount = $db->estimateRowCount( $this->tables, $this->fields, $this->where, __METHOD__, $this->options );
+               $rowcount = $db->estimateRowCount(
+                       $this->tables,
+                       $this->fields,
+                       $this->where,
+                       __METHOD__,
+                       $this->options
+               );
                $this->profileDBOut();
 
                global $wgAPIMaxDBRows;
                if ( $rowcount > $wgAPIMaxDBRows ) {
                        return false;
                }
+
                return true;
        }
 
@@ -332,6 +366,7 @@ abstract class ApiQueryBase extends ApiBase {
        protected function addPageSubItems( $pageId, $data ) {
                $result = $this->getResult();
                $result->setIndexedTagName( $data, $this->getModulePrefix() );
+
                return $result->addValue( array( 'query', 'pages', intval( $pageId ) ),
                        $this->getModuleName(),
                        $data );
@@ -356,7 +391,8 @@ abstract class ApiQueryBase extends ApiBase {
                        return false;
                }
                $result->setIndexedTagName_internal( array( 'query', 'pages', $pageId,
-                               $this->getModuleName() ), $elemname );
+                       $this->getModuleName() ), $elemname );
+
                return true;
        }
 
@@ -382,6 +418,7 @@ abstract class ApiQueryBase extends ApiBase {
                if ( is_null( $this->mDb ) ) {
                        $this->mDb = $this->getQuery()->getDB();
                }
+
                return $this->mDb;
        }
 
@@ -419,6 +456,7 @@ abstract class ApiQueryBase extends ApiBase {
                if ( !$t ) {
                        $this->dieUsageMsg( array( 'invalidtitle', $title ) );
                }
+
                return $t->getPrefixedDBkey();
        }
 
@@ -437,6 +475,7 @@ abstract class ApiQueryBase extends ApiBase {
                if ( !$t ) {
                        $this->dieUsageMsg( array( 'invalidtitle', $key ) );
                }
+
                return $t->getPrefixedText();
        }
 
@@ -446,7 +485,7 @@ abstract class ApiQueryBase extends ApiBase {
         * @return string Title part with underscores
         */
        public function titlePartToKey( $titlePart ) {
-               return substr( $this->titleToKey( $titlePart . 'x' ), 0, - 1 );
+               return substr( $this->titleToKey( $titlePart . 'x' ), 0, -1 );
        }
 
        /**
@@ -455,7 +494,7 @@ abstract class ApiQueryBase extends ApiBase {
         * @return string Key part with underscores
         */
        public function keyPartToTitle( $keyPart ) {
-               return substr( $this->keyToTitle( $keyPart . 'x' ), 0, - 1 );
+               return substr( $this->keyToTitle( $keyPart . 'x' ), 0, -1 );
        }
 
        /**
@@ -467,10 +506,10 @@ abstract class ApiQueryBase extends ApiBase {
         */
        public function getDirectionDescription( $p = '', $extraDirText = '' ) {
                return array(
-                               "In which direction to enumerate{$extraDirText}",
-                               " newer          - List oldest first. Note: {$p}start has to be before {$p}end.",
-                               " older          - List newest first (default). Note: {$p}start has to be later than {$p}end.",
-                       );
+                       "In which direction to enumerate{$extraDirText}",
+                       " newer          - List oldest first. Note: {$p}start has to be before {$p}end.",
+                       " older          - List newest first (default). Note: {$p}start has to be later than {$p}end.",
+               );
        }
 
        /**
@@ -491,6 +530,7 @@ abstract class ApiQueryBase extends ApiBase {
                        }
 
                        $likeQuery = LinkFilter::keepOneWildcard( $likeQuery );
+
                        return 'el_index ' . $db->buildLike( $likeQuery );
                } elseif ( !is_null( $protocol ) ) {
                        return 'el_index ' . $db->buildLike( "$protocol", $db->anyString() );
@@ -507,24 +547,20 @@ abstract class ApiQueryBase extends ApiBase {
         * @return void
         */
        public function showHiddenUsersAddBlockInfo( $showBlockInfo ) {
-               $userCanViewHiddenUsers = $this->getUser()->isAllowed( 'hideuser' );
-
-               if ( $showBlockInfo || !$userCanViewHiddenUsers ) {
-                       $this->addTables( 'ipblocks' );
-                       $this->addJoinConds( array(
-                               'ipblocks' => array( 'LEFT JOIN', 'ipb_user=user_id' ),
-                       ) );
+               $this->addTables( 'ipblocks' );
+               $this->addJoinConds( array(
+                       'ipblocks' => array( 'LEFT JOIN', 'ipb_user=user_id' ),
+               ) );
 
-                       $this->addFields( 'ipb_deleted' );
+               $this->addFields( 'ipb_deleted' );
 
-                       if ( $showBlockInfo ) {
-                               $this->addFields( array( 'ipb_id', 'ipb_by', 'ipb_by_text', 'ipb_reason', 'ipb_expiry' ) );
-                       }
+               if ( $showBlockInfo ) {
+                       $this->addFields( array( 'ipb_id', 'ipb_by', 'ipb_by_text', 'ipb_reason', 'ipb_expiry' ) );
+               }
 
-                       // Don't show hidden names
-                       if ( !$userCanViewHiddenUsers ) {
-                               $this->addWhere( 'ipb_deleted = 0 OR ipb_deleted IS NULL' );
-                       }
+               // Don't show hidden names
+               if ( !$this->getUser()->isAllowed( 'hideuser' ) ) {
+                       $this->addWhere( 'ipb_deleted = 0 OR ipb_deleted IS NULL' );
                }
        }
 
@@ -553,6 +589,7 @@ abstract class ApiQueryBase extends ApiBase {
                        array( 'invalidtitle', 'title' ),
                        array( 'invalidtitle', 'key' ),
                ) );
+
                return $errors;
        }
 }
@@ -587,6 +624,7 @@ abstract class ApiQueryGeneratorBase extends ApiQueryBase {
                if ( $this->mGeneratorPageSet !== null ) {
                        return $this->mGeneratorPageSet;
                }
+
                return parent::getPageSet();
        }
 
index e3c27f5..57f76bc 100644 (file)
@@ -72,11 +72,16 @@ class ApiQueryBlocks extends ApiQueryBase {
                $this->addFieldsIf( 'ipb_reason', $fld_reason );
                $this->addFieldsIf( array( 'ipb_range_start', 'ipb_range_end' ), $fld_range );
                $this->addFieldsIf( array( 'ipb_anon_only', 'ipb_create_account', 'ipb_enable_autoblock',
-                                                                       'ipb_block_email', 'ipb_deleted', 'ipb_allow_usertalk' ),
-                                                       $fld_flags );
+                       'ipb_block_email', 'ipb_deleted', 'ipb_allow_usertalk' ),
+                       $fld_flags );
 
                $this->addOption( 'LIMIT', $params['limit'] + 1 );
-               $this->addTimestampWhereRange( 'ipb_timestamp', $params['dir'], $params['start'], $params['end'] );
+               $this->addTimestampWhereRange(
+                       'ipb_timestamp',
+                       $params['dir'],
+                       $params['start'],
+                       $params['end']
+               );
 
                $db = $this->getDB();
 
@@ -107,7 +112,10 @@ class ApiQueryBlocks extends ApiQueryBase {
                        # Check range validity, if it's a CIDR
                        list( $ip, $range ) = IP::parseCIDR( $params['ip'] );
                        if ( $ip !== false && $range !== false && $range < $cidrLimit ) {
-                               $this->dieUsage( "$type CIDR ranges broader than /$cidrLimit are not accepted", 'cidrtoobroad' );
+                               $this->dieUsage(
+                                       "$type CIDR ranges broader than /$cidrLimit are not accepted",
+                                       'cidrtoobroad'
+                               );
                        }
 
                        # Let IP::parseRange handle calculating $upper, instead of duplicating the logic here.
@@ -134,9 +142,9 @@ class ApiQueryBlocks extends ApiQueryBase {
 
                        /* Check for conflicting parameters. */
                        if ( ( isset( $show['account'] ) && isset( $show['!account'] ) )
-                                       || ( isset( $show['ip'] ) && isset( $show['!ip'] ) )
-                                       || ( isset( $show['range'] ) && isset( $show['!range'] ) )
-                                       || ( isset( $show['temp'] ) && isset( $show['!temp'] ) )
+                               || ( isset( $show['ip'] ) && isset( $show['!ip'] ) )
+                               || ( isset( $show['range'] ) && isset( $show['!range'] ) )
+                               || ( isset( $show['temp'] ) && isset( $show['!temp'] ) )
                        ) {
                                $this->dieUsageMsg( 'show' );
                        }
@@ -145,8 +153,10 @@ class ApiQueryBlocks extends ApiQueryBase {
                        $this->addWhereIf( 'ipb_user != 0', isset( $show['account'] ) );
                        $this->addWhereIf( 'ipb_user != 0 OR ipb_range_end > ipb_range_start', isset( $show['!ip'] ) );
                        $this->addWhereIf( 'ipb_user = 0 AND ipb_range_end = ipb_range_start', isset( $show['ip'] ) );
-                       $this->addWhereIf( 'ipb_expiry = ' . $db->addQuotes( $db->getInfinity() ), isset( $show['!temp'] ) );
-                       $this->addWhereIf( 'ipb_expiry != ' . $db->addQuotes( $db->getInfinity() ), isset( $show['temp'] ) );
+                       $this->addWhereIf( 'ipb_expiry = ' .
+                               $db->addQuotes( $db->getInfinity() ), isset( $show['!temp'] ) );
+                       $this->addWhereIf( 'ipb_expiry != ' .
+                               $db->addQuotes( $db->getInfinity() ), isset( $show['temp'] ) );
                        $this->addWhereIf( 'ipb_range_end = ipb_range_start', isset( $show['!range'] ) );
                        $this->addWhereIf( 'ipb_range_end > ipb_range_start', isset( $show['range'] ) );
                }
@@ -309,6 +319,7 @@ class ApiQueryBlocks extends ApiQueryBase {
        public function getParamDescription() {
                global $wgBlockCIDRLimit;
                $p = $this->getModulePrefix();
+
                return array(
                        'start' => 'The timestamp to start enumerating from',
                        'end' => 'The timestamp to stop enumerating at',
@@ -402,6 +413,7 @@ class ApiQueryBlocks extends ApiQueryBase {
 
        public function getPossibleErrors() {
                global $wgBlockCIDRLimit;
+
                return array_merge( parent::getPossibleErrors(),
                        $this->getRequireOnlyOneParameterErrorMessages( array( 'users', 'ip' ) ),
                        array(
index 5d714f5..c5b12b3 100644 (file)
@@ -98,8 +98,7 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
                if ( isset( $show['hidden'] ) && isset( $show['!hidden'] ) ) {
                        $this->dieUsageMsg( 'show' );
                }
-               if ( isset( $show['hidden'] ) || isset( $show['!hidden'] ) || isset( $prop['hidden'] ) )
-               {
+               if ( isset( $show['hidden'] ) || isset( $show['!hidden'] ) || isset( $prop['hidden'] ) ) {
                        $this->addOption( 'STRAIGHT_JOIN' );
                        $this->addTables( array( 'page', 'page_props' ) );
                        $this->addFieldsIf( 'pp_propname', isset( $prop['hidden'] ) );
@@ -126,9 +125,9 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
                        $this->addOption( 'ORDER BY', 'cl_to' . $sort );
                } else {
                        $this->addOption( 'ORDER BY', array(
-                                               'cl_from' . $sort,
-                                               'cl_to' . $sort
-                       ));
+                               'cl_from' . $sort,
+                               'cl_to' . $sort
+                       ) );
                }
 
                $res = $this->select( __METHOD__ );
@@ -221,14 +220,16 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
                return array(
                        'prop' => array(
                                'Which additional properties to get for each category',
-                               ' sortkey    - Adds the sortkey (hexadecimal string) and sortkey prefix (human-readable part) for the category',
+                               ' sortkey    - Adds the sortkey (hexadecimal string) and sortkey prefix',
+                               '              (human-readable part) for the category',
                                ' timestamp  - Adds timestamp of when the category was added',
                                ' hidden     - Tags categories that are hidden with __HIDDENCAT__',
                        ),
                        'limit' => 'How many categories to return',
                        'show' => 'Which kind of categories to show',
                        'continue' => 'When more results are available, use this to continue',
-                       'categories' => 'Only list these categories. Useful for checking whether a certain page is in a certain category',
+                       'categories' => 'Only list these categories. Useful for checking ' .
+                               'whether a certain page is in a certain category',
                        'dir' => 'The direction in which to list',
                );
        }
@@ -264,8 +265,10 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
 
        public function getExamples() {
                return array(
-                       'api.php?action=query&prop=categories&titles=Albert%20Einstein' => 'Get a list of categories [[Albert Einstein]] belongs to',
-                       'api.php?action=query&generator=categories&titles=Albert%20Einstein&prop=info' => 'Get information about all categories used in the [[Albert Einstein]]',
+                       'api.php?action=query&prop=categories&titles=Albert%20Einstein'
+                               => 'Get a list of categories [[Albert Einstein]] belongs to',
+                       'api.php?action=query&generator=categories&titles=Albert%20Einstein&prop=info'
+                               => 'Get information about all categories used in the [[Albert Einstein]]',
                );
        }
 
index a889272..574ef6e 100644 (file)
@@ -45,7 +45,7 @@ class ApiQueryCategoryInfo extends ApiQueryBase {
                $categories = $alltitles[NS_CATEGORY];
 
                $titles = $this->getPageSet()->getGoodTitles() +
-                                       $this->getPageSet()->getMissingTitles();
+                       $this->getPageSet()->getMissingTitles();
                $cattitles = array();
                foreach ( $categories as $c ) {
                        /** @var $t Title */
@@ -63,7 +63,13 @@ class ApiQueryCategoryInfo extends ApiQueryBase {
                                'pp_propname' => 'hiddencat' ) ),
                ) );
 
-               $this->addFields( array( 'cat_title', 'cat_pages', 'cat_subcats', 'cat_files', 'cat_hidden' => 'pp_propname' ) );
+               $this->addFields( array(
+                       'cat_title',
+                       'cat_pages',
+                       'cat_subcats',
+                       'cat_files',
+                       'cat_hidden' => 'pp_propname'
+               ) );
                $this->addWhere( array( 'cat_title' => $cattitles ) );
 
                if ( !is_null( $params['continue'] ) ) {
index 704d108..271558b 100644 (file)
@@ -180,9 +180,11 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                $result = $this->getResult();
                $count = 0;
                foreach ( $rows as $row ) {
-                       if ( ++ $count > $limit ) {
-                               // We've reached the one extra which shows that there are additional pages to be had. Stop here...
-                               // TODO: Security issue - if the user has no right to view next title, it will still be shown
+                       if ( ++$count > $limit ) {
+                               // We've reached the one extra which shows that there are
+                               // additional pages to be had. Stop here...
+                               // @todo Security issue - if the user has no right to view next
+                               // title, it will still be shown
                                if ( $params['sort'] == 'timestamp' ) {
                                        $this->setContinueEnumParameter( 'start', wfTimestamp( TS_ISO_8601, $row->cl_timestamp ) );
                                } else {
@@ -224,7 +226,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                                        $vals['timestamp'] = wfTimestamp( TS_ISO_8601, $row->cl_timestamp );
                                }
                                $fit = $result->addValue( array( 'query', $this->getModuleName() ),
-                                               null, $vals );
+                                       null, $vals );
                                if ( !$fit ) {
                                        if ( $params['sort'] == 'timestamp' ) {
                                                $this->setContinueEnumParameter( 'start', wfTimestamp( TS_ISO_8601, $row->cl_timestamp ) );
@@ -324,14 +326,16 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                global $wgMiserMode;
                $p = $this->getModulePrefix();
                $desc = array(
-                       'title' => "Which category to enumerate (required). Must include Category: prefix. Cannot be used together with {$p}pageid",
+                       'title' => "Which category to enumerate (required). Must include ' .
+                               'Category: prefix. Cannot be used together with {$p}pageid",
                        'pageid' => "Page ID of the category to enumerate. Cannot be used together with {$p}title",
                        'prop' => array(
                                'What pieces of information to include',
                                ' ids           - Adds the page ID',
                                ' title         - Adds the title and namespace ID of the page',
                                ' sortkey       - Adds the sortkey used for sorting in the category (hexadecimal string)',
-                               ' sortkeyprefix - Adds the sortkey prefix used for sorting in the category (human-readable part of the sortkey)',
+                               ' sortkeyprefix - Adds the sortkey prefix used for sorting in the ' .
+                                       'category (human-readable part of the sortkey)',
                                ' type          - Adds the type that the page has been categorised as (page, subcat or file)',
                                ' timestamp     - Adds the timestamp of when the page was included',
                        ),
@@ -341,10 +345,15 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                        'dir' => 'In which direction to sort',
                        'start' => "Timestamp to start listing from. Can only be used with {$p}sort=timestamp",
                        'end' => "Timestamp to end listing at. Can only be used with {$p}sort=timestamp",
-                       'startsortkey' => "Sortkey to start listing from. Must be given in binary format. Can only be used with {$p}sort=sortkey",
-                       'endsortkey' => "Sortkey to end listing at. Must be given in binary format. Can only be used with {$p}sort=sortkey",
-                       'startsortkeyprefix' => "Sortkey prefix to start listing from. Can only be used with {$p}sort=sortkey. Overrides {$p}startsortkey",
-                       'endsortkeyprefix' => "Sortkey prefix to end listing BEFORE (not at, if this value occurs it will not be included!). Can only be used with {$p}sort=sortkey. Overrides {$p}endsortkey",
+                       'startsortkey' => "Sortkey to start listing from. Must be given in ' .
+                               'binary format. Can only be used with {$p}sort=sortkey",
+                       'endsortkey' => "Sortkey to end listing at. Must be given in binary ' .
+                               'format. Can only be used with {$p}sort=sortkey",
+                       'startsortkeyprefix' => "Sortkey prefix to start listing from. Can ' .
+                               'only be used with {$p}sort=sortkey. Overrides {$p}startsortkey",
+                       'endsortkeyprefix' => "Sortkey prefix to end listing BEFORE (not at, ' .
+                               'if this value occurs it will not be included!). Can only be used with ' .
+                               '{$p}sort=sortkey. Overrides {$p}endsortkey",
                        'continue' => 'For large categories, give the value returned from previous query',
                        'limit' => 'The maximum number of pages to return.',
                );
@@ -357,6 +366,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                                "Note that you can use {$p}type=subcat or {$p}type=file instead of {$p}namespace=14 or 6.",
                        );
                }
+
                return $desc;
        }
 
@@ -405,8 +415,10 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
 
        public function getExamples() {
                return array(
-                       'api.php?action=query&list=categorymembers&cmtitle=Category:Physics' => 'Get first 10 pages in [[Category:Physics]]',
-                       'api.php?action=query&generator=categorymembers&gcmtitle=Category:Physics&prop=info' => 'Get page info about first 10 pages in [[Category:Physics]]',
+                       'api.php?action=query&list=categorymembers&cmtitle=Category:Physics'
+                               => 'Get first 10 pages in [[Category:Physics]]',
+                       'api.php?action=query&generator=categorymembers&gcmtitle=Category:Physics&prop=info'
+                               => 'Get page info about first 10 pages in [[Category:Physics]]',
                );
        }
 
index 8273313..35e78ac 100644 (file)
@@ -39,7 +39,10 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                $user = $this->getUser();
                // Before doing anything at all, let's check permissions
                if ( !$user->isAllowed( 'deletedhistory' ) ) {
-                       $this->dieUsage( 'You don\'t have permission to view deleted revision information', 'permissiondenied' );
+                       $this->dieUsage(
+                               'You don\'t have permission to view deleted revision information',
+                               'permissiondenied'
+                       );
                }
 
                $db = $this->getDB();
@@ -116,7 +119,10 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
 
                        // This also means stricter restrictions
                        if ( !$user->isAllowed( 'undelete' ) ) {
-                               $this->dieUsage( 'You don\'t have permission to view deleted revision content', 'permissiondenied' );
+                               $this->dieUsage(
+                                       'You don\'t have permission to view deleted revision content',
+                                       'permissiondenied'
+                               );
                        }
                }
                // Check limits
@@ -152,7 +158,8 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                        $this->addWhereRange( 'ar_title', $dir, $from, $to );
 
                        if ( isset( $params['prefix'] ) ) {
-                               $this->addWhere( 'ar_title' . $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
+                               $this->addWhere( 'ar_title' .
+                                       $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
                        }
                }
 
@@ -172,14 +179,17 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                        $ts = $db->addQuotes( $db->timestamp( $cont[2] ) );
                        $op = ( $dir == 'newer' ? '>' : '<' );
                        $this->addWhere( "ar_namespace $op $ns OR " .
-                                       "(ar_namespace = $ns AND " .
-                                       "(ar_title $op $title OR " .
-                                       "(ar_title = $title AND " .
-                                       "ar_timestamp $op= $ts)))" );
+                               "(ar_namespace = $ns AND " .
+                               "(ar_title $op $title OR " .
+                               "(ar_title = $title AND " .
+                               "ar_timestamp $op= $ts)))" );
                }
 
                $this->addOption( 'LIMIT', $limit + 1 );
-               $this->addOption( 'USE INDEX', array( 'archive' => ( $mode == 'user' ? 'usertext_timestamp' : 'name_title_timestamp' ) ) );
+               $this->addOption(
+                       'USE INDEX',
+                       array( 'archive' => ( $mode == 'user' ? 'usertext_timestamp' : 'name_title_timestamp' ) )
+               );
                if ( $mode == 'all' ) {
                        if ( $params['unique'] ) {
                                $this->addOption( 'GROUP BY', 'ar_title' );
@@ -188,7 +198,7 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                                $this->addOption( 'ORDER BY', array(
                                        'ar_title' . $sort,
                                        'ar_timestamp' . $sort
-                               ));
+                               ) );
                        }
                } else {
                        if ( $mode == 'revs' ) {
@@ -385,12 +395,14 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
 
        public function getDescription() {
                $p = $this->getModulePrefix();
+
                return array(
                        'List deleted revisions.',
                        'Operates in three modes:',
                        ' 1) List deleted revisions for the given title(s), sorted by timestamp',
                        ' 2) List deleted contributions for the given user, sorted by timestamp (no titles specified)',
-                       " 3) List all deleted revisions in the given namespace, sorted by title and timestamp (no titles specified, {$p}user not set)",
+                       " 3) List all deleted revisions in the given namespace, sorted by title and timestamp',
+                       '    (no titles specified, {$p}user not set)",
                        'Certain parameters only apply to some modes and are ignored in others.',
                        'For instance, a parameter marked (1) only applies to mode 1 and is ignored in modes 2 and 3',
                );
@@ -398,12 +410,22 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
 
        public function getPossibleErrors() {
                return array_merge( parent::getPossibleErrors(), array(
-                       array( 'code' => 'permissiondenied', 'info' => 'You don\'t have permission to view deleted revision information' ),
-                       array( 'code' => 'badparams', 'info' => 'user and excludeuser cannot be used together' ),
-                       array( 'code' => 'permissiondenied', 'info' => 'You don\'t have permission to view deleted revision content' ),
+                       array(
+                               'code' => 'permissiondenied',
+                               'info' => 'You don\'t have permission to view deleted revision information'
+                       ),
+                       array( 'code' => 'badparams', 'info' => 'user and excludeuser cannot be used together'
+                       ),
+                       array(
+                               'code' => 'permissiondenied',
+                               'info' => 'You don\'t have permission to view deleted revision content'
+                       ),
                        array( 'code' => 'badparams', 'info' => "The 'from' parameter cannot be used in modes 1 or 2" ),
                        array( 'code' => 'badparams', 'info' => "The 'to' parameter cannot be used in modes 1 or 2" ),
-                       array( 'code' => 'badparams', 'info' => "The 'prefix' parameter cannot be used in modes 1 or 2" ),
+                       array(
+                               'code' => 'badparams',
+                               'info' => "The 'prefix' parameter cannot be used in modes 1 or 2"
+                       ),
                        array( 'code' => 'badparams', 'info' => "The 'start' parameter cannot be used in mode 3" ),
                        array( 'code' => 'badparams', 'info' => "The 'end' parameter cannot be used in mode 3" ),
                ) );
@@ -411,7 +433,8 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
 
        public function getExamples() {
                return array(
-                       'api.php?action=query&list=deletedrevs&titles=Main%20Page|Talk:Main%20Page&drprop=user|comment|content'
+                       'api.php?action=query&list=deletedrevs&titles=Main%20Page|Talk:Main%20Page&' .
+                               'drprop=user|comment|content'
                                => 'List the last deleted revisions of Main Page and Talk:Main Page, with content (mode 1)',
                        'api.php?action=query&list=deletedrevs&druser=Bob&drlimit=50'
                                => 'List the last 50 deleted contributions by Bob (mode 2)',
index 0311fa7..1854694 100644 (file)
@@ -95,7 +95,8 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
                        $sha1s[$file->getName()] = $file->getSha1();
                }
 
-               // find all files with the hashes, result format is: array( hash => array( dup1, dup2 ), hash1 => ... )
+               // find all files with the hashes, result format is:
+               // array( hash => array( dup1, dup2 ), hash1 => ... )
                $filesToFindBySha1s = array_unique( array_values( $sha1s ) );
                if ( $params['localonly'] ) {
                        $filesBySha1s = RepoGroup::singleton()->getLocalRepo()->findBySha1s( $filesToFindBySha1s );
index 456e87b..d220817 100644 (file)
@@ -101,8 +101,9 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
                $result = $this->getResult();
                $count = 0;
                foreach ( $res as $row ) {
-                       if ( ++ $count > $limit ) {
-                               // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+                       if ( ++$count > $limit ) {
+                               // We've reached the one extra which shows that there are
+                               // additional pages to be had. Stop here...
                                $this->setContinueEnumParameter( 'offset', $offset + $limit );
                                break;
                        }
@@ -140,7 +141,7 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
 
                if ( is_null( $resultPageSet ) ) {
                        $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ),
-                                       $this->getModulePrefix() );
+                               $this->getModulePrefix() );
                }
        }
 
@@ -186,6 +187,7 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
                                $protocols[] = substr( $p, 0, strpos( $p, ':' ) );
                        }
                }
+
                return $protocols;
        }
 
@@ -221,7 +223,8 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
                                "Protocol of the URL. If empty and {$p}query set, the protocol is http.",
                                "Leave both this and {$p}query empty to list all external links"
                        ),
-                       'query' => 'Search string without protocol. See [[Special:LinkSearch]]. Leave empty to list all external links',
+                       'query' => 'Search string without protocol. See [[Special:LinkSearch]]. ' .
+                               'Leave empty to list all external links',
                        'namespace' => 'The page namespace(s) to enumerate.',
                        'limit' => 'How many pages to return.',
                        'expandurl' => 'Expand protocol-relative URLs with the canonical protocol',
index 583ef69..5803ea7 100644 (file)
@@ -127,6 +127,7 @@ class ApiQueryExternalLinks extends ApiQueryBase {
 
        public function getParamDescription() {
                $p = $this->getModulePrefix();
+
                return array(
                        'limit' => 'How many links to return',
                        'offset' => 'When more results are available, use this to continue',
@@ -134,7 +135,8 @@ class ApiQueryExternalLinks extends ApiQueryBase {
                                "Protocol of the URL. If empty and {$p}query set, the protocol is http.",
                                "Leave both this and {$p}query empty to list all external links"
                        ),
-                       'query' => 'Search string without protocol. Useful for checking whether a certain page contains a certain external url',
+                       'query' => 'Search string without protocol. Useful for checking ' .
+                               'whether a certain page contains a certain external url',
                        'expandurl' => 'Expand protocol-relative URLs with the canonical protocol',
                );
        }
@@ -159,7 +161,8 @@ class ApiQueryExternalLinks extends ApiQueryBase {
 
        public function getExamples() {
                return array(
-                       'api.php?action=query&prop=extlinks&titles=Main%20Page' => 'Get a list of external links on the [[Main Page]]',
+                       'api.php?action=query&prop=extlinks&titles=Main%20Page'
+                               => 'Get a list of external links on the [[Main Page]]',
                );
        }
 
index 3a35353..148c4dd 100644 (file)
@@ -86,16 +86,19 @@ class ApiQueryFileRepoInfo extends ApiQueryBase {
                        $props = array_merge( $props, array_keys( $repo->getInfo() ) );
                } );
 
-               return array_values( array_unique( array_merge( $props, array_keys( $repoGroup->localRepo->getInfo() ) ) ) );
+               return array_values( array_unique( array_merge(
+                       $props,
+                       array_keys( $repoGroup->localRepo->getInfo() )
+               ) ) );
        }
 
        public function getParamDescription() {
-               $p = $this->getModulePrefix();
                return array(
                        'prop' => array(
                                'Which repository properties to get (there may be more available on some wikis):',
                                ' apiurl      - URL to the repository API - helpful for getting image info from the host.',
-                               ' name        - The key of the repository - used in e.g. $wgForeignFileRepos and imageinfo return values.',
+                               ' name        - The key of the repository - used in e.g. ' .
+                                       '$wgForeignFileRepos and imageinfo return values.',
                                ' displayname - The human-readable name of the repository wiki.',
                                ' rooturl     - Root URL for image paths.',
                                ' local       - Whether that repository is the local one or not.',
index f53cd38..f8f4558 100644 (file)
@@ -41,7 +41,10 @@ class ApiQueryFilearchive extends ApiQueryBase {
                $user = $this->getUser();
                // Before doing anything at all, let's check permissions
                if ( !$user->isAllowed( 'deletedhistory' ) ) {
-                       $this->dieUsage( 'You don\'t have permission to view deleted file information', 'permissiondenied' );
+                       $this->dieUsage(
+                               'You don\'t have permission to view deleted file information',
+                               'permissiondenied'
+                       );
                }
 
                $db = $this->getDB();
@@ -92,7 +95,8 @@ class ApiQueryFilearchive extends ApiQueryBase {
                $to = ( is_null( $params['to'] ) ? null : $this->titlePartToKey( $params['to'] ) );
                $this->addWhereRange( 'fa_name', $dir, $from, $to );
                if ( isset( $params['prefix'] ) ) {
-                       $this->addWhere( 'fa_name' . $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
+                       $this->addWhere( 'fa_name' .
+                               $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
                }
 
                $sha1Set = isset( $params['sha1'] );
@@ -137,7 +141,8 @@ class ApiQueryFilearchive extends ApiQueryBase {
                $result = $this->getResult();
                foreach ( $res as $row ) {
                        if ( ++$count > $limit ) {
-                               // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+                               // We've reached the one extra which shows that there are
+                               // additional pages to be had. Stop here...
                                $this->setContinueEnumParameter( 'continue', $row->fa_name );
                                break;
                        }
@@ -180,8 +185,8 @@ class ApiQueryFilearchive extends ApiQueryBase {
                        }
                        if ( $fld_metadata ) {
                                $file['metadata'] = $row->fa_metadata
-                                               ? ApiQueryImageInfo::processMetaData( unserialize( $row->fa_metadata ), $result )
-                                               : null;
+                                       ? ApiQueryImageInfo::processMetaData( unserialize( $row->fa_metadata ), $result )
+                                       : null;
                        }
                        if ( $fld_bitdepth ) {
                                $file['bitdepth'] = $row->fa_bits;
@@ -275,7 +280,8 @@ class ApiQueryFilearchive extends ApiQueryBase {
                                ' sha1              - Adds SHA-1 hash for the image',
                                ' timestamp         - Adds timestamp for the uploaded version',
                                ' user              - Adds user who uploaded the image version',
-                               ' size              - Adds the size of the image in bytes and the height, width and page count (if applicable)',
+                               ' size              - Adds the size of the image in bytes and the height, ' .
+                                       'width and page count (if applicable)',
                                ' dimensions        - Alias for size',
                                ' description       - Adds description the image version',
                                ' parseddescription - Parse the description on the version',
@@ -358,10 +364,16 @@ class ApiQueryFilearchive extends ApiQueryBase {
 
        public function getPossibleErrors() {
                return array_merge( parent::getPossibleErrors(), array(
-                       array( 'code' => 'permissiondenied', 'info' => 'You don\'t have permission to view deleted file information' ),
+                       array(
+                               'code' => 'permissiondenied',
+                               'info' => 'You don\'t have permission to view deleted file information'
+                       ),
                        array( 'code' => 'hashsearchdisabled', 'info' => 'Search by hash disabled in Miser Mode' ),
-                       array( 'code' => 'invalidsha1hash', 'info' => 'The SHA1 hash provided is not valid' ),
-                       array( 'code' => 'invalidsha1base36hash', 'info' => 'The SHA1Base36 hash provided is not valid' ),
+                       array( 'code' => 'invalidsha1hash', 'info' => 'The SHA-1 hash provided is not valid' ),
+                       array(
+                               'code' => 'invalidsha1base36hash',
+                               'info' => 'The SHA1Base36 hash provided is not valid'
+                       ),
                ) );
        }
 
index ebae3e7..03a72a6 100644 (file)
@@ -92,14 +92,14 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
                                $this->addOption( 'ORDER BY', array(
                                        'iwl_title' . $sort,
                                        'iwl_from' . $sort
-                               ));
+                               ) );
                        }
                } else {
                        $this->addOption( 'ORDER BY', array(
                                'iwl_prefix' . $sort,
                                'iwl_title' . $sort,
                                'iwl_from' . $sort
-                       ));
+                       ) );
                }
 
                $this->addOption( 'LIMIT', $params['limit'] + 1 );
@@ -111,10 +111,15 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
                $count = 0;
                $result = $this->getResult();
                foreach ( $res as $row ) {
-                       if ( ++ $count > $params['limit'] ) {
-                               // We've reached the one extra which shows that there are additional pages to be had. Stop here...
-                               // Continue string preserved in case the redirect query doesn't pass the limit
-                               $this->setContinueEnumParameter( 'continue', "{$row->iwl_prefix}|{$row->iwl_title}|{$row->iwl_from}" );
+                       if ( ++$count > $params['limit'] ) {
+                               // We've reached the one extra which shows that there are
+                               // additional pages to be had. Stop here...
+                               // Continue string preserved in case the redirect query doesn't
+                               // pass the limit
+                               $this->setContinueEnumParameter(
+                                       'continue',
+                                       "{$row->iwl_prefix}|{$row->iwl_title}|{$row->iwl_from}"
+                               );
                                break;
                        }
 
@@ -140,7 +145,10 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
 
                                $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $entry );
                                if ( !$fit ) {
-                                       $this->setContinueEnumParameter( 'continue', "{$row->iwl_prefix}|{$row->iwl_title}|{$row->iwl_from}" );
+                                       $this->setContinueEnumParameter(
+                                               'continue',
+                                               "{$row->iwl_prefix}|{$row->iwl_title}|{$row->iwl_from}"
+                                       );
                                        break;
                                }
                        }
index be53931..be64d36 100644 (file)
@@ -81,9 +81,9 @@ class ApiQueryIWLinks extends ApiQueryBase {
                                $this->addOption( 'ORDER BY', 'iwl_from' . $sort );
                        } else {
                                $this->addOption( 'ORDER BY', array(
-                                               'iwl_from' . $sort,
-                                               'iwl_title' . $sort
-                               ));
+                                       'iwl_from' . $sort,
+                                       'iwl_title' . $sort
+                               ) );
                        }
                } else {
                        // Don't order by iwl_from if it's constant in the WHERE clause
@@ -91,10 +91,10 @@ class ApiQueryIWLinks extends ApiQueryBase {
                                $this->addOption( 'ORDER BY', 'iwl_prefix' . $sort );
                        } else {
                                $this->addOption( 'ORDER BY', array(
-                                               'iwl_from' . $sort,
-                                               'iwl_prefix' . $sort,
-                                               'iwl_title' . $sort
-                               ));
+                                       'iwl_from' . $sort,
+                                       'iwl_prefix' . $sort,
+                                       'iwl_title' . $sort
+                               ) );
                        }
                }
 
@@ -106,7 +106,10 @@ class ApiQueryIWLinks extends ApiQueryBase {
                        if ( ++$count > $params['limit'] ) {
                                // We've reached the one extra which shows that
                                // there are additional pages to be had. Stop here...
-                               $this->setContinueEnumParameter( 'continue', "{$row->iwl_from}|{$row->iwl_prefix}|{$row->iwl_title}" );
+                               $this->setContinueEnumParameter(
+                                       'continue',
+                                       "{$row->iwl_from}|{$row->iwl_prefix}|{$row->iwl_title}"
+                               );
                                break;
                        }
                        $entry = array( 'prefix' => $row->iwl_prefix );
@@ -121,7 +124,10 @@ class ApiQueryIWLinks extends ApiQueryBase {
                        ApiResult::setContent( $entry, $row->iwl_title );
                        $fit = $this->addPageSubItem( $row->iwl_from, $entry );
                        if ( !$fit ) {
-                               $this->setContinueEnumParameter( 'continue', "{$row->iwl_from}|{$row->iwl_prefix}|{$row->iwl_title}" );
+                               $this->setContinueEnumParameter(
+                                       'continue',
+                                       "{$row->iwl_from}|{$row->iwl_prefix}|{$row->iwl_title}"
+                               );
                                break;
                        }
                }
@@ -190,7 +196,8 @@ class ApiQueryIWLinks extends ApiQueryBase {
 
        public function getExamples() {
                return array(
-                       'api.php?action=query&prop=iwlinks&titles=Main%20Page' => 'Get interwiki links from the [[Main Page]]',
+                       'api.php?action=query&prop=iwlinks&titles=Main%20Page'
+                               => 'Get interwiki links from the [[Main Page]]',
                );
        }
 
index 81c9faf..86cba83 100644 (file)
@@ -34,8 +34,9 @@ class ApiQueryImageInfo extends ApiQueryBase {
        private static $transformCount = 0;
 
        public function __construct( $query, $moduleName, $prefix = 'ii' ) {
-               // We allow a subclass to override the prefix, to create a related API module.
-               // Some other parts of MediaWiki construct this with a null $prefix, which used to be ignored when this only took two arguments
+               // We allow a subclass to override the prefix, to create a related API
+               // module. Some other parts of MediaWiki construct this with a null
+               // $prefix, which used to be ignored when this only took two arguments
                if ( is_null( $prefix ) ) {
                        $prefix = 'ii';
                }
@@ -53,6 +54,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
                        'version' => $params['metadataversion'],
                        'language' => $params['extmetadatalanguage'],
                        'multilang' => $params['extmetadatamultilang'],
+                       'extmetadatafilter' => $params['extmetadatafilter'],
                );
 
                $pageIds = $this->getPageSet()->getAllTitlesByNamespace();
@@ -175,7 +177,8 @@ class ApiQueryImageInfo extends ApiQueryBase {
                                /** @var $oldie File */
                                foreach ( $oldies as $oldie ) {
                                        if ( ++$count > $params['limit'] ) {
-                                               // We've reached the extra one which shows that there are additional pages to be had. Stop here...
+                                               // We've reached the extra one which shows that there are
+                                               // additional pages to be had. Stop here...
                                                // Only set a query-continue if there was only one title
                                                if ( count( $pageIds[NS_FILE] ) == 1 ) {
                                                        $this->setContinueEnumParameter( 'start',
@@ -267,6 +270,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
                if ( !$h ) {
                        $this->setWarning( 'Could not create thumbnail because ' .
                                $image->getName() . ' does not have an associated image handler' );
+
                        return $thumbParams;
                }
 
@@ -278,13 +282,15 @@ class ApiQueryImageInfo extends ApiQueryBase {
                        // handlers.
                        $this->setWarning( "Could not parse {$p}urlparam for " . $image->getName()
                                . '. Using only width and height' );
+
                        return $thumbParams;
                }
 
                if ( isset( $paramList['width'] ) ) {
                        if ( intval( $paramList['width'] ) != intval( $thumbParams['width'] ) ) {
                                $this->setWarning( "Ignoring width value set in {$p}urlparam ({$paramList['width']}) "
-                                       . "in favor of width value derived from {$p}urlwidth/{$p}urlheight ({$thumbParams['width']})" );
+                                       . "in favor of width value derived from {$p}urlwidth/{$p}urlheight "
+                                       . "({$thumbParams['width']})" );
                        }
                }
 
@@ -304,7 +310,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
         * @param array $prop of properties to get (in the keys)
         * @param $result ApiResult object
         * @param array $thumbParams containing 'width' and 'height' items, or null
-        * @param string|array $metadataOpts Options for metadata fetching.
+        * @param array|bool|string $metadataOpts Options for metadata fetching.
         *   This is an array consisting of the keys:
         *    'version': The metadata version for the metadata option
         *    'language': The language for extmetadata property
@@ -319,6 +325,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
                                'version' => $metadataOpts ?: 'latest',
                                'language' => $wgContLang,
                                'multilang' => false,
+                               'extmetadatafilter' => array(),
                        );
                }
                $version = $metadataOpts['version'];
@@ -389,7 +396,8 @@ class ApiQueryImageInfo extends ApiQueryBase {
                $uploadwarning = isset( $prop['uploadwarning'] );
 
                if ( ( $url || $sha1 || $meta || $mime || $mediatype || $archive || $bitdepth )
-                               && $file->isDeleted( File::DELETED_FILE ) ) {
+                       && $file->isDeleted( File::DELETED_FILE )
+               ) {
                        $vals['filehidden'] = '';
 
                        //Early return, tidier than indenting all following things one level
@@ -448,6 +456,11 @@ class ApiQueryImageInfo extends ApiQueryBase {
                        $format->setSingleLanguage( !$metadataOpts['multilang'] );
                        $format->getContext()->setLanguage( $metadataOpts['language'] );
                        $extmetaArray = $format->fetchExtendedMetadata( $file );
+                       if ( $metadataOpts['extmetadatafilter'] ) {
+                               $extmetaArray = array_intersect_key(
+                                       $extmetaArray, array_flip( $metadataOpts['extmetadatafilter'] )
+                               );
+                       }
                        $vals['extmetadata'] = $extmetaArray;
                }
 
@@ -505,6 +518,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
                        }
                }
                $result->setIndexedTagName( $retval, 'metadata' );
+
                return $retval;
        }
 
@@ -521,11 +535,13 @@ class ApiQueryImageInfo extends ApiQueryBase {
                if ( $start === null ) {
                        $start = $img->getTimestamp();
                }
+
                return $img->getOriginalTitle()->getDBkey() . '|' . $start;
        }
 
        public function getAllowedParams() {
                global $wgContLang;
+
                return array(
                        'prop' => array(
                                ApiBase::PARAM_ISMULTI => true,
@@ -565,6 +581,10 @@ class ApiQueryImageInfo extends ApiQueryBase {
                                ApiBase::PARAM_TYPE => 'boolean',
                                ApiBase::PARAM_DFLT => false,
                        ),
+                       'extmetadatafilter' => array(
+                               ApiBase::PARAM_TYPE => 'string',
+                               ApiBase::PARAM_ISMULTI => true,
+                       ),
                        'urlparam' => array(
                                ApiBase::PARAM_DFLT => '',
                                ApiBase::PARAM_TYPE => 'string',
@@ -599,18 +619,22 @@ class ApiQueryImageInfo extends ApiQueryBase {
                        'comment' =>        ' comment       - Comment on the version',
                        'parsedcomment' =>  ' parsedcomment - Parse the comment on the version',
                        'url' =>            ' url           - Gives URL to the image and the description page',
-                       'size' =>           ' size          - Adds the size of the image in bytes and the height, width and page count (if applicable)',
-                       'dimensions' =>     ' dimensions    - Alias for size', // For backwards compatibility with Allimages
+                       'size' =>           ' size          - Adds the size of the image in bytes ' .
+                               'and the height, width and page count (if applicable)',
+                       'dimensions' =>     ' dimensions    - Alias for size', // B/C with Allimages
                        'sha1' =>           ' sha1          - Adds SHA-1 hash for the image',
                        'mime' =>           ' mime          - Adds MIME type of the image',
                        'thumbmime' =>      ' thumbmime     - Adds MIME type of the image thumbnail' .
                                ' (requires url and param ' . $modulePrefix . 'urlwidth)',
                        'mediatype' =>      ' mediatype     - Adds the media type of the image',
                        'metadata' =>       ' metadata      - Lists Exif metadata for the version of the image',
-                       'extmetadata' =>    ' extmetadata   - Lists formatted metadata combined from multiple sources. Results are HTML formatted.',
-                       'archivename' =>    ' archivename   - Adds the file name of the archive version for non-latest versions',
+                       'extmetadata' =>    ' extmetadata   - Lists formatted metadata combined ' .
+                               'from multiple sources. Results are HTML formatted.',
+                       'archivename' =>    ' archivename   - Adds the file name of the archive ' .
+                               'version for non-latest versions',
                        'bitdepth' =>       ' bitdepth      - Adds the bit depth of the version',
-                       'uploadwarning' =>  ' uploadwarning - Used by the Special:Upload page to get information about an existing file. Not intended for use outside MediaWiki core',
+                       'uploadwarning' =>  ' uploadwarning - Used by the Special:Upload page to ' .
+                               'get information about an existing file. Not intended for use outside MediaWiki core',
                );
        }
 
@@ -634,24 +658,34 @@ class ApiQueryImageInfo extends ApiQueryBase {
         */
        public function getParamDescription() {
                $p = $this->getModulePrefix();
+
                return array(
                        'prop' => self::getPropertyDescriptions( array(), $p ),
-                       'urlwidth' => array( "If {$p}prop=url is set, a URL to an image scaled to this width will be returned.",
+                       'urlwidth' => array(
+                               "If {$p}prop=url is set, a URL to an image scaled to this width will be returned.",
                                'For performance reasons if this option is used, ' .
-                                       'no more than ' . self::TRANSFORM_LIMIT . ' scaled images will be returned.' ),
+                                       'no more than ' . self::TRANSFORM_LIMIT . ' scaled images will be returned.'
+                       ),
                        'urlheight' => "Similar to {$p}urlwidth.",
                        'urlparam' => array( "A handler specific parameter string. For example, pdf's ",
                                "might use 'page15-100px'. {$p}urlwidth must be used and be consistent with {$p}urlparam" ),
                        'limit' => 'How many image revisions to return per image',
                        'start' => 'Timestamp to start listing from',
                        'end' => 'Timestamp to stop listing at',
-                       'metadataversion' => array( "Version of metadata to use. if 'latest' is specified, use latest version.",
-                                               "Defaults to '1' for backwards compatibility" ),
-                       'extmetadatalanguage' => array( 'What language to fetch extmetadata in. This affects both which',
-                                               'translation to fetch, if multiple are available, as well as how things',
-                                               'like numbers and various values are formatted.' ),
-                       'extmetadatamultilang' => 'If translations for extmetadata property are available, fetch all of them.',
-                       'continue' => 'If the query response includes a continue value, use it here to get another page of results',
+                       'metadataversion'
+                               => array( "Version of metadata to use. if 'latest' is specified, use latest version.",
+                               "Defaults to '1' for backwards compatibility" ),
+                       'extmetadatalanguage' => array(
+                               'What language to fetch extmetadata in. This affects both which',
+                               'translation to fetch, if multiple are available, as well as how things',
+                               'like numbers and various values are formatted.'
+                       ),
+                       'extmetadatamultilang'
+                               =>'If translations for extmetadata property are available, fetch all of them.',
+                       'extmetadatafilter'
+                               => "If specified and non-empty, only these keys will be returned for {$p}prop=extmetadata",
+                       'continue' => 'If the query response includes a continue value, ' .
+                               'use it here to get another page of results',
                        'localonly' => 'Look only for files in the local repository',
                );
        }
@@ -773,6 +807,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
                                )
                        ),
                );
+
                return array_diff_key( $props, array_flip( $filter ) );
        }
 
@@ -786,6 +821,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
 
        public function getPossibleErrors() {
                $p = $this->getModulePrefix();
+
                return array_merge( parent::getPossibleErrors(), array(
                        array( 'code' => "{$p}urlwidth", 'info' => "{$p}urlheight cannot be used without {$p}urlwidth" ),
                        array( 'code' => 'urlparam', 'info' => "Invalid value for {$p}urlparam" ),
@@ -796,7 +832,8 @@ class ApiQueryImageInfo extends ApiQueryBase {
        public function getExamples() {
                return array(
                        'api.php?action=query&titles=File:Albert%20Einstein%20Head.jpg&prop=imageinfo',
-                       'api.php?action=query&titles=File:Test.jpg&prop=imageinfo&iilimit=50&iiend=20071231235959&iiprop=timestamp|user|url',
+                       'api.php?action=query&titles=File:Test.jpg&prop=imageinfo&iilimit=50&' .
+                               'iiend=20071231235959&iiprop=timestamp|user|url',
                );
        }
 
index f2bf0a7..a32fb9e 100644 (file)
@@ -79,9 +79,9 @@ class ApiQueryImages extends ApiQueryGeneratorBase {
                        $this->addOption( 'ORDER BY', 'il_to' . $sort );
                } else {
                        $this->addOption( 'ORDER BY', array(
-                                               'il_from' . $sort,
-                                               'il_to' . $sort
-                       ));
+                               'il_from' . $sort,
+                               'il_to' . $sort
+                       ) );
                }
                $this->addOption( 'LIMIT', $params['limit'] + 1 );
 
@@ -164,7 +164,8 @@ class ApiQueryImages extends ApiQueryGeneratorBase {
                return array(
                        'limit' => 'How many images to return',
                        'continue' => 'When more results are available, use this to continue',
-                       'images' => 'Only list these images. Useful for checking whether a certain page has a certain Image.',
+                       'images' => 'Only list these images. Useful for checking whether a ' .
+                               'certain page has a certain Image.',
                        'dir' => 'The direction in which to list',
                );
        }
@@ -184,8 +185,10 @@ class ApiQueryImages extends ApiQueryGeneratorBase {
 
        public function getExamples() {
                return array(
-                       'api.php?action=query&prop=images&titles=Main%20Page' => 'Get a list of images used in the [[Main Page]]',
-                       'api.php?action=query&generator=images&titles=Main%20Page&prop=info' => 'Get information about all images used in the [[Main Page]]',
+                       'api.php?action=query&prop=images&titles=Main%20Page'
+                               => 'Get a list of images used in the [[Main Page]]',
+                       'api.php?action=query&generator=images&titles=Main%20Page&prop=info'
+                               => 'Get information about all images used in the [[Main Page]]',
                );
        }
 
index 017684e..43b8c0c 100644 (file)
@@ -42,7 +42,8 @@ class ApiQueryInfo extends ApiQueryBase {
        private $pageRestrictions, $pageIsRedir, $pageIsNew, $pageTouched,
                $pageLatest, $pageLength;
 
-       private $protections, $watched, $watchers, $notificationtimestamps, $talkids, $subjectids, $displaytitles;
+       private $protections, $watched, $watchers, $notificationtimestamps,
+               $talkids, $subjectids, $displaytitles;
        private $showZeroWatchers = false;
 
        private $tokenFunctions;
@@ -104,10 +105,11 @@ class ApiQueryInfo extends ApiQueryBase {
                        'watch' => array( 'ApiQueryInfo', 'getWatchToken' ),
                );
                wfRunHooks( 'APIQueryInfoTokens', array( &$this->tokenFunctions ) );
+
                return $this->tokenFunctions;
        }
 
-       static $cachedTokens = array();
+       static protected $cachedTokens = array();
 
        public static function resetTokenCache() {
                ApiQueryInfo::$cachedTokens = array();
@@ -333,8 +335,8 @@ class ApiQueryInfo extends ApiQueryBase {
                        ), $pageid, $pageInfo );
                        if ( !$fit ) {
                                $this->setContinueEnumParameter( 'continue',
-                                               $title->getNamespace() . '|' .
-                                               $title->getText() );
+                                       $title->getNamespace() . '|' .
+                                       $title->getText() );
                                break;
                        }
                }
@@ -348,7 +350,8 @@ class ApiQueryInfo extends ApiQueryBase {
         */
        private function extractPageInfo( $pageid, $title ) {
                $pageInfo = array();
-               $titleExists = $pageid > 0; //$title->exists() needs pageid, which is not set for all title objects
+               // $title->exists() needs pageid, which is not set for all title objects
+               $titleExists = $pageid > 0;
                $ns = $title->getNamespace();
                $dbkey = $title->getDBkey();
 
@@ -410,7 +413,8 @@ class ApiQueryInfo extends ApiQueryBase {
                if ( $this->fld_notificationtimestamp ) {
                        $pageInfo['notificationtimestamp'] = '';
                        if ( isset( $this->notificationtimestamps[$ns][$dbkey] ) ) {
-                               $pageInfo['notificationtimestamp'] = wfTimestamp( TS_ISO_8601, $this->notificationtimestamps[$ns][$dbkey] );
+                               $pageInfo['notificationtimestamp'] =
+                                       wfTimestamp( TS_ISO_8601, $this->notificationtimestamps[$ns][$dbkey] );
                        }
                }
 
@@ -465,7 +469,7 @@ class ApiQueryInfo extends ApiQueryBase {
                        $this->resetQueryParams();
                        $this->addTables( 'page_restrictions' );
                        $this->addFields( array( 'pr_page', 'pr_type', 'pr_level',
-                                       'pr_expiry', 'pr_cascade' ) );
+                               'pr_expiry', 'pr_cascade' ) );
                        $this->addWhereFld( 'pr_page', array_keys( $this->titles ) );
 
                        $res = $this->select( __METHOD__ );
@@ -556,8 +560,8 @@ class ApiQueryInfo extends ApiQueryBase {
                        $this->resetQueryParams();
                        $this->addTables( array( 'page_restrictions', 'page', 'templatelinks' ) );
                        $this->addFields( array( 'pr_type', 'pr_level', 'pr_expiry',
-                                       'page_title', 'page_namespace',
-                                       'tl_title', 'tl_namespace' ) );
+                               'page_title', 'page_namespace',
+                               'tl_title', 'tl_namespace' ) );
                        $this->addWhere( $lb->constructSet( 'tl', $db ) );
                        $this->addWhere( 'pr_page = page_id' );
                        $this->addWhere( 'pr_page = tl_from' );
@@ -580,7 +584,7 @@ class ApiQueryInfo extends ApiQueryBase {
                        $this->resetQueryParams();
                        $this->addTables( array( 'page_restrictions', 'page', 'imagelinks' ) );
                        $this->addFields( array( 'pr_type', 'pr_level', 'pr_expiry',
-                                       'page_title', 'page_namespace', 'il_to' ) );
+                               'page_title', 'page_namespace', 'il_to' ) );
                        $this->addWhere( 'pr_page = page_id' );
                        $this->addWhere( 'pr_page = il_from' );
                        $this->addWhereFld( 'pr_cascade', 1 );
@@ -633,10 +637,10 @@ class ApiQueryInfo extends ApiQueryBase {
                foreach ( $res as $row ) {
                        if ( MWNamespace::isTalk( $row->page_namespace ) ) {
                                $this->talkids[MWNamespace::getSubject( $row->page_namespace )][$row->page_title] =
-                                               intval( $row->page_id );
+                                       intval( $row->page_id );
                        } else {
                                $this->subjectids[MWNamespace::getTalk( $row->page_namespace )][$row->page_title] =
-                                               intval( $row->page_id );
+                                       intval( $row->page_id );
                        }
                }
        }
@@ -697,7 +701,8 @@ class ApiQueryInfo extends ApiQueryBase {
                                $this->watched[$row->wl_namespace][$row->wl_title] = true;
                        }
                        if ( $this->fld_notificationtimestamp ) {
-                               $this->notificationtimestamps[$row->wl_namespace][$row->wl_title] = $row->wl_notificationtimestamp;
+                               $this->notificationtimestamps[$row->wl_namespace][$row->wl_title] =
+                                       $row->wl_notificationtimestamp;
                        }
                }
        }
@@ -761,6 +766,7 @@ class ApiQueryInfo extends ApiQueryBase {
                if ( !is_null( $params['token'] ) ) {
                        return 'private';
                }
+
                return 'public';
        }
 
index 5bd451b..e6280c8 100644 (file)
@@ -92,14 +92,14 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
                                $this->addOption( 'ORDER BY', array(
                                        'll_title' . $sort,
                                        'll_from' . $sort
-                               ));
+                               ) );
                        }
                } else {
                        $this->addOption( 'ORDER BY', array(
                                'll_lang' . $sort,
                                'll_title' . $sort,
                                'll_from' . $sort
-                       ));
+                       ) );
                }
 
                $this->addOption( 'LIMIT', $params['limit'] + 1 );
@@ -111,10 +111,14 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
                $count = 0;
                $result = $this->getResult();
                foreach ( $res as $row ) {
-                       if ( ++ $count > $params['limit'] ) {
-                               // We've reached the one extra which shows that there are additional pages to be had. Stop here...
-                               // Continue string preserved in case the redirect query doesn't pass the limit
-                               $this->setContinueEnumParameter( 'continue', "{$row->ll_lang}|{$row->ll_title}|{$row->ll_from}" );
+                       if ( ++$count > $params['limit'] ) {
+                               // We've reached the one extra which shows that there are
+                               // additional pages to be had. Stop here... Continue string
+                               // preserved in case the redirect query doesn't pass the limit.
+                               $this->setContinueEnumParameter(
+                                       'continue',
+                                       "{$row->ll_lang}|{$row->ll_title}|{$row->ll_from}"
+                               );
                                break;
                        }
 
@@ -140,7 +144,10 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
 
                                $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $entry );
                                if ( !$fit ) {
-                                       $this->setContinueEnumParameter( 'continue', "{$row->ll_lang}|{$row->ll_title}|{$row->ll_from}" );
+                                       $this->setContinueEnumParameter(
+                                               'continue',
+                                               "{$row->ll_lang}|{$row->ll_title}|{$row->ll_from}"
+                                       );
                                        break;
                                }
                        }
index aa796e3..a20b855 100644 (file)
@@ -86,9 +86,9 @@ class ApiQueryLangLinks extends ApiQueryBase {
                                $this->addOption( 'ORDER BY', 'll_lang' . $sort );
                        } else {
                                $this->addOption( 'ORDER BY', array(
-                                                       'll_from' . $sort,
-                                                       'll_lang' . $sort
-                               ));
+                                       'll_from' . $sort,
+                                       'll_lang' . $sort
+                               ) );
                        }
                }
 
@@ -182,7 +182,8 @@ class ApiQueryLangLinks extends ApiQueryBase {
 
        public function getExamples() {
                return array(
-                       'api.php?action=query&prop=langlinks&titles=Main%20Page&redirects=' => 'Get interlanguage links from the [[Main Page]]',
+                       'api.php?action=query&prop=langlinks&titles=Main%20Page&redirects='
+                               => 'Get interlanguage links from the [[Main Page]]',
                );
        }
 
index 937f4f1..1eecbe2 100644 (file)
@@ -43,7 +43,8 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
                                $this->prefix = 'pl';
                                $this->description = 'link';
                                $this->titlesParam = 'titles';
-                               $this->titlesParamDescription = 'Only list links to these titles. Useful for checking whether a certain page links to a certain title.';
+                               $this->titlesParamDescription = 'Only list links to these titles. Useful ' .
+                                       'for checking whether a certain page links to a certain title.';
                                $this->helpUrl = 'https://www.mediawiki.org/wiki/API:Properties#links_.2F_pl';
                                break;
                        case self::TEMPLATES:
@@ -51,7 +52,8 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
                                $this->prefix = 'tl';
                                $this->description = 'template';
                                $this->titlesParam = 'templates';
-                               $this->titlesParamDescription = 'Only list these templates. Useful for checking whether a certain page uses a certain template.';
+                               $this->titlesParamDescription = 'Only list these templates. Useful ' .
+                                       'for checking whether a certain page uses a certain template.';
                                $this->helpUrl = 'https://www.mediawiki.org/wiki/API:Properties#templates_.2F_tl';
                                break;
                        default:
@@ -74,8 +76,7 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
        }
 
        /**
-        * @param $resultPageSet ApiPageSet
-        * @return
+        * @param ApiPageSet $resultPageSet
         */
        private function run( $resultPageSet = null ) {
                if ( $this->getPageSet()->getGoodTitleCount() == 0 ) {
@@ -212,6 +213,7 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
 
        public function getParamDescription() {
                $desc = $this->description;
+
                return array(
                        'namespace' => "Show {$desc}s in this namespace(s) only",
                        'limit' => "How many {$desc}s to return",
@@ -237,10 +239,13 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
        public function getExamples() {
                $desc = $this->description;
                $name = $this->getModuleName();
+
                return array(
                        "api.php?action=query&prop={$name}&titles=Main%20Page" => "Get {$desc}s from the [[Main Page]]",
-                       "api.php?action=query&generator={$name}&titles=Main%20Page&prop=info" => "Get information about the {$desc} pages in the [[Main Page]]",
-                       "api.php?action=query&prop={$name}&titles=Main%20Page&{$this->prefix}namespace=2|10" => "Get {$desc}s from the Main Page in the User and Template namespaces",
+                       "api.php?action=query&generator={$name}&titles=Main%20Page&prop=info"
+                               => "Get information about the {$desc} pages in the [[Main Page]]",
+                       "api.php?action=query&prop={$name}&titles=Main%20Page&{$this->prefix}namespace=2|10"
+                               => "Get {$desc}s from the Main Page in the User and Template namespaces",
                );
        }
 
index 1a2719e..0d2f475 100644 (file)
@@ -84,7 +84,10 @@ class ApiQueryLogEvents extends ApiQueryBase {
                $this->addFieldsIf( array( 'log_id', 'page_id' ), $this->fld_ids );
                $this->addFieldsIf( array( 'log_user', 'log_user_text', 'user_name' ), $this->fld_user );
                $this->addFieldsIf( 'log_user', $this->fld_userid );
-               $this->addFieldsIf( array( 'log_namespace', 'log_title' ), $this->fld_title || $this->fld_parsedcomment );
+               $this->addFieldsIf(
+                       array( 'log_namespace', 'log_title' ),
+                       $this->fld_title || $this->fld_parsedcomment
+               );
                $this->addFieldsIf( 'log_comment', $this->fld_comment || $this->fld_parsedcomment );
                $this->addFieldsIf( 'log_params', $this->fld_details );
 
@@ -96,7 +99,8 @@ class ApiQueryLogEvents extends ApiQueryBase {
 
                if ( !is_null( $params['tag'] ) ) {
                        $this->addTables( 'change_tag' );
-                       $this->addJoinConds( array( 'change_tag' => array( 'INNER JOIN', array( 'log_id=ct_log_id' ) ) ) );
+                       $this->addJoinConds( array( 'change_tag' => array( 'INNER JOIN',
+                               array( 'log_id=ct_log_id' ) ) ) );
                        $this->addWhereFld( 'ct_tag', $params['tag'] );
                        $index['change_tag'] = 'change_tag_tag_id';
                }
@@ -110,7 +114,12 @@ class ApiQueryLogEvents extends ApiQueryBase {
                        $index['logging'] = 'type_time';
                }
 
-               $this->addTimestampWhereRange( 'log_timestamp', $params['dir'], $params['start'], $params['end'] );
+               $this->addTimestampWhereRange(
+                       'log_timestamp',
+                       $params['dir'],
+                       $params['start'],
+                       $params['end']
+               );
 
                $limit = $params['limit'];
                $this->addOption( 'LIMIT', $limit + 1 );
@@ -168,8 +177,9 @@ class ApiQueryLogEvents extends ApiQueryBase {
                $res = $this->select( __METHOD__ );
                $result = $this->getResult();
                foreach ( $res as $row ) {
-                       if ( ++ $count > $limit ) {
-                               // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+                       if ( ++$count > $limit ) {
+                               // We've reached the one extra which shows that there are
+                               // additional pages to be had. Stop here...
                                $this->setContinueEnumParameter( 'start', wfTimestamp( TS_ISO_8601, $row->log_timestamp ) );
                                break;
                        }
@@ -197,7 +207,9 @@ class ApiQueryLogEvents extends ApiQueryBase {
         * @param $legacy bool
         * @return array
         */
-       public static function addLogParams( $result, &$vals, $params, $type, $action, $ts, $legacy = false ) {
+       public static function addLogParams( $result, &$vals, $params, $type,
+               $action, $ts, $legacy = false
+       ) {
                switch ( $type ) {
                        case 'move':
                                if ( $legacy ) {
@@ -285,6 +297,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
                        $result->setIndexedTagName_recursive( $logParams, 'param' );
                        $vals = array_merge( $vals, $logParams );
                }
+
                return $vals;
        }
 
@@ -392,6 +405,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
 
        public function getAllowedParams() {
                global $wgLogTypes, $wgLogActions, $wgLogActionsHandlers;
+
                return array(
                        'prop' => array(
                                ApiBase::PARAM_ISMULTI => true,
@@ -444,6 +458,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
 
        public function getParamDescription() {
                $p = $this->getModulePrefix();
+
                return array(
                        'prop' => array(
                                'Which properties to get',
@@ -473,6 +488,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
 
        public function getResultProperties() {
                global $wgLogTypes;
+
                return array(
                        'ids' => array(
                                'logid' => 'integer',
index a23ff06..469b297 100644 (file)
@@ -104,7 +104,7 @@ abstract class ApiQueryORM extends ApiQueryBase {
        protected function getParams() {
                return array_filter(
                        $this->extractRequestParams(),
-                       function( $prop ) {
+                       function ( $prop ) {
                                return isset( $prop );
                        }
                );
@@ -260,5 +260,4 @@ abstract class ApiQueryORM extends ApiQueryBase {
 
                return array_merge( $this->getTable()->getFieldDescriptions(), $descriptions );
        }
-
 }
index 08c883d..5438175 100644 (file)
@@ -63,7 +63,8 @@ class ApiQueryPagePropNames extends ApiQueryBase {
                $count = 0;
                foreach ( $this->select( __METHOD__ ) as $row ) {
                        if ( ++$count > $limit ) {
-                               // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+                               // We've reached the one extra which shows that there are
+                               // additional pages to be had. Stop here...
                                $this->setContinueEnumParameter( 'continue', $row->pp_propname );
                                break;
                        }
index 2de5710..e51c7ab 100644 (file)
@@ -115,6 +115,7 @@ class ApiQueryPageProps extends ApiQueryBase {
                if ( !$fit ) {
                        $this->setContinueEnumParameter( 'continue', $page );
                }
+
                return $fit;
        }
 
@@ -134,7 +135,8 @@ class ApiQueryPageProps extends ApiQueryBase {
        public function getParamDescription() {
                return array(
                        'continue' => 'When more results are available, use this to continue',
-                       'prop' => 'Only list these props. Useful for checking whether a certain page uses a certain page prop',
+                       'prop' => 'Only list these props. Useful for checking whether a ' .
+                               'certain page uses a certain page prop',
                );
        }
 
index 6f2f02e..e68eb56 100644 (file)
@@ -92,7 +92,8 @@ class ApiQueryPagesWithProp extends ApiQueryGeneratorBase {
                $count = 0;
                foreach ( $this->select( __METHOD__ ) as $row ) {
                        if ( ++$count > $limit ) {
-                               // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+                               // We've reached the one extra which shows that there are
+                               // additional pages to be had. Stop here...
                                $this->setContinueEnumParameter( 'continue', $row->page_id );
                                break;
                        }
@@ -178,8 +179,10 @@ class ApiQueryPagesWithProp extends ApiQueryGeneratorBase {
 
        public function getExamples() {
                return array(
-                       'api.php?action=query&list=pageswithprop&pwppropname=displaytitle&pwpprop=ids|title|value' => 'Get first 10 pages using {{DISPLAYTITLE:}}',
-                       'api.php?action=query&generator=pageswithprop&gpwppropname=notoc&prop=info' => 'Get page info about first 10 pages using __NOTOC__',
+                       'api.php?action=query&list=pageswithprop&pwppropname=displaytitle&pwpprop=ids|title|value'
+                               => 'Get first 10 pages using {{DISPLAYTITLE:}}',
+                       'api.php?action=query&generator=pageswithprop&gpwppropname=notoc&prop=info'
+                               => 'Get page info about first 10 pages using __NOTOC__',
                );
        }
 
index 222ad07..ea350ad 100644 (file)
@@ -80,8 +80,9 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
                $titles = array();
 
                foreach ( $res as $row ) {
-                       if ( ++ $count > $params['limit'] ) {
-                               // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+                       if ( ++$count > $params['limit'] ) {
+                               // We've reached the one extra which shows that there are
+                               // additional pages to be had. Stop here...
                                $this->setContinueEnumParameter( 'start', wfTimestamp( TS_ISO_8601, $row->pt_timestamp ) );
                                break;
                        }
@@ -131,7 +132,10 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
                }
 
                if ( is_null( $resultPageSet ) ) {
-                       $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), $this->getModulePrefix() );
+                       $result->setIndexedTagName_internal(
+                               array( 'query', $this->getModuleName() ),
+                               $this->getModulePrefix()
+                       );
                } else {
                        $resultPageSet->populateFromTitles( $titles );
                }
@@ -148,6 +152,7 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
 
        public function getAllowedParams() {
                global $wgRestrictionLevels;
+
                return array(
                        'namespace' => array(
                                ApiBase::PARAM_ISMULTI => true,
@@ -216,6 +221,7 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
 
        public function getResultProperties() {
                global $wgRestrictionLevels;
+
                return array(
                        '' => array(
                                'ns' => 'namespace',
index 79fe049..88af62b 100644 (file)
@@ -126,7 +126,10 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
                        }
                }
                if ( is_null( $resultPageSet ) ) {
-                       $result->setIndexedTagName_internal( array( 'query', $this->getModuleName(), 'results' ), 'page' );
+                       $result->setIndexedTagName_internal(
+                               array( 'query', $this->getModuleName(), 'results' ),
+                               'page'
+                       );
                } else {
                        $resultPageSet->populateFromTitles( $titles );
                }
@@ -138,6 +141,7 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
                if ( $qp->getRestriction() != '' ) {
                        return 'private';
                }
+
                return 'public';
        }
 
index fae3377..e990386 100644 (file)
@@ -30,9 +30,7 @@
  *
  * @ingroup API
  */
-
 class ApiQueryRandom extends ApiQueryGeneratorBase {
-
        private $pageIDs;
 
        public function __construct( $query, $moduleName ) {
@@ -83,8 +81,8 @@ class ApiQueryRandom extends ApiQueryGeneratorBase {
                                // Prevent duplicates
                                if ( !in_array( $row->page_id, $this->pageIDs ) ) {
                                        $fit = $this->getResult()->addValue(
-                                                       array( 'query', $this->getModuleName() ),
-                                                       null, $this->extractRowInfo( $row ) );
+                                               array( 'query', $this->getModuleName() ),
+                                               null, $this->extractRowInfo( $row ) );
                                        if ( !$fit ) {
                                                // We can't really query-continue a random list.
                                                // Return an insanely high value so
@@ -110,14 +108,26 @@ class ApiQueryRandom extends ApiQueryGeneratorBase {
                $result = $this->getResult();
                $this->pageIDs = array();
 
-               $this->prepareQuery( wfRandom(), $params['limit'], $params['namespace'], $resultPageSet, $params['redirect'] );
+               $this->prepareQuery(
+                       wfRandom(),
+                       $params['limit'],
+                       $params['namespace'],
+                       $resultPageSet,
+                       $params['redirect']
+               );
                $count = $this->runQuery( $resultPageSet );
                if ( $count < $params['limit'] ) {
                        /* We got too few pages, we probably picked a high value
                         * for page_random. We'll just take the lowest ones, see
                         * also the comment in Title::getRandomTitle()
                         */
-                       $this->prepareQuery( 0, $params['limit'] - $count, $params['namespace'], $resultPageSet, $params['redirect'] );
+                       $this->prepareQuery(
+                               0,
+                               $params['limit'] - $count,
+                               $params['namespace'],
+                               $resultPageSet,
+                               $params['redirect']
+                       );
                        $this->runQuery( $resultPageSet );
                }
 
@@ -131,6 +141,7 @@ class ApiQueryRandom extends ApiQueryGeneratorBase {
                $vals = array();
                $vals['id'] = intval( $row->page_id );
                ApiQueryBase::addTitleInfo( $vals, $title );
+
                return $vals;
        }
 
@@ -176,9 +187,12 @@ class ApiQueryRandom extends ApiQueryGeneratorBase {
        public function getDescription() {
                return array(
                        'Get a set of random pages',
-                       'NOTE: Pages are listed in a fixed sequence, only the starting point is random. This means that if, for example, "Main Page" is the first',
-                       '      random page on your list, "List of fictional monkeys" will *always* be second, "List of people on stamps of Vanuatu" third, etc',
-                       'NOTE: If the number of pages in the namespace is lower than rnlimit, you will get fewer pages. You will not get the same page twice'
+                       'NOTE: Pages are listed in a fixed sequence, only the starting point is random.',
+                       '      This means that if, for example, "Main Page" is the first random page on',
+                       '      your list, "List of fictional monkeys" will *always* be second, "List of',
+                       '      people on stamps of Vanuatu" third, etc',
+                       'NOTE: If the number of pages in the namespace is lower than rnlimit, you will',
+                       '      get fewer pages. You will not get the same page twice'
                );
        }
 
index 8d969fc..b44565e 100644 (file)
@@ -37,9 +37,9 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
        }
 
        private $fld_comment = false, $fld_parsedcomment = false, $fld_user = false, $fld_userid = false,
-                       $fld_flags = false, $fld_timestamp = false, $fld_title = false, $fld_ids = false,
-                       $fld_sizes = false, $fld_redirect = false, $fld_patrolled = false, $fld_loginfo = false,
-                       $fld_tags = false, $fld_sha1 = false, $token = array();
+               $fld_flags = false, $fld_timestamp = false, $fld_title = false, $fld_ids = false,
+               $fld_sizes = false, $fld_redirect = false, $fld_patrolled = false, $fld_loginfo = false,
+               $fld_tags = false, $fld_sha1 = false, $token = array();
 
        private $tokenFunctions;
 
@@ -64,6 +64,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                        'patrol' => array( 'ApiQueryRecentChanges', 'getPatrolToken' )
                );
                wfRunHooks( 'APIQueryRecentChangesTokens', array( &$this->tokenFunctions ) );
+
                return $this->tokenFunctions;
        }
 
@@ -71,7 +72,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
         * @param  $pageid
         * @param  $title
         * @param $rc RecentChange (optional)
-        * @return bool|String
+        * @return bool|string
         */
        public static function getPatrolToken( $pageid, $title, $rc = null ) {
                global $wgUser;
@@ -80,27 +81,26 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
 
                if ( $rc ) {
                        if ( ( $wgUser->useRCPatrol() && $rc->getAttribute( 'rc_type' ) == RC_EDIT ) ||
-                               ( $wgUser->useNPPatrol() && $rc->getAttribute( 'rc_type' ) == RC_NEW ) )
-                       {
-                               $validTokenUser = true;
-                       }
-               } else {
-                       if ( $wgUser->useRCPatrol() || $wgUser->useNPPatrol() ) {
+                               ( $wgUser->useNPPatrol() && $rc->getAttribute( 'rc_type' ) == RC_NEW )
+                       ) {
                                $validTokenUser = true;
                        }
+               } elseif ( $wgUser->useRCPatrol() || $wgUser->useNPPatrol() ) {
+                       $validTokenUser = true;
                }
 
                if ( $validTokenUser ) {
                        // The patrol token is always the same, let's exploit that
                        static $cachedPatrolToken = null;
+
                        if ( is_null( $cachedPatrolToken ) ) {
                                $cachedPatrolToken = $wgUser->getEditToken( 'patrol' );
                        }
+
                        return $cachedPatrolToken;
-               } else {
-                       return false;
                }
 
+               return false;
        }
 
        /**
@@ -155,7 +155,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                        $cont = explode( '|', $params['continue'] );
                        if ( count( $cont ) != 2 ) {
                                $this->dieUsage( 'Invalid continue param. You should pass the ' .
-                                                               'original value returned by the previous query', '_badcontinue' );
+                                       'original value returned by the previous query', '_badcontinue' );
                        }
 
                        $timestamp = $this->getDB()->addQuotes( wfTimestamp( TS_MW, $cont[0] ) );
@@ -187,18 +187,23 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
 
                        /* Check for conflicting parameters. */
                        if ( ( isset( $show['minor'] ) && isset( $show['!minor'] ) )
-                                       || ( isset( $show['bot'] ) && isset( $show['!bot'] ) )
-                                       || ( isset( $show['anon'] ) && isset( $show['!anon'] ) )
-                                       || ( isset( $show['redirect'] ) && isset( $show['!redirect'] ) )
-                                       || ( isset( $show['patrolled'] ) && isset( $show['!patrolled'] ) )
+                               || ( isset( $show['bot'] ) && isset( $show['!bot'] ) )
+                               || ( isset( $show['anon'] ) && isset( $show['!anon'] ) )
+                               || ( isset( $show['redirect'] ) && isset( $show['!redirect'] ) )
+                               || ( isset( $show['patrolled'] ) && isset( $show['!patrolled'] ) )
+                               || ( isset( $show['patrolled'] ) && isset( $show['unpatrolled'] ) )
+                               || ( isset( $show['!patrolled'] ) && isset( $show['unpatrolled'] ) )
                        ) {
                                $this->dieUsageMsg( 'show' );
                        }
 
                        // Check permissions
-                       if ( isset( $show['patrolled'] ) || isset( $show['!patrolled'] ) ) {
+                       if ( isset( $show['patrolled'] ) || isset( $show['!patrolled'] ) || isset( $show['unpatrolled'] ) ) {
                                if ( !$user->useRCPatrol() && !$user->useNPPatrol() ) {
-                                       $this->dieUsage( 'You need the patrol right to request the patrolled flag', 'permissiondenied' );
+                                       $this->dieUsage(
+                                               'You need the patrol right to request the patrolled flag',
+                                               'permissiondenied'
+                                       );
                                }
                        }
 
@@ -213,8 +218,21 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                        $this->addWhereIf( 'rc_patrolled != 0', isset( $show['patrolled'] ) );
                        $this->addWhereIf( 'page_is_redirect = 1', isset( $show['redirect'] ) );
 
+                       if ( isset( $show['unpatrolled'] ) ) {
+                               // See ChangesList:isUnpatrolled
+                               if ( $user->useRCPatrol() ) {
+                                       $this->addWhere( 'rc_patrolled = 0' );
+                               } elseif ( $user->useNPPatrol() ) {
+                                       $this->addWhere( 'rc_patrolled = 0' );
+                                       $this->addWhereFld( 'rc_type', RC_NEW );
+                               }
+                       }
+
                        // Don't throw log entries out the window here
-                       $this->addWhereIf( 'page_is_redirect = 0 OR page_is_redirect IS NULL', isset( $show['!redirect'] ) );
+                       $this->addWhereIf(
+                               'page_is_redirect = 0 OR page_is_redirect IS NULL',
+                               isset( $show['!redirect'] )
+                       );
                }
 
                if ( !is_null( $params['user'] ) && !is_null( $params['excludeuser'] ) ) {
@@ -252,7 +270,10 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                        $this->initProperties( $prop );
 
                        if ( $this->fld_patrolled && !$user->useRCPatrol() && !$user->useNPPatrol() ) {
-                               $this->dieUsage( 'You need the patrol right to request the patrolled flag', 'permissiondenied' );
+                               $this->dieUsage(
+                                       'You need the patrol right to request the patrolled flag',
+                                       'permissiondenied'
+                               );
                        }
 
                        $this->addFields( 'rc_id' );
@@ -264,8 +285,12 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                        $this->addFieldsIf( array( 'rc_minor', 'rc_type', 'rc_bot' ), $this->fld_flags );
                        $this->addFieldsIf( array( 'rc_old_len', 'rc_new_len' ), $this->fld_sizes );
                        $this->addFieldsIf( 'rc_patrolled', $this->fld_patrolled );
-                       $this->addFieldsIf( array( 'rc_logid', 'rc_log_type', 'rc_log_action', 'rc_params' ), $this->fld_loginfo );
-                       $showRedirects = $this->fld_redirect || isset( $show['redirect'] ) || isset( $show['!redirect'] );
+                       $this->addFieldsIf(
+                               array( 'rc_logid', 'rc_log_type', 'rc_log_action', 'rc_params' ),
+                               $this->fld_loginfo
+                       );
+                       $showRedirects = $this->fld_redirect || isset( $show['redirect'] )
+                               || isset( $show['!redirect'] );
                }
 
                if ( $this->fld_tags ) {
@@ -276,13 +301,15 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
 
                if ( $this->fld_sha1 ) {
                        $this->addTables( 'revision' );
-                       $this->addJoinConds( array( 'revision' => array( 'LEFT JOIN', array( 'rc_this_oldid=rev_id' ) ) ) );
+                       $this->addJoinConds( array( 'revision' => array( 'LEFT JOIN',
+                               array( 'rc_this_oldid=rev_id' ) ) ) );
                        $this->addFields( array( 'rev_sha1', 'rev_deleted' ) );
                }
 
                if ( $params['toponly'] || $showRedirects ) {
                        $this->addTables( 'page' );
-                       $this->addJoinConds( array( 'page' => array( 'LEFT JOIN', array( 'rc_namespace=page_namespace', 'rc_title=page_title' ) ) ) );
+                       $this->addJoinConds( array( 'page' => array( 'LEFT JOIN',
+                               array( 'rc_namespace=page_namespace', 'rc_title=page_title' ) ) ) );
                        $this->addFields( 'page_is_redirect' );
 
                        if ( $params['toponly'] ) {
@@ -311,9 +338,13 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
 
                /* Iterate through the rows, adding data extracted from them to our query result. */
                foreach ( $res as $row ) {
-                       if ( ++ $count > $params['limit'] ) {
-                               // We've reached the one extra which shows that there are additional pages to be had. Stop here...
-                               $this->setContinueEnumParameter( 'continue', wfTimestamp( TS_ISO_8601, $row->rc_timestamp ) . '|' . $row->rc_id );
+                       if ( ++$count > $params['limit'] ) {
+                               // We've reached the one extra which shows that there are
+                               // additional pages to be had. Stop here...
+                               $this->setContinueEnumParameter(
+                                       'continue',
+                                       wfTimestamp( TS_ISO_8601, $row->rc_timestamp ) . '|' . $row->rc_id
+                               );
                                break;
                        }
 
@@ -327,7 +358,10 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                                }
                                $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $vals );
                                if ( !$fit ) {
-                                       $this->setContinueEnumParameter( 'continue', wfTimestamp( TS_ISO_8601, $row->rc_timestamp ) . '|' . $row->rc_id );
+                                       $this->setContinueEnumParameter(
+                                               'continue',
+                                               wfTimestamp( TS_ISO_8601, $row->rc_timestamp ) . '|' . $row->rc_id
+                                       );
                                        break;
                                }
                        } else {
@@ -520,6 +554,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                        foreach ( $type as $t ) {
                                $retval[] = $this->parseRCType( $t );
                        }
+
                        return $retval;
                }
                switch ( $type ) {
@@ -549,6 +584,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                        // formatComment() calls wfMessage() among other things
                        return 'anon-public-user-private';
                }
+
                return 'public';
        }
 
@@ -614,7 +650,8 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                                        'redirect',
                                        '!redirect',
                                        'patrolled',
-                                       '!patrolled'
+                                       '!patrolled',
+                                       'unpatrolled'
                                )
                        ),
                        'limit' => array(
@@ -640,6 +677,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
 
        public function getParamDescription() {
                $p = $this->getModulePrefix();
+
                return array(
                        'start' => 'The timestamp to start enumerating from',
                        'end' => 'The timestamp to end enumerating',
@@ -786,7 +824,10 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
        public function getPossibleErrors() {
                return array_merge( parent::getPossibleErrors(), array(
                        array( 'show' ),
-                       array( 'code' => 'permissiondenied', 'info' => 'You need the patrol right to request the patrolled flag' ),
+                       array(
+                               'code' => 'permissiondenied',
+                               'info' => 'You need the patrol right to request the patrolled flag'
+                       ),
                        array( 'code' => 'user-excludeuser', 'info' => 'user and excludeuser cannot be used together' ),
                ) );
        }
index 415288e..86351c0 100644 (file)
  */
 
 /**
- * A query action to enumerate revisions of a given page, or show top revisions of multiple pages.
- * Various pieces of information may be shown - flags, comments, and the actual wiki markup of the rev.
- * In the enumeration mode, ranges of revisions may be requested and filtered.
+ * A query action to enumerate revisions of a given page, or show top revisions
+ * of multiple pages. Various pieces of information may be shown - flags,
+ * comments, and the actual wiki markup of the rev. In the enumeration mode,
+ * ranges of revisions may be requested and filtered.
  *
  * @ingroup API
  */
@@ -40,9 +41,10 @@ class ApiQueryRevisions extends ApiQueryBase {
                parent::__construct( $query, $moduleName, 'rv' );
        }
 
-       private $fld_ids = false, $fld_flags = false, $fld_timestamp = false, $fld_size = false, $fld_sha1 = false,
-                       $fld_comment = false, $fld_parsedcomment = false, $fld_user = false, $fld_userid = false,
-                       $fld_content = false, $fld_tags = false, $fld_contentmodel = false;
+       private $fld_ids = false, $fld_flags = false, $fld_timestamp = false,
+               $fld_size = false, $fld_sha1 = false, $fld_comment = false,
+               $fld_parsedcomment = false, $fld_user = false, $fld_userid = false,
+               $fld_content = false, $fld_tags = false, $fld_contentmodel = false;
 
        private $tokenFunctions;
 
@@ -65,6 +67,7 @@ class ApiQueryRevisions extends ApiQueryBase {
                        'rollback' => array( 'ApiQueryRevisions', 'getRollbackToken' )
                );
                wfRunHooks( 'APIQueryRevisionsTokens', array( &$this->tokenFunctions ) );
+
                return $this->tokenFunctions;
        }
 
@@ -79,6 +82,7 @@ class ApiQueryRevisions extends ApiQueryBase {
                if ( !$wgUser->isAllowed( 'rollback' ) ) {
                        return false;
                }
+
                return $wgUser->getEditToken(
                        array( $title->getPrefixedText(), $rev->getUserText() ) );
        }
@@ -91,9 +95,9 @@ class ApiQueryRevisions extends ApiQueryBase {
                // Enumerating revisions on multiple pages make it extremely
                // difficult to manage continuations and require additional SQL indexes
                $enumRevMode = ( !is_null( $params['user'] ) || !is_null( $params['excludeuser'] ) ||
-                               !is_null( $params['limit'] ) || !is_null( $params['startid'] ) ||
-                               !is_null( $params['endid'] ) || $params['dir'] === 'newer' ||
-                               !is_null( $params['start'] ) || !is_null( $params['end'] ) );
+                       !is_null( $params['limit'] ) || !is_null( $params['startid'] ) ||
+                       !is_null( $params['endid'] ) || $params['dir'] === 'newer' ||
+                       !is_null( $params['start'] ) || !is_null( $params['end'] ) );
 
                $pageSet = $this->getPageSet();
                $pageCount = $pageSet->getGoodTitleCount();
@@ -105,11 +109,20 @@ class ApiQueryRevisions extends ApiQueryBase {
                }
 
                if ( $revCount > 0 && $enumRevMode ) {
-                       $this->dieUsage( 'The revids= parameter may not be used with the list options (limit, startid, endid, dirNewer, start, end).', 'revids' );
+                       $this->dieUsage(
+                               'The revids= parameter may not be used with the list options ' .
+                                       '(limit, startid, endid, dirNewer, start, end).',
+                               'revids'
+                       );
                }
 
                if ( $pageCount > 1 && $enumRevMode ) {
-                       $this->dieUsage( 'titles, pageids or a generator was used to supply multiple pages, but the limit, startid, endid, dirNewer, user, excludeuser, start and end parameters may only be used on a single page.', 'multpages' );
+                       $this->dieUsage(
+                               'titles, pageids or a generator was used to supply multiple pages, ' .
+                                       'but the limit, startid, endid, dirNewer, user, excludeuser, start ' .
+                                       'and end parameters may only be used on a single page.',
+                               'multpages'
+                       );
                }
 
                if ( !is_null( $params['difftotext'] ) ) {
@@ -119,8 +132,12 @@ class ApiQueryRevisions extends ApiQueryBase {
                                $params['diffto'] = 0;
                        }
                        if ( ( !ctype_digit( $params['diffto'] ) || $params['diffto'] < 0 )
-                                       && $params['diffto'] != 'prev' && $params['diffto'] != 'next' ) {
-                               $this->dieUsage( 'rvdiffto must be set to a non-negative number, "prev", "next" or "cur"', 'diffto' );
+                               && $params['diffto'] != 'prev' && $params['diffto'] != 'next'
+                       ) {
+                               $this->dieUsage(
+                                       'rvdiffto must be set to a non-negative number, "prev", "next" or "cur"',
+                                       'diffto'
+                               );
                        }
                        // Check whether the revision exists and is readable,
                        // DifferenceEngine returns a rather ambiguous empty
@@ -181,13 +198,17 @@ class ApiQueryRevisions extends ApiQueryBase {
                if ( isset( $prop['tags'] ) ) {
                        $this->fld_tags = true;
                        $this->addTables( 'tag_summary' );
-                       $this->addJoinConds( array( 'tag_summary' => array( 'LEFT JOIN', array( 'rev_id=ts_rev_id' ) ) ) );
+                       $this->addJoinConds(
+                               array( 'tag_summary' => array( 'LEFT JOIN', array( 'rev_id=ts_rev_id' ) ) )
+                       );
                        $this->addFields( 'ts_tags' );
                }
 
                if ( !is_null( $params['tag'] ) ) {
                        $this->addTables( 'change_tag' );
-                       $this->addJoinConds( array( 'change_tag' => array( 'INNER JOIN', array( 'rev_id=ct_rev_id' ) ) ) );
+                       $this->addJoinConds(
+                               array( 'change_tag' => array( 'INNER JOIN', array( 'rev_id=ct_rev_id' ) ) )
+                       );
                        $this->addWhereFld( 'ct_tag', $params['tag'] );
                        $index['change_tag'] = 'change_tag_tag_id';
                }
@@ -349,7 +370,7 @@ class ApiQueryRevisions extends ApiQueryBase {
                        $this->addOption( 'ORDER BY', array(
                                'rev_page',
                                'rev_id'
-                       ));
+                       ) );
 
                        // assumption testing -- we should never get more then $pageCount rows.
                        $limit = $pageCount;
@@ -364,8 +385,9 @@ class ApiQueryRevisions extends ApiQueryBase {
                $res = $this->select( __METHOD__ );
 
                foreach ( $res as $row ) {
-                       if ( ++ $count > $limit ) {
-                               // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+                       if ( ++$count > $limit ) {
+                               // We've reached the one extra which shows that there are
+                               // additional pages to be had. Stop here...
                                if ( !$enumRevMode ) {
                                        ApiBase::dieDebug( __METHOD__, 'Got more rows then expected' ); // bug report
                                }
@@ -497,7 +519,10 @@ class ApiQueryRevisions extends ApiQueryBase {
                        if ( $content && $this->section !== false ) {
                                $content = $content->getSection( $this->section, false );
                                if ( !$content ) {
-                                       $this->dieUsage( "There is no section {$this->section} in r" . $revision->getId(), 'nosuchsection' );
+                                       $this->dieUsage(
+                                               "There is no section {$this->section} in r" . $revision->getId(),
+                                               'nosuchsection'
+                                       );
                                }
                        }
                }
@@ -508,7 +533,11 @@ class ApiQueryRevisions extends ApiQueryBase {
                                if ( $content->getModel() === CONTENT_MODEL_WIKITEXT ) {
                                        $t = $content->getNativeData(); # note: don't set $text
 
-                                       $wgParser->startExternalParse( $title, ParserOptions::newFromContext( $this->getContext() ), OT_PREPROCESS );
+                                       $wgParser->startExternalParse(
+                                               $title,
+                                               ParserOptions::newFromContext( $this->getContext() ),
+                                               OT_PREPROCESS
+                                       );
                                        $dom = $wgParser->preprocessToDom( $t );
                                        if ( is_callable( array( $dom, 'saveXML' ) ) ) {
                                                $xml = $dom->saveXML();
@@ -518,8 +547,8 @@ class ApiQueryRevisions extends ApiQueryBase {
                                        $vals['parsetree'] = $xml;
                                } else {
                                        $this->setWarning( "Conversion to XML is supported for wikitext only, " .
-                                                                               $title->getPrefixedDBkey() .
-                                                                               " uses content model " . $content->getModel() );
+                                               $title->getPrefixedDBkey() .
+                                               " uses content model " . $content->getModel() );
                                }
                        }
 
@@ -528,7 +557,11 @@ class ApiQueryRevisions extends ApiQueryBase {
                                if ( $content->getModel() === CONTENT_MODEL_WIKITEXT ) {
                                        $text = $content->getNativeData();
 
-                                       $text = $wgParser->preprocess( $text, $title, ParserOptions::newFromContext( $this->getContext() ) );
+                                       $text = $wgParser->preprocess(
+                                               $text,
+                                               $title,
+                                               ParserOptions::newFromContext( $this->getContext() )
+                                       );
                                } else {
                                        $this->setWarning( "Template expansion is supported for wikitext only, " .
                                                $title->getPrefixedDBkey() .
@@ -538,7 +571,11 @@ class ApiQueryRevisions extends ApiQueryBase {
                                }
                        }
                        if ( $this->parseContent ) {
-                               $po = $content->getParserOutput( $title, $revision->getId(), ParserOptions::newFromContext( $this->getContext() ) );
+                               $po = $content->getParserOutput(
+                                       $title,
+                                       $revision->getId(),
+                                       ParserOptions::newFromContext( $this->getContext() )
+                               );
                                $text = $po->getText();
                        }
 
@@ -550,7 +587,7 @@ class ApiQueryRevisions extends ApiQueryBase {
                                        $name = $title->getPrefixedDBkey();
 
                                        $this->dieUsage( "The requested format {$this->contentFormat} is not supported " .
-                                                                       "for content model $model used by $name", 'badformat' );
+                                               "for content model $model used by $name", 'badformat' );
                                }
 
                                $text = $content->serialize( $format );
@@ -588,15 +625,21 @@ class ApiQueryRevisions extends ApiQueryBase {
                                        $model = $title->getContentModel();
 
                                        if ( $this->contentFormat
-                                               && !ContentHandler::getForModelID( $model )->isSupportedFormat( $this->contentFormat ) ) {
+                                               && !ContentHandler::getForModelID( $model )->isSupportedFormat( $this->contentFormat )
+                                       ) {
 
                                                $name = $title->getPrefixedDBkey();
 
                                                $this->dieUsage( "The requested format {$this->contentFormat} is not supported for " .
-                                                                                       "content model $model used by $name", 'badformat' );
+                                                       "content model $model used by $name", 'badformat' );
                                        }
 
-                                       $difftocontent = ContentHandler::makeContent( $this->difftotext, $title, $model, $this->contentFormat );
+                                       $difftocontent = ContentHandler::makeContent(
+                                               $this->difftotext,
+                                               $title,
+                                               $model,
+                                               $this->contentFormat
+                                       );
 
                                        $engine = $handler->createDifferenceEngine( $context );
                                        $engine->setContent( $content, $difftocontent );
@@ -614,6 +657,7 @@ class ApiQueryRevisions extends ApiQueryBase {
                                $vals['diff']['notcached'] = '';
                        }
                }
+
                return $vals;
        }
 
@@ -625,6 +669,7 @@ class ApiQueryRevisions extends ApiQueryBase {
                        // formatComment() calls wfMessage() among other things
                        return 'anon-public-user-private';
                }
+
                return 'public';
        }
 
@@ -700,6 +745,7 @@ class ApiQueryRevisions extends ApiQueryBase {
 
        public function getParamDescription() {
                $p = $this->getModulePrefix();
+
                return array(
                        'prop' => array(
                                'Which properties to get for each revision:',
@@ -733,8 +779,11 @@ class ApiQueryRevisions extends ApiQueryBase {
                        'continue' => 'When more results are available, use this to continue',
                        'diffto' => array( 'Revision ID to diff each revision to.',
                                'Use "prev", "next" and "cur" for the previous, next and current revision respectively' ),
-                       'difftotext' => array( 'Text to diff each revision to. Only diffs a limited number of revisions.',
-                               "Overrides {$p}diffto. If {$p}section is set, only that section will be diffed against this text" ),
+                       'difftotext' => array(
+                               'Text to diff each revision to. Only diffs a limited number of revisions.',
+                               "Overrides {$p}diffto. If {$p}section is set, only that section will be",
+                               'diffed against this text',
+                       ),
                        'tag' => 'Only list revisions tagged with this tag',
                        'contentformat' => 'Serialization format used for difftotext and expected for output of content',
                );
@@ -818,35 +867,50 @@ class ApiQueryRevisions extends ApiQueryBase {
        public function getPossibleErrors() {
                return array_merge( parent::getPossibleErrors(), array(
                        array( 'nosuchrevid', 'diffto' ),
-                       array( 'code' => 'revids', 'info' => 'The revids= parameter may not be used with the list options '
-                                       . '(limit, startid, endid, dirNewer, start, end).' ),
-                       array( 'code' => 'multpages', 'info' => 'titles, pageids or a generator was used to supply multiple pages, '
+                       array(
+                               'code' => 'revids',
+                               'info' => 'The revids= parameter may not be used with the list options '
+                                       . '(limit, startid, endid, dirNewer, start, end).'
+                       ),
+                       array(
+                               'code' => 'multpages',
+                               'info' => 'titles, pageids or a generator was used to supply multiple pages, '
                                        . ' but the limit, startid, endid, dirNewer, user, excludeuser, '
-                                       . 'start and end parameters may only be used on a single page.' ),
-                       array( 'code' => 'diffto', 'info' => 'rvdiffto must be set to a non-negative number, "prev", "next" or "cur"' ),
+                                       . 'start and end parameters may only be used on a single page.'
+                       ),
+                       array(
+                               'code' => 'diffto',
+                               'info' => 'rvdiffto must be set to a non-negative number, "prev", "next" or "cur"'
+                       ),
                        array( 'code' => 'badparams', 'info' => 'start and startid cannot be used together' ),
                        array( 'code' => 'badparams', 'info' => 'end and endid cannot be used together' ),
                        array( 'code' => 'badparams', 'info' => 'user and excludeuser cannot be used together' ),
                        array( 'code' => 'nosuchsection', 'info' => 'There is no section section in rID' ),
                        array( 'code' => 'badformat', 'info' => 'The requested serialization format can not be applied '
-                                                                                                       . ' to the page\'s content model' ),
+                               . ' to the page\'s content model' ),
                ) );
        }
 
        public function getExamples() {
                return array(
                        'Get data with content for the last revision of titles "API" and "Main Page"',
-                       '  api.php?action=query&prop=revisions&titles=API|Main%20Page&rvprop=timestamp|user|comment|content',
+                       '  api.php?action=query&prop=revisions&titles=API|Main%20Page&' .
+                               'rvprop=timestamp|user|comment|content',
                        'Get last 5 revisions of the "Main Page"',
-                       '  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&rvprop=timestamp|user|comment',
+                       '  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+                               'rvprop=timestamp|user|comment',
                        'Get first 5 revisions of the "Main Page"',
-                       '  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&rvprop=timestamp|user|comment&rvdir=newer',
+                       '  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+                               'rvprop=timestamp|user|comment&rvdir=newer',
                        'Get first 5 revisions of the "Main Page" made after 2006-05-01',
-                       '  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&rvprop=timestamp|user|comment&rvdir=newer&rvstart=20060501000000',
+                       '  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+                               'rvprop=timestamp|user|comment&rvdir=newer&rvstart=20060501000000',
                        'Get first 5 revisions of the "Main Page" that were not made made by anonymous user "127.0.0.1"',
-                       '  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&rvprop=timestamp|user|comment&rvexcludeuser=127.0.0.1',
+                       '  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+                               'rvprop=timestamp|user|comment&rvexcludeuser=127.0.0.1',
                        'Get first 5 revisions of the "Main Page" that were made by the user "MediaWiki default"',
-                       '  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&rvprop=timestamp|user|comment&rvuser=MediaWiki%20default',
+                       '  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+                               'rvprop=timestamp|user|comment&rvuser=MediaWiki%20default',
                );
        }
 
index 36b5597..4fedebc 100644 (file)
@@ -112,12 +112,12 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                        $totalhits = $matches->getTotalHits();
                        if ( $totalhits !== null ) {
                                $apiResult->addValue( array( 'query', 'searchinfo' ),
-                                               'totalhits', $totalhits );
+                                       'totalhits', $totalhits );
                        }
                }
                if ( isset( $searchInfo['suggestion'] ) && $matches->hasSuggestion() ) {
                        $apiResult->addValue( array( 'query', 'searchinfo' ),
-                                               'suggestion', $matches->getSuggestionQuery() );
+                               'suggestion', $matches->getSuggestionQuery() );
                }
 
                // Add the search results to the result
@@ -127,8 +127,9 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                $result = $matches->next();
 
                while ( $result ) {
-                       if ( ++ $count > $limit ) {
-                               // We've reached the one extra which shows that there are additional items to be had. Stop here...
+                       if ( ++$count > $limit ) {
+                               // We've reached the one extra which shows that there are
+                               // additional items to be had. Stop here...
                                $this->setContinueEnumParameter( 'offset', $params['offset'] + $params['limit'] );
                                break;
                        }
@@ -184,7 +185,7 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
 
                                // Add item to results and see whether it fits
                                $fit = $apiResult->addValue( array( 'query', $this->getModuleName() ),
-                                               null, $vals );
+                                       null, $vals );
                                if ( !$fit ) {
                                        $this->setContinueEnumParameter( 'offset', $params['offset'] + $count - 1 );
                                        break;
@@ -198,8 +199,8 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
 
                if ( is_null( $resultPageSet ) ) {
                        $apiResult->setIndexedTagName_internal( array(
-                                               'query', $this->getModuleName()
-                                       ), 'p' );
+                               'query', $this->getModuleName()
+                       ), 'p' );
                } else {
                        $resultPageSet->populateFromTitles( $titles );
                }
index ac9e85a..1c188da 100644 (file)
@@ -106,7 +106,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                                // Abuse siprop as a query-continue parameter
                                // and set it to all unprocessed props
                                $this->setContinueEnumParameter( 'prop', implode( '|',
-                                               array_diff( $params['prop'], $done ) ) );
+                                       array_diff( $params['prop'], $done ) ) );
                                break;
                        }
                        $done[] = $p;
@@ -114,9 +114,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        }
 
        protected function appendGeneralInfo( $property ) {
-               global $wgContLang,
-                       $wgDisableLangConversion,
-                       $wgDisableTitleConversion;
+               global $wgContLang, $wgDisableLangConversion, $wgDisableTitleConversion;
 
                $data = array();
                $mainPage = Title::newMainPage();
@@ -280,6 +278,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                }
 
                $this->getResult()->setIndexedTagName( $data, 'ns' );
+
                return $this->getResult()->addValue( 'query', $property, $data );
        }
 
@@ -303,6 +302,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                sort( $data );
 
                $this->getResult()->setIndexedTagName( $data, 'ns' );
+
                return $this->getResult()->addValue( 'query', $property, $data );
        }
 
@@ -318,6 +318,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        }
                }
                $this->getResult()->setIndexedTagName( $data, 'specialpage' );
+
                return $this->getResult()->addValue( 'query', $property, $data );
        }
 
@@ -334,6 +335,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        $data[] = $arr;
                }
                $this->getResult()->setIndexedTagName( $data, 'magicword' );
+
                return $this->getResult()->addValue( 'query', $property, $data );
        }
 
@@ -361,7 +363,9 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        if ( $row['iw_local'] == '1' ) {
                                $val['local'] = '';
                        }
-                       // $val['trans'] = intval( $row['iw_trans'] ); // should this be exposed?
+                       if ( $row['iw_trans'] == '1' ) {
+                               $val['trans'] = '';
+                       }
                        if ( isset( $langNames[$prefix] ) ) {
                                $val['language'] = $langNames[$prefix];
                        }
@@ -377,6 +381,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                }
 
                $this->getResult()->setIndexedTagName( $data, 'iw' );
+
                return $this->getResult()->addValue( 'query', $property, $data );
        }
 
@@ -386,7 +391,10 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                $lb = wfGetLB();
                if ( $includeAll ) {
                        if ( !$wgShowHostnames ) {
-                               $this->dieUsage( 'Cannot view all servers info unless $wgShowHostnames is true', 'includeAllDenied' );
+                               $this->dieUsage(
+                                       'Cannot view all servers info unless $wgShowHostnames is true',
+                                       'includeAllDenied'
+                               );
                        }
 
                        $lags = $lb->getLagTimes();
@@ -408,6 +416,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
 
                $result = $this->getResult();
                $result->setIndexedTagName( $data, 'db' );
+
                return $this->getResult()->addValue( 'query', $property, $data );
        }
 
@@ -448,7 +457,6 @@ class ApiQuerySiteinfo extends ApiQueryBase {
 
                                if ( $group == 'user' ) {
                                        $arr['number'] = SiteStats::users();
-
                                // '*' and autopromote groups have no size
                                } elseif ( $group !== '*' && !isset( $wgAutopromote[$group] ) ) {
                                        $arr['number'] = SiteStats::numberInGroup( $group );
@@ -474,6 +482,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                }
 
                $result->setIndexedTagName( $data, 'group' );
+
                return $result->addValue( 'query', $property, $data );
        }
 
@@ -485,6 +494,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        $data[] = array( 'ext' => $ext );
                }
                $this->getResult()->setIndexedTagName( $data, 'fe' );
+
                return $this->getResult()->addValue( 'query', $property, $data );
        }
 
@@ -519,18 +529,19 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                                        $ret['url'] = $ext['url'];
                                }
                                if ( isset( $ext['version'] ) ) {
-                                               $ret['version'] = $ext['version'];
+                                       $ret['version'] = $ext['version'];
                                } elseif ( isset( $ext['svn-revision'] ) &&
                                        preg_match( '/\$(?:Rev|LastChangedRevision|Revision): *(\d+)/',
-                                               $ext['svn-revision'], $m ) )
-                               {
-                                               $ret['version'] = 'r' . $m[1];
+                                               $ext['svn-revision'], $m )
+                               {
+                                       $ret['version'] = 'r' . $m[1];
                                }
                                $data[] = $ret;
                        }
                }
 
                $this->getResult()->setIndexedTagName( $data, 'ext' );
+
                return $this->getResult()->addValue( 'query', $property, $data );
        }
 
@@ -564,6 +575,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        $data[] = $lang;
                }
                $this->getResult()->setIndexedTagName( $data, 'lang' );
+
                return $this->getResult()->addValue( 'query', $property, $data );
        }
 
@@ -583,6 +595,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        $data[] = $skin;
                }
                $this->getResult()->setIndexedTagName( $data, 'skin' );
+
                return $this->getResult()->addValue( 'query', $property, $data );
        }
 
@@ -591,6 +604,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                $wgParser->firstCallInit();
                $tags = array_map( array( $this, 'formatParserTags' ), $wgParser->getTags() );
                $this->getResult()->setIndexedTagName( $tags, 't' );
+
                return $this->getResult()->addValue( 'query', $property, $tags );
        }
 
@@ -599,12 +613,14 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                $wgParser->firstCallInit();
                $hooks = $wgParser->getFunctionHooks();
                $this->getResult()->setIndexedTagName( $hooks, 'h' );
+
                return $this->getResult()->addValue( 'query', $property, $hooks );
        }
 
        public function appendVariables( $property ) {
                $variables = MagicWord::getVariableIDs();
                $this->getResult()->setIndexedTagName( $variables, 'v' );
+
                return $this->getResult()->addValue( 'query', $property, $variables );
        }
 
@@ -613,6 +629,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                // Make a copy of the global so we don't try to set the _element key of it - bug 45130
                $protocols = array_values( $wgUrlProtocols );
                $this->getResult()->setIndexedTagName( $protocols, 'p' );
+
                return $this->getResult()->addValue( 'query', $property, $protocols );
        }
 
@@ -637,6 +654,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                }
 
                $this->getResult()->setIndexedTagName( $data, 'hook' );
+
                return $this->getResult()->addValue( 'query', $property, $data );
        }
 
@@ -685,6 +703,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
 
        public function getParamDescription() {
                $p = $this->getModulePrefix();
+
                return array(
                        'prop' => array(
                                'Which sysinfo properties to get:',
@@ -694,14 +713,14 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                                ' specialpagealiases    - List of special page aliases',
                                ' magicwords            - List of magic words and their aliases',
                                ' statistics            - Returns site statistics',
-                               " interwikimap          - Returns interwiki map " .
+                               ' interwikimap          - Returns interwiki map ' .
                                        "(optionally filtered, (optionally localised by using {$p}inlanguagecode))",
                                ' dbrepllag             - Returns database server with the highest replication lag',
                                ' usergroups            - Returns user groups and the associated permissions',
                                ' extensions            - Returns extensions installed on the wiki',
                                ' fileextensions        - Returns list of file extensions allowed to be uploaded',
                                ' rightsinfo            - Returns wiki rights (license) information if available',
-                               " languages             - Returns a list of languages MediaWiki supports" .
+                               ' languages             - Returns a list of languages MediaWiki supports' .
                                        "(optionally localised by using {$p}inlanguagecode)",
                                ' skins                 - Returns a list of all enabled skins',
                                ' extensiontags         - Returns a list of parser extension tags',
@@ -713,7 +732,8 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        'filteriw' => 'Return only local or only nonlocal entries of the interwiki map',
                        'showalldb' => 'List all database servers, not just the one lagging the most',
                        'numberingroup' => 'Lists the number of users in user groups',
-                       'inlanguagecode' => 'Language code for localised language names (best effort, use CLDR extension)',
+                       'inlanguagecode' => 'Language code for localised language names ' .
+                               '(best effort, use CLDR extension)',
                );
        }
 
index 6899375..248b3d8 100644 (file)
@@ -60,7 +60,7 @@ class ApiQueryStashImageInfo extends ApiQueryImageInfo {
                                $result->addValue( array( 'query', $this->getModuleName() ), null, $imageInfo );
                                $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), $modulePrefix );
                        }
-               //TODO: update exception handling here to understand current getFile exceptions
+               // @todo Update exception handling here to understand current getFile exceptions
                } catch ( UploadStashNotAvailableException $e ) {
                        $this->dieUsage( "Session not available: " . $e->getMessage(), "nosession" );
                } catch ( UploadStashFileNotFoundException $e ) {
@@ -112,6 +112,7 @@ class ApiQueryStashImageInfo extends ApiQueryImageInfo {
         */
        public function getParamDescription() {
                $p = $this->getModulePrefix();
+
                return array(
                        'prop' => self::getPropertyDescriptions( $this->propertyFilter, $p ),
                        'filekey' => 'Key that identifies a previous upload that was stashed temporarily.',
@@ -134,8 +135,8 @@ class ApiQueryStashImageInfo extends ApiQueryImageInfo {
        public function getExamples() {
                return array(
                        'api.php?action=query&prop=stashimageinfo&siifilekey=124sd34rsdf567',
-                       'api.php?action=query&prop=stashimageinfo&siifilekey=b34edoe3|bceffd4&siiurlwidth=120&siiprop=url',
+                       'api.php?action=query&prop=stashimageinfo&siifilekey=b34edoe3|bceffd4&' .
+                               'siiurlwidth=120&siiprop=url',
                );
        }
-
 }
index 732df9a..33116ce 100644 (file)
@@ -38,7 +38,7 @@ class ApiQueryTags extends ApiQueryBase {
 
        private $limit;
        private $fld_displayname = false, $fld_description = false,
-                       $fld_hitcount = false;
+               $fld_hitcount = false;
 
        public function __construct( $query, $moduleName ) {
                parent::__construct( $query, $moduleName, 'tg' );
@@ -97,6 +97,7 @@ class ApiQueryTags extends ApiQueryBase {
 
                if ( ++$count > $this->limit ) {
                        $this->setContinueEnumParameter( 'continue', $tagName );
+
                        return false;
                }
 
@@ -121,6 +122,7 @@ class ApiQueryTags extends ApiQueryBase {
                $fit = $this->result->addValue( array( 'query', $this->getModuleName() ), null, $tag );
                if ( !$fit ) {
                        $this->setContinueEnumParameter( 'continue', $tagName );
+
                        return false;
                }
 
index 9a9be7b..6c7a57d 100644 (file)
@@ -37,8 +37,8 @@ class ApiQueryContributions extends ApiQueryBase {
 
        private $params, $prefixMode, $userprefix, $multiUserMode, $usernames, $parentLens;
        private $fld_ids = false, $fld_title = false, $fld_timestamp = false,
-                       $fld_comment = false, $fld_parsedcomment = false, $fld_flags = false,
-                       $fld_patrolled = false, $fld_tags = false, $fld_size = false, $fld_sizediff = false;
+               $fld_comment = false, $fld_parsedcomment = false, $fld_flags = false,
+               $fld_patrolled = false, $fld_tags = false, $fld_size = false, $fld_sizediff = false;
 
        public function execute() {
                // Parse some parameters
@@ -100,8 +100,9 @@ class ApiQueryContributions extends ApiQueryBase {
 
                // Fetch each row
                foreach ( $res as $row ) {
-                       if ( ++ $count > $limit ) {
-                               // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+                       if ( ++$count > $limit ) {
+                               // We've reached the one extra which shows that there are
+                               // additional pages to be had. Stop here...
                                if ( $this->multiUserMode ) {
                                        $this->setContinueEnumParameter( 'continue', $this->continueStr( $row ) );
                                } else {
@@ -122,7 +123,10 @@ class ApiQueryContributions extends ApiQueryBase {
                        }
                }
 
-               $this->getResult()->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'item' );
+               $this->getResult()->setIndexedTagName_internal(
+                       array( 'query', $this->getModuleName() ),
+                       'item'
+               );
        }
 
        /**
@@ -177,7 +181,8 @@ class ApiQueryContributions extends ApiQueryBase {
                }
                // We only want pages by the specified users.
                if ( $this->prefixMode ) {
-                       $this->addWhere( 'rev_user_text' . $this->getDB()->buildLike( $this->userprefix, $this->getDB()->anyString() ) );
+                       $this->addWhere( 'rev_user_text' .
+                               $this->getDB()->buildLike( $this->userprefix, $this->getDB()->anyString() ) );
                } else {
                        $this->addWhereFld( 'rev_user_text', $this->usernames );
                }
@@ -195,7 +200,8 @@ class ApiQueryContributions extends ApiQueryBase {
                if ( !is_null( $show ) ) {
                        $show = array_flip( $show );
                        if ( ( isset( $show['minor'] ) && isset( $show['!minor'] ) )
-                                       || ( isset( $show['patrolled'] ) && isset( $show['!patrolled'] ) ) ) {
+                               || ( isset( $show['patrolled'] ) && isset( $show['!patrolled'] ) )
+                       ) {
                                $this->dieUsageMsg( 'show' );
                        }
 
@@ -220,9 +226,13 @@ class ApiQueryContributions extends ApiQueryBase {
                ) );
 
                if ( isset( $show['patrolled'] ) || isset( $show['!patrolled'] ) ||
-                               $this->fld_patrolled ) {
+                       $this->fld_patrolled
+               ) {
                        if ( !$user->useRCPatrol() && !$user->useNPPatrol() ) {
-                               $this->dieUsage( 'You need the patrol right to request the patrolled flag', 'permissiondenied' );
+                               $this->dieUsage(
+                                       'You need the patrol right to request the patrolled flag',
+                                       'permissiondenied'
+                               );
                        }
 
                        // Use a redundant join condition on both
@@ -260,13 +270,17 @@ class ApiQueryContributions extends ApiQueryBase {
 
                if ( $this->fld_tags ) {
                        $this->addTables( 'tag_summary' );
-                       $this->addJoinConds( array( 'tag_summary' => array( 'LEFT JOIN', array( 'rev_id=ts_rev_id' ) ) ) );
+                       $this->addJoinConds(
+                               array( 'tag_summary' => array( 'LEFT JOIN', array( 'rev_id=ts_rev_id' ) ) )
+                       );
                        $this->addFields( 'ts_tags' );
                }
 
                if ( isset( $this->params['tag'] ) ) {
                        $this->addTables( 'change_tag' );
-                       $this->addJoinConds( array( 'change_tag' => array( 'INNER JOIN', array( 'rev_id=ct_rev_id' ) ) ) );
+                       $this->addJoinConds(
+                               array( 'change_tag' => array( 'INNER JOIN', array( 'rev_id=ct_rev_id' ) ) )
+                       );
                        $this->addWhereFld( 'ct_tag', $this->params['tag'] );
                        $index['change_tag'] = 'change_tag_tag_id';
                }
@@ -346,8 +360,13 @@ class ApiQueryContributions extends ApiQueryBase {
                        $vals['size'] = intval( $row->rev_len );
                }
 
-               if ( $this->fld_sizediff && !is_null( $row->rev_len ) && !is_null( $row->rev_parent_id ) ) {
-                       $parentLen = isset( $this->parentLens[$row->rev_parent_id] ) ? $this->parentLens[$row->rev_parent_id] : 0;
+               if ( $this->fld_sizediff
+                       && !is_null( $row->rev_len )
+                       && !is_null( $row->rev_parent_id )
+               ) {
+                       $parentLen = isset( $this->parentLens[$row->rev_parent_id] )
+                               ? $this->parentLens[$row->rev_parent_id]
+                               : 0;
                        $vals['sizediff'] = intval( $row->rev_len - $parentLen );
                }
 
@@ -439,13 +458,17 @@ class ApiQueryContributions extends ApiQueryBase {
        public function getParamDescription() {
                global $wgRCMaxAge;
                $p = $this->getModulePrefix();
+
                return array(
                        'limit' => 'The maximum number of contributions to return',
                        'start' => 'The start timestamp to return from',
                        'end' => 'The end timestamp to return to',
                        'continue' => 'When more results are available, use this to continue',
                        'user' => 'The users to retrieve contributions for',
-                       'userprefix' => "Retrieve contributions for all users whose names begin with this value. Overrides {$p}user",
+                       'userprefix' => array(
+                               "Retrieve contributions for all users whose names begin with this value.",
+                               "Overrides {$p}user",
+                       ),
                        'dir' => $this->getDirectionDescription( $p ),
                        'namespace' => 'Only list contributions in these namespaces',
                        'prop' => array(
@@ -461,8 +484,11 @@ class ApiQueryContributions extends ApiQueryBase {
                                ' patrolled      - Tags patrolled edits',
                                ' tags           - Lists tags for the edit',
                        ),
-                       'show' => array( "Show only items that meet this criteria, e.g. non minor edits only: {$p}show=!minor",
-                                       "NOTE: if {$p}show=patrolled or {$p}show=!patrolled is set, revisions older than \$wgRCMaxAge ($wgRCMaxAge) won't be shown", ),
+                       'show' => array(
+                               "Show only items that meet thse criteria, e.g. non minor edits only: {$p}show=!minor",
+                               "NOTE: If {$p}show=patrolled or {$p}show=!patrolled is set, revisions older than",
+                               "\$wgRCMaxAge ($wgRCMaxAge) won't be shown",
+                       ),
                        'tag' => 'Only list revisions tagged with this tag',
                        'toponly' => 'Only list changes which are the latest revision',
                );
@@ -536,7 +562,10 @@ class ApiQueryContributions extends ApiQueryBase {
                        array( 'code' => 'param_user', 'info' => 'User parameter may not be empty.' ),
                        array( 'code' => 'param_user', 'info' => 'User name user is not valid' ),
                        array( 'show' ),
-                       array( 'code' => 'permissiondenied', 'info' => 'You need the patrol right to request the patrolled flag' ),
+                       array(
+                               'code' => 'permissiondenied',
+                               'info' => 'You need the patrol right to request the patrolled flag'
+                       ),
                ) );
        }
 
index 3c85ea6..37cf483 100644 (file)
@@ -152,6 +152,7 @@ class ApiQueryUserInfo extends ApiQueryBase {
                        $result->setIndexedTagName( $acceptLang, 'lang' );
                        $vals['acceptlang'] = $acceptLang;
                }
+
                return $vals;
        }
 
@@ -188,6 +189,7 @@ class ApiQueryUserInfo extends ApiQueryBase {
                                }
                        }
                }
+
                return $retval;
        }
 
@@ -232,7 +234,8 @@ class ApiQueryUserInfo extends ApiQueryBase {
                                '  ratelimits       - Lists all rate limits applying to the current user',
                                '  realname         - Adds the user\'s real name',
                                '  email            - Adds the user\'s email address and email authentication date',
-                               '  acceptlang       - Echoes the Accept-Language header sent by the client in a structured format',
+                               '  acceptlang       - Echoes the Accept-Language header sent by ' .
+                                       'the client in a structured format',
                                '  registrationdate - Adds the user\'s registration date',
                        )
                );
index dccfee6..cd4a8fc 100644 (file)
@@ -58,6 +58,7 @@ class ApiQueryUsers extends ApiQueryBase {
                        'userrights' => array( 'ApiQueryUsers', 'getUserrightsToken' ),
                );
                wfRunHooks( 'APIQueryUsersTokens', array( &$this->tokenFunctions ) );
+
                return $this->tokenFunctions;
        }
 
@@ -67,6 +68,7 @@ class ApiQueryUsers extends ApiQueryBase {
         */
        public static function getUserrightsToken( $user ) {
                global $wgUser;
+
                // Since the permissions check for userrights is non-trivial,
                // don't bother with it here
                return $wgUser->getEditToken( $user->getName() );
@@ -90,10 +92,10 @@ class ApiQueryUsers extends ApiQueryBase {
                        if ( $n === false || $n === '' ) {
                                $vals = array( 'name' => $u, 'invalid' => '' );
                                $fit = $result->addValue( array( 'query', $this->getModuleName() ),
-                                               null, $vals );
+                                       null, $vals );
                                if ( !$fit ) {
                                        $this->setContinueEnumParameter( 'users',
-                                                       implode( '|', array_diff( $users, $done ) ) );
+                                               implode( '|', array_diff( $users, $done ) ) );
                                        $goodNames = array();
                                        break;
                                }
@@ -244,10 +246,10 @@ class ApiQueryUsers extends ApiQueryBase {
                        }
 
                        $fit = $result->addValue( array( 'query', $this->getModuleName() ),
-                                       null, $data[$u] );
+                               null, $data[$u] );
                        if ( !$fit ) {
                                $this->setContinueEnumParameter( 'users',
-                                               implode( '|', array_diff( $users, $done ) ) );
+                                       implode( '|', array_diff( $users, $done ) ) );
                                break;
                        }
                        $done[] = $u;
@@ -269,11 +271,7 @@ class ApiQueryUsers extends ApiQueryBase {
        }
 
        public function getCacheMode( $params ) {
-               if ( isset( $params['token'] ) ) {
-                       return 'private';
-               } else {
-                       return 'anon-public-user-private';
-               }
+               return isset( $params['token'] ) ? 'private' : 'anon-public-user-private';
        }
 
        public function getAllowedParams() {
@@ -312,7 +310,8 @@ class ApiQueryUsers extends ApiQueryBase {
                                '  rights         - Lists all the rights the user(s) has',
                                '  editcount      - Adds the user\'s edit count',
                                '  registration   - Adds the user\'s registration timestamp',
-                               '  emailable      - Tags if the user can and wants to receive email through [[Special:Emailuser]]',
+                               '  emailable      - Tags if the user can and wants to receive ' .
+                                       'email through [[Special:Emailuser]]',
                                '  gender         - Tags the gender of the user. Returns "male", "female", or "unknown"',
                        ),
                        'users' => 'A list of users to obtain the same information for',
index 22843f5..f9af75a 100644 (file)
@@ -44,9 +44,11 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                $this->run( $resultPageSet );
        }
 
-       private $fld_ids = false, $fld_title = false, $fld_patrol = false, $fld_flags = false,
-                       $fld_timestamp = false, $fld_user = false, $fld_comment = false, $fld_parsedcomment = false, $fld_sizes = false,
-                       $fld_notificationtimestamp = false, $fld_userid = false, $fld_loginfo = false;
+       private $fld_ids = false, $fld_title = false, $fld_patrol = false,
+               $fld_flags = false, $fld_timestamp = false, $fld_user = false,
+               $fld_comment = false, $fld_parsedcomment = false, $fld_sizes = false,
+               $fld_notificationtimestamp = false, $fld_userid = false,
+               $fld_loginfo = false;
 
        /**
         * @param $resultPageSet ApiPageSet
@@ -103,7 +105,10 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                        $this->addFieldsIf( 'rc_patrolled', $this->fld_patrol );
                        $this->addFieldsIf( array( 'rc_old_len', 'rc_new_len' ), $this->fld_sizes );
                        $this->addFieldsIf( 'wl_notificationtimestamp', $this->fld_notificationtimestamp );
-                       $this->addFieldsIf( array( 'rc_logid', 'rc_log_type', 'rc_log_action', 'rc_params' ), $this->fld_loginfo );
+                       $this->addFieldsIf(
+                               array( 'rc_logid', 'rc_log_type', 'rc_log_action', 'rc_params' ),
+                               $this->fld_loginfo
+                       );
                } elseif ( $params['allrev'] ) {
                        $this->addFields( 'rc_this_oldid' );
                } else {
@@ -121,7 +126,8 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                                'wl_user' => $userId,
                                'wl_namespace=rc_namespace',
                                'wl_title=rc_title'
-               ) ) ) );
+                       )
+               ) ) );
 
                $this->addWhere( array(
                        'rc_deleted' => 0,
@@ -144,9 +150,9 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
 
                        /* Check for conflicting parameters. */
                        if ( ( isset( $show['minor'] ) && isset( $show['!minor'] ) )
-                                       || ( isset( $show['bot'] ) && isset( $show['!bot'] ) )
-                                       || ( isset( $show['anon'] ) && isset( $show['!anon'] ) )
-                                       || ( isset( $show['patrolled'] ) && isset( $show['!patrolled'] ) )
+                               || ( isset( $show['bot'] ) && isset( $show['!bot'] ) )
+                               || ( isset( $show['anon'] ) && isset( $show['!anon'] ) )
+                               || ( isset( $show['patrolled'] ) && isset( $show['!patrolled'] ) )
                        ) {
                                $this->dieUsageMsg( 'show' );
                        }
@@ -155,7 +161,10 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                        if ( isset( $show['patrolled'] ) || isset( $show['!patrolled'] ) ) {
                                $user = $this->getUser();
                                if ( !$user->useRCPatrol() && !$user->useNPPatrol() ) {
-                                       $this->dieUsage( 'You need the patrol right to request the patrolled flag', 'permissiondenied' );
+                                       $this->dieUsage(
+                                               'You need the patrol right to request the patrolled flag',
+                                               'permissiondenied'
+                                       );
                                }
                        }
 
@@ -185,7 +194,10 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                }
 
                // This is an index optimization for mysql, as done in the Special:Watchlist page
-               $this->addWhereIf( "rc_timestamp > ''", !isset( $params['start'] ) && !isset( $params['end'] ) && $db->getType() == 'mysql' );
+               $this->addWhereIf(
+                       "rc_timestamp > ''",
+                       !isset( $params['start'] ) && !isset( $params['end'] ) && $db->getType() == 'mysql'
+               );
 
                $this->addOption( 'LIMIT', $params['limit'] + 1 );
 
@@ -194,9 +206,13 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                $res = $this->select( __METHOD__ );
 
                foreach ( $res as $row ) {
-                       if ( ++ $count > $params['limit'] ) {
-                               // We've reached the one extra which shows that there are additional pages to be had. Stop here...
-                               $this->setContinueEnumParameter( 'start', wfTimestamp( TS_ISO_8601, $row->rc_timestamp ) );
+                       if ( ++$count > $params['limit'] ) {
+                               // We've reached the one extra which shows that there are
+                               // additional pages to be had. Stop here...
+                               $this->setContinueEnumParameter(
+                                       'start',
+                                       wfTimestamp( TS_ISO_8601, $row->rc_timestamp )
+                               );
                                break;
                        }
 
@@ -205,7 +221,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                                $fit = $this->getResult()->addValue( array( 'query', $this->getModuleName() ), null, $vals );
                                if ( !$fit ) {
                                        $this->setContinueEnumParameter( 'start',
-                                                       wfTimestamp( TS_ISO_8601, $row->rc_timestamp ) );
+                                               wfTimestamp( TS_ISO_8601, $row->rc_timestamp ) );
                                        break;
                                }
                        } else {
@@ -218,7 +234,10 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                }
 
                if ( is_null( $resultPageSet ) ) {
-                       $this->getResult()->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'item' );
+                       $this->getResult()->setIndexedTagName_internal(
+                               array( 'query', $this->getModuleName() ),
+                               'item'
+                       );
                } elseif ( $params['allrev'] ) {
                        $resultPageSet->populateFromRevisionIDs( $ids );
                } else {
@@ -348,6 +367,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                        foreach ( $type as $t ) {
                                $retval[] = $this->parseRCType( $t );
                        }
+
                        return $retval;
                }
                switch ( $type ) {
@@ -446,6 +466,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
 
        public function getParamDescription() {
                $p = $this->getModulePrefix();
+
                return array(
                        'allrev' => 'Include multiple revisions of the same page within given timeframe',
                        'start' => 'The timestamp to start enumerating from',
@@ -482,12 +503,14 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                                ' log            - Log entries',
                        ),
                        'owner' => 'The name of the user whose watchlist you\'d like to access',
-                       'token' => 'Give a security token (settable in preferences) to allow access to another user\'s watchlist'
+                       'token' => 'Give a security token (settable in preferences) to ' .
+                               'allow access to another user\'s watchlist'
                );
        }
 
        public function getResultProperties() {
                global $wgLogTypes;
+
                return array(
                        '' => array(
                                'type' => array(
@@ -574,11 +597,18 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
        public function getPossibleErrors() {
                return array_merge( parent::getPossibleErrors(), array(
                        array( 'code' => 'bad_wlowner', 'info' => 'Specified user does not exist' ),
-                       array( 'code' => 'bad_wltoken', 'info' => 'Incorrect watchlist token provided -- please set a correct token in Special:Preferences' ),
+                       array(
+                               'code' => 'bad_wltoken',
+                               'info' => 'Incorrect watchlist token provided -- ' .
+                                       'please set a correct token in Special:Preferences'
+                       ),
                        array( 'code' => 'notloggedin', 'info' => 'You must be logged-in to have a watchlist' ),
                        array( 'code' => 'patrol', 'info' => 'patrol property is not available' ),
                        array( 'show' ),
-                       array( 'code' => 'permissiondenied', 'info' => 'You need the patrol right to request the patrolled flag' ),
+                       array(
+                               'code' => 'permissiondenied',
+                               'info' => 'You need the patrol right to request the patrolled flag'
+                       ),
                        array( 'code' => 'user-excludeuser', 'info' => 'user and excludeuser cannot be used together' ),
                ) );
        }
index ea4e724..b53bea1 100644 (file)
@@ -91,7 +91,7 @@ class ApiQueryWatchlistRaw extends ApiQueryGeneratorBase {
                        $this->addOption( 'ORDER BY', array(
                                'wl_namespace' . $sort,
                                'wl_title' . $sort
-                       ));
+                       ) );
                }
                $this->addOption( 'LIMIT', $params['limit'] + 1 );
                $res = $this->select( __METHOD__ );
@@ -100,7 +100,8 @@ class ApiQueryWatchlistRaw extends ApiQueryGeneratorBase {
                $count = 0;
                foreach ( $res as $row ) {
                        if ( ++$count > $params['limit'] ) {
-                               // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+                               // We've reached the one extra which shows that there are
+                               // additional pages to be had. Stop here...
                                $this->setContinueEnumParameter( 'continue', $row->wl_namespace . '|' . $row->wl_title );
                                break;
                        }
@@ -109,8 +110,7 @@ class ApiQueryWatchlistRaw extends ApiQueryGeneratorBase {
                        if ( is_null( $resultPageSet ) ) {
                                $vals = array();
                                ApiQueryBase::addTitleInfo( $vals, $t );
-                               if ( isset( $prop['changed'] ) && !is_null( $row->wl_notificationtimestamp ) )
-                               {
+                               if ( isset( $prop['changed'] ) && !is_null( $row->wl_notificationtimestamp ) ) {
                                        $vals['changed'] = wfTimestamp( TS_ISO_8601, $row->wl_notificationtimestamp );
                                }
                                $fit = $this->getResult()->addValue( $this->getModuleName(), null, $vals );
@@ -183,7 +183,8 @@ class ApiQueryWatchlistRaw extends ApiQueryGeneratorBase {
                        ),
                        'show' => 'Only list items that meet these criteria',
                        'owner' => 'The name of the user whose watchlist you\'d like to access',
-                       'token' => 'Give a security token (settable in preferences) to allow access to another user\'s watchlist',
+                       'token' => 'Give a security token (settable in preferences) to allow ' .
+                               'access to another user\'s watchlist',
                        'dir' => 'Direction to sort the titles and namespaces in',
                );
        }
@@ -212,7 +213,11 @@ class ApiQueryWatchlistRaw extends ApiQueryGeneratorBase {
                        array( 'code' => 'notloggedin', 'info' => 'You must be logged-in to have a watchlist' ),
                        array( 'show' ),
                        array( 'code' => 'bad_wlowner', 'info' => 'Specified user does not exist' ),
-                       array( 'code' => 'bad_wltoken', 'info' => 'Incorrect watchlist token provided -- please set a correct token in Special:Preferences' ),
+                       array(
+                               'code' => 'bad_wltoken',
+                               'info' => 'Incorrect watchlist token provided -- ' .
+                                       'please set a correct token in Special:Preferences'
+                       ),
                ) );
        }
 
index 39c114b..e922020 100644 (file)
@@ -26,9 +26,9 @@
 
 /**
  * This class represents the result of the API operations.
- * It simply wraps a nested array() structure, adding some functions to simplify array's modifications.
- * As various modules execute, they add different pieces of information to this result,
- * structuring it as it will be given to the client.
+ * It simply wraps a nested array() structure, adding some functions to simplify
+ * array's modifications. As various modules execute, they add different pieces
+ * of information to this result, structuring it as it will be given to the client.
  *
  * Each subarray may either be a dictionary - key-value pairs with unique keys,
  * or lists, where the items are added using $data[] = $value notation.
@@ -117,6 +117,7 @@ class ApiResult extends ApiBase {
                        // Objects can't always be cast to string
                        $s = strlen( $value );
                }
+
                return $s;
        }
 
@@ -150,14 +151,17 @@ class ApiResult extends ApiBase {
         * @param array $arr to add $value to
         * @param string $name Index of $arr to add $value at
         * @param $value mixed
-        * @param int $flags Zero or more OR-ed flags like OVERRIDE | ADD_ON_TOP. This parameter used to be
-        *        boolean, and the value of OVERRIDE=1 was specifically chosen so that it would be backwards
-        *        compatible with the new method signature.
+        * @param int $flags Zero or more OR-ed flags like OVERRIDE | ADD_ON_TOP.
+        *    This parameter used to be boolean, and the value of OVERRIDE=1 was
+        *    specifically chosen so that it would be backwards compatible with the
+        *    new method signature.
         *
         * @since 1.21 int $flags replaced boolean $override
         */
        public static function setElement( &$arr, $name, $value, $flags = 0 ) {
-               if ( $arr === null || $name === null || $value === null || !is_array( $arr ) || is_array( $name ) ) {
+               if ( $arr === null || $name === null || $value === null
+                       || !is_array( $arr ) || is_array( $name )
+               ) {
                        ApiBase::dieDebug( __METHOD__, 'Bad parameter' );
                }
 
@@ -176,7 +180,10 @@ class ApiResult extends ApiBase {
                                ApiBase::dieDebug( __METHOD__, "Attempting to merge element $name" );
                        }
                } else {
-                       ApiBase::dieDebug( __METHOD__, "Attempting to add element $name=$value, existing value is {$arr[$name]}" );
+                       ApiBase::dieDebug(
+                               __METHOD__,
+                               "Attempting to add element $name=$value, existing value is {$arr[$name]}"
+                       );
                }
        }
 
@@ -271,9 +278,10 @@ class ApiResult extends ApiBase {
         * @param $path array|string|null
         * @param $name string
         * @param $value mixed
-        * @param int $flags Zero or more OR-ed flags like OVERRIDE | ADD_ON_TOP. This parameter used to be
-        *        boolean, and the value of OVERRIDE=1 was specifically chosen so that it would be backwards
-        *        compatible with the new method signature.
+        * @param int $flags Zero or more OR-ed flags like OVERRIDE | ADD_ON_TOP. This
+        *    parameter used to be boolean, and the value of OVERRIDE=1 was specifically
+        *    chosen so that it would be backwards compatible with the new method
+        *    signature.
         * @return bool True if $value fits in the result, false if not
         *
         * @since 1.21 int $flags replaced boolean $override
@@ -287,7 +295,8 @@ class ApiResult extends ApiBase {
                        if ( $newsize > $wgAPIMaxResultSize ) {
                                $this->setWarning(
                                        "This result was truncated because it would otherwise be larger than the " .
-                                                       "limit of {$wgAPIMaxResultSize} bytes" );
+                                               "limit of {$wgAPIMaxResultSize} bytes" );
+
                                return false;
                        }
                        $this->mSize = $newsize;
@@ -322,6 +331,7 @@ class ApiResult extends ApiBase {
                        // Add named element
                        self::setElement( $data, $name, $value, $flags );
                }
+
                return true;
        }
 
@@ -394,6 +404,7 @@ class ApiResult extends ApiBase {
                        $result[] = $error;
                }
                $this->setIndexedTagName( $result, $errorType );
+
                return $result;
        }
 
index b9873f4..2a372e4 100644 (file)
@@ -47,7 +47,14 @@ class ApiRollback extends ApiBase {
                $pageObj = WikiPage::factory( $titleObj );
                $summary = $params['summary'];
                $details = array();
-               $retval = $pageObj->doRollback( $this->getRbUser(), $summary, $params['token'], $params['markbot'], $details, $this->getUser() );
+               $retval = $pageObj->doRollback(
+                       $this->getRbUser(),
+                       $summary,
+                       $params['token'],
+                       $params['markbot'],
+                       $details,
+                       $this->getUser()
+               );
 
                if ( $retval ) {
                        // We don't care about multiple errors, just report one of them
@@ -107,11 +114,14 @@ class ApiRollback extends ApiBase {
        public function getParamDescription() {
                return array(
                        'title' => 'Title of the page you want to rollback.',
-                       'user' => 'Name of the user whose edits are to be rolled back. If set incorrectly, you\'ll get a badtoken error.',
-                       'token' => "A rollback token previously retrieved through {$this->getModulePrefix()}prop=revisions",
+                       'user' => 'Name of the user whose edits are to be rolled back. If ' .
+                               'set incorrectly, you\'ll get a badtoken error.',
+                       'token' => 'A rollback token previously retrieved through ' .
+                               "{$this->getModulePrefix()}prop=revisions",
                        'summary' => 'Custom edit summary. If empty, default summary will be used',
                        'markbot' => 'Mark the reverted edits and the revert as bot edits',
-                       'watchlist' => 'Unconditionally add or remove the page from your watchlist, use preferences or do not change watch',
+                       'watchlist' => 'Unconditionally add or remove the page from your watchlist, ' .
+                               'use preferences or do not change watch',
                );
        }
 
@@ -130,8 +140,8 @@ class ApiRollback extends ApiBase {
 
        public function getDescription() {
                return array(
-                       'Undo the last edit to the page. If the last user who edited the page made multiple edits in a row,',
-                       'they will all be rolled back'
+                       'Undo the last edit to the page. If the last user who edited the page made',
+                       'multiple edits in a row, they will all be rolled back'
                );
        }
 
@@ -194,7 +204,8 @@ class ApiRollback extends ApiBase {
        public function getExamples() {
                return array(
                        'api.php?action=rollback&title=Main%20Page&user=Catrope&token=123ABC',
-                       'api.php?action=rollback&title=Main%20Page&user=217.121.114.116&token=123ABC&summary=Reverting%20vandalism&markbot=1'
+                       'api.php?action=rollback&title=Main%20Page&user=217.121.114.116&' .
+                               'token=123ABC&summary=Reverting%20vandalism&markbot=1'
                );
        }
 
index d219c91..e01f0fa 100644 (file)
@@ -107,6 +107,7 @@ class ApiRsd extends ApiBase {
                        ),
                );
                wfRunHooks( 'ApiRsdServiceApis', array( &$apis ) );
+
                return $apis;
        }
 
@@ -149,6 +150,7 @@ class ApiRsd extends ApiBase {
                        }
                        $outputData[] = $data;
                }
+
                return $outputData;
        }
 }
index 53a68fd..dc593e5 100644 (file)
@@ -48,7 +48,10 @@ class ApiSetNotificationTimestamp extends ApiBase {
 
                $pageSet = $this->getPageSet();
                if ( $params['entirewatchlist'] && $pageSet->getDataSource() !== null ) {
-                       $this->dieUsage( "Cannot use 'entirewatchlist' at the same time as '{$pageSet->getDataSource()}'", 'multisource' );
+                       $this->dieUsage(
+                               "Cannot use 'entirewatchlist' at the same time as '{$pageSet->getDataSource()}'",
+                               'multisource'
+                       );
                }
 
                $dbw = wfGetDB( DB_MASTER, 'api' );
@@ -95,7 +98,9 @@ class ApiSetNotificationTimestamp extends ApiBase {
                                __METHOD__
                        );
 
-                       $result['notificationtimestamp'] = ( is_null( $timestamp ) ? '' : wfTimestamp( TS_ISO_8601, $timestamp ) );
+                       $result['notificationtimestamp'] = is_null( $timestamp )
+                               ? ''
+                               : wfTimestamp( TS_ISO_8601, $timestamp );
                } else {
                        // First, log the invalid titles
                        foreach ( $pageSet->getInvalidTitles() as $title ) {
@@ -128,7 +133,9 @@ class ApiSetNotificationTimestamp extends ApiBase {
 
                        // Query the results of our update
                        $timestamps = array();
-                       $res = $dbw->select( 'watchlist', array( 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ),
+                       $res = $dbw->select(
+                               'watchlist',
+                               array( 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ),
                                array( 'wl_user' => $user->getID(), $lb->constructSet( 'wl', $dbw ) ),
                                __METHOD__
                        );
@@ -172,6 +179,7 @@ class ApiSetNotificationTimestamp extends ApiBase {
                if ( !isset( $this->mPageSet ) ) {
                        $this->mPageSet = new ApiPageSet( $this );
                }
+
                return $this->mPageSet;
        }
 
@@ -210,8 +218,8 @@ class ApiSetNotificationTimestamp extends ApiBase {
                if ( $flags ) {
                        $result += $this->getPageSet()->getFinalParams( $flags );
                }
-               return $result;
 
+               return $result;
        }
 
        public function getParamDescription() {
@@ -271,6 +279,7 @@ class ApiSetNotificationTimestamp extends ApiBase {
 
        public function getPossibleErrors() {
                $ps = $this->getPageSet();
+
                return array_merge(
                        parent::getPossibleErrors(),
                        $ps->getFinalPossibleErrors(),
@@ -279,7 +288,8 @@ class ApiSetNotificationTimestamp extends ApiBase {
                        $this->getRequireOnlyOneParameterErrorMessages(
                                array_merge( array( 'entirewatchlist' ), array_keys( $ps->getFinalParams() ) ) ),
                        array(
-                               array( 'code' => 'notloggedin', 'info' => 'Anonymous users cannot use watchlist change notifications' ),
+                               array( 'code' => 'notloggedin', 'info'
+                               => 'Anonymous users cannot use watchlist change notifications' ),
                                array( 'code' => 'multpages', 'info' => 'torevid may only be used with a single page' ),
                                array( 'code' => 'multpages', 'info' => 'newerthanrevid may only be used with a single page' ),
                        )
@@ -288,9 +298,14 @@ class ApiSetNotificationTimestamp extends ApiBase {
 
        public function getExamples() {
                return array(
-                       'api.php?action=setnotificationtimestamp&entirewatchlist=&token=123ABC' => 'Reset the notification status for the entire watchlist',
-                       'api.php?action=setnotificationtimestamp&titles=Main_page&token=123ABC' => 'Reset the notification status for "Main page"',
-                       'api.php?action=setnotificationtimestamp&titles=Main_page&timestamp=2012-01-01T00:00:00Z&token=123ABC' => 'Set the notification timestamp for "Main page" so all edits since 1 January 2012 are unviewed',
+                       'api.php?action=setnotificationtimestamp&entirewatchlist=&token=123ABC'
+                               => 'Reset the notification status for the entire watchlist',
+                       'api.php?action=setnotificationtimestamp&titles=Main_page&token=123ABC'
+                               => 'Reset the notification status for "Main page"',
+                       'api.php?action=setnotificationtimestamp&titles=Main_page&' .
+                               'timestamp=2012-01-01T00:00:00Z&token=123ABC'
+                               => 'Set the notification timestamp for "Main page" so all edits ' .
+                                       'since 1 January 2012 are unviewed',
                );
        }
 
index d220a5e..6862668 100644 (file)
@@ -67,6 +67,7 @@ class ApiTokens extends ApiBase {
                wfRunHooks( 'ApiTokensGetTokenTypes', array( &$types ) );
                ksort( $types );
                wfProfileOut( __METHOD__ );
+
                return $types;
        }
 
index 6a739a2..dabb8da 100644 (file)
@@ -96,9 +96,12 @@ class ApiUnblock extends ApiBase {
 
        public function getParamDescription() {
                $p = $this->getModulePrefix();
+
                return array(
-                       'id' => "ID of the block you want to unblock (obtained through list=blocks). Cannot be used together with {$p}user",
-                       'user' => "Username, IP address or IP range you want to unblock. Cannot be used together with {$p}id",
+                       'id' => "ID of the block you want to unblock (obtained through list=blocks). ' .
+                               'Cannot be used together with {$p}user",
+                       'user' => "Username, IP address or IP range you want to unblock. ' .
+                               'Cannot be used together with {$p}id",
                        'token' => "An unblock token previously obtained through prop=info",
                        'reason' => 'Reason for unblock',
                );
index 4bbe568..93cefef 100644 (file)
@@ -122,8 +122,10 @@ class ApiUndelete extends ApiBase {
                        'title' => 'Title of the page you want to restore',
                        'token' => 'An undelete token previously retrieved through list=deletedrevs',
                        'reason' => 'Reason for restoring',
-                       'timestamps' => 'Timestamps of the revisions to restore. If not set, all revisions will be restored.',
-                       'watchlist' => 'Unconditionally add or remove the page from your watchlist, use preferences or do not change watch',
+                       'timestamps' => 'Timestamps of the revisions to restore. If not set, all ' .
+                               'revisions will be restored.',
+                       'watchlist' => 'Unconditionally add or remove the page from your ' .
+                               'watchlist, use preferences or do not change watch',
                );
        }
 
@@ -140,8 +142,8 @@ class ApiUndelete extends ApiBase {
 
        public function getDescription() {
                return array(
-                       'Restore certain revisions of a deleted page. A list of deleted revisions (including timestamps) can be',
-                       'retrieved through list=deletedrevs'
+                       'Restore certain revisions of a deleted page. A list of deleted revisions ',
+                       '(including timestamps) can be retrieved through list=deletedrevs'
                );
        }
 
index 467eccf..1a642b9 100644 (file)
@@ -141,6 +141,7 @@ class ApiUpload extends ApiBase {
                        // Stash the file and get stash result
                        return $this->getStashResult( $warnings );
                }
+
                // This is the most common case -- a normal upload with no warnings
                // performUpload will return a formatted properly for the API with status
                return $this->performUpload( $warnings );
@@ -165,6 +166,7 @@ class ApiUpload extends ApiBase {
                } catch ( MWException $e ) {
                        $this->dieUsage( $e->getMessage(), 'stashfailed' );
                }
+
                return $result;
        }
 
@@ -185,6 +187,7 @@ class ApiUpload extends ApiBase {
                } catch ( MWException $e ) {
                        $result['warnings']['stashfailed'] = $e->getMessage();
                }
+
                return $result;
        }
 
@@ -217,6 +220,7 @@ class ApiUpload extends ApiBase {
                                $chunkPath, $chunkSize, $this->mParams['offset'] );
                        if ( !$status->isGood() ) {
                                $this->dieUsage( $status->getWikiText(), 'stashfailed' );
+
                                return array();
                        }
                }
@@ -252,6 +256,7 @@ class ApiUpload extends ApiBase {
                                $status = $this->mUpload->concatenateChunks();
                                if ( !$status->isGood() ) {
                                        $this->dieUsage( $status->getWikiText(), 'stashfailed' );
+
                                        return array();
                                }
 
@@ -265,6 +270,7 @@ class ApiUpload extends ApiBase {
                }
                $result['filekey'] = $filekey;
                $result['offset'] = $this->mParams['offset'] + $chunkSize;
+
                return $result;
        }
 
@@ -287,6 +293,7 @@ class ApiUpload extends ApiBase {
                        wfDebug( __METHOD__ . ' ' . $message . "\n" );
                        throw new MWException( $message );
                }
+
                return $fileKey;
        }
 
@@ -341,6 +348,7 @@ class ApiUpload extends ApiBase {
                        }
                        unset( $progress['status'] ); // remove Status object
                        $this->getResult()->addValue( null, $this->getModuleName(), $progress );
+
                        return false;
                }
 
@@ -357,6 +365,7 @@ class ApiUpload extends ApiBase {
                                $sessionData['sessionkey'] = $this->mParams['statuskey'];
                        }
                        $this->getResult()->addValue( null, $this->getModuleName(), $sessionData );
+
                        return false;
                }
 
@@ -449,9 +458,9 @@ class ApiUpload extends ApiBase {
                if ( $permission !== true ) {
                        if ( !$user->isLoggedIn() ) {
                                $this->dieUsageMsg( array( 'mustbeloggedin', 'upload' ) );
-                       } else {
-                               $this->dieUsageMsg( 'badaccess-groups' );
                        }
+
+                       $this->dieUsageMsg( 'badaccess-groups' );
                }
        }
 
@@ -481,7 +490,7 @@ class ApiUpload extends ApiBase {
                                break;
                        case UploadBase::ILLEGAL_FILENAME:
                                $this->dieRecoverableError( 'illegal-filename', 'filename',
-                                               array( 'filename' => $verification['filtered'] ) );
+                                       array( 'filename' => $verification['filtered'] ) );
                                break;
                        case UploadBase::FILENAME_TOO_LONG:
                                $this->dieRecoverableError( 'filename-toolong', 'filename' );
@@ -521,15 +530,15 @@ class ApiUpload extends ApiBase {
                        case UploadBase::VERIFICATION_ERROR:
                                $this->getResult()->setIndexedTagName( $verification['details'], 'detail' );
                                $this->dieUsage( 'This file did not pass file verification', 'verification-error',
-                                               0, array( 'details' => $verification['details'] ) );
+                                       0, array( 'details' => $verification['details'] ) );
                                break;
                        case UploadBase::HOOK_ABORTED:
                                $this->dieUsage( "The modification you tried to make was aborted by an extension hook",
-                                               'hookaborted', 0, array( 'error' => $verification['error'] ) );
+                                       'hookaborted', 0, array( 'error' => $verification['error'] ) );
                                break;
                        default:
                                $this->dieUsage( 'An unknown error occurred', 'unknown-error',
-                                               0, array( 'code' => $verification['status'] ) );
+                                       0, array( 'code' => $verification['status'] ) );
                                break;
                }
        }
@@ -565,10 +574,13 @@ class ApiUpload extends ApiBase {
                        if ( isset( $warnings['exists'] ) ) {
                                $warning = $warnings['exists'];
                                unset( $warnings['exists'] );
-                               $localFile = isset( $warning['normalizedFile'] ) ? $warning['normalizedFile'] : $warning['file'];
+                               $localFile = isset( $warning['normalizedFile'] )
+                                       ? $warning['normalizedFile']
+                                       : $warning['file'];
                                $warnings[$warning['warning']] = $localFile->getName();
                        }
                }
+
                return $warnings;
        }
 
@@ -587,7 +599,19 @@ class ApiUpload extends ApiBase {
 
                /** @var $file File */
                $file = $this->mUpload->getLocalFile();
-               $watch = $this->getWatchlistValue( $this->mParams['watchlist'], $file->getTitle() );
+
+               // For preferences mode, we want to watch if 'watchdefault' is set or
+               // if the *file* doesn't exist and 'watchcreations' is set. But
+               // getWatchlistValue()'s automatic handling checks if the *title*
+               // exists or not, so we need to check both prefs manually.
+               $watch = $this->getWatchlistValue(
+                       $this->mParams['watchlist'], $file->getTitle(), 'watchdefault'
+               );
+               if ( !$watch && $this->mParams['watchlist'] == 'preferences' && !$file->exists() ) {
+                       $watch = $this->getWatchlistValue(
+                               $this->mParams['watchlist'], $file->getTitle(), 'watchcreations'
+                       );
+               }
 
                // Deprecated parameters
                if ( $this->mParams['watch'] ) {
@@ -637,11 +661,10 @@ class ApiUpload extends ApiBase {
                                                'result' => 'Queued',
                                                'statuskey' => $error[0][1],
                                        );
-                               } else {
-                                       $this->getResult()->setIndexedTagName( $error, 'error' );
-
-                                       $this->dieUsage( 'An internal error occurred', 'internal-error', 0, $error );
                                }
+
+                               $this->getResult()->setIndexedTagName( $error, 'error' );
+                               $this->dieUsage( 'An internal error occurred', 'internal-error', 0, $error );
                        }
                        $result['result'] = 'Success';
                }
@@ -729,16 +752,19 @@ class ApiUpload extends ApiBase {
                $params = array(
                        'filename' => 'Target filename',
                        'token' => 'Edit token. You can get one of these through prop=info',
-                       'comment' => 'Upload comment. Also used as the initial page text for new files if "text" is not specified',
+                       'comment' => 'Upload comment. Also used as the initial page text for new ' .
+                               'files if "text" is not specified',
                        'text' => 'Initial page text for new files',
                        'watch' => 'Watch the page',
-                       'watchlist' => 'Unconditionally add or remove the page from your watchlist, use preferences or do not change watch',
+                       'watchlist' => 'Unconditionally add or remove the page from your watchlist, ' .
+                               'use preferences or do not change watch',
                        'ignorewarnings' => 'Ignore any warnings',
                        'file' => 'File contents',
                        'url' => 'URL to fetch the file from',
                        'filekey' => 'Key that identifies a previous upload that was stashed temporarily.',
                        'sessionkey' => 'Same as filekey, maintained for backward compatibility.',
-                       'stash' => 'If set, the server will not add the file to the repository and stash it temporarily.',
+                       'stash' => 'If set, the server will not add the file to the repository ' .
+                               'and stash it temporarily.',
 
                        'chunk' => 'Chunk contents',
                        'offset' => 'Offset of chunk in bytes',
@@ -752,7 +778,6 @@ class ApiUpload extends ApiBase {
                );
 
                return $params;
-
        }
 
        public function getResultProperties() {
@@ -837,7 +862,8 @@ class ApiUpload extends ApiBase {
 
        public function getExamples() {
                return array(
-                       'api.php?action=upload&filename=Wiki.png&url=http%3A//upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png'
+                       'api.php?action=upload&filename=Wiki.png' .
+                       '&url=http%3A//upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png'
                                => 'Upload from a URL',
                        'api.php?action=upload&filename=Wiki.png&filekey=filekey&ignorewarnings=1'
                                => 'Complete an upload that failed due to warnings',
index 7d30828..be98a21 100644 (file)
@@ -41,10 +41,10 @@ class ApiUserrights extends ApiBase {
                $form->setContext( $this->getContext() );
                $r['user'] = $user->getName();
                $r['userid'] = $user->getId();
-               list( $r['added'], $r['removed'] ) =
-                       $form->doSaveUserGroups(
-                               $user, (array)$params['add'],
-                               (array)$params['remove'], $params['reason'] );
+               list( $r['added'], $r['removed'] ) = $form->doSaveUserGroups(
+                       $user, (array)$params['add'],
+                       (array)$params['remove'], $params['reason']
+               );
 
                $result = $this->getResult();
                $result->setIndexedTagName( $r['added'], 'group' );
@@ -67,12 +67,11 @@ class ApiUserrights extends ApiBase {
                $status = $form->fetchUser( $params['user'] );
                if ( !$status->isOK() ) {
                        $this->dieStatus( $status );
-               } else {
-                       $user = $status->value;
                }
 
-               $this->mUser = $user;
-               return $user;
+               $this->mUser = $status->value;
+
+               return $status->value;
        }
 
        public function mustBePosted() {
index c7d636a..7ad286f 100644 (file)
@@ -49,21 +49,26 @@ class ApiWatch extends ApiBase {
 
                $res = array( 'title' => $title->getPrefixedText() );
 
-               // Currently unnecessary, code to act as a safeguard against any change in current behavior of uselang
+               // Currently unnecessary, code to act as a safeguard against any change
+               // in current behavior of uselang.
                // Copy from ApiParse
                $oldLang = null;
-               if ( isset( $params['uselang'] ) && $params['uselang'] != $this->getContext()->getLanguage()->getCode() ) {
+               if ( isset( $params['uselang'] ) &&
+                       $params['uselang'] != $this->getContext()->getLanguage()->getCode()
+               ) {
                        $oldLang = $this->getContext()->getLanguage(); // Backup language
                        $this->getContext()->setLanguage( Language::factory( $params['uselang'] ) );
                }
 
                if ( $params['unwatch'] ) {
                        $res['unwatched'] = '';
-                       $res['message'] = $this->msg( 'removedwatchtext', $title->getPrefixedText() )->title( $title )->parseAsBlock();
+                       $res['message'] = $this->msg( 'removedwatchtext', $title->getPrefixedText() )
+                               ->title( $title )->parseAsBlock();
                        $status = UnwatchAction::doUnwatch( $title, $user );
                } else {
                        $res['watched'] = '';
-                       $res['message'] = $this->msg( 'addedwatchtext', $title->getPrefixedText() )->title( $title )->parseAsBlock();
+                       $res['message'] = $this->msg( 'addedwatchtext', $title->getPrefixedText() )
+                               ->title( $title )->parseAsBlock();
                        $status = WatchAction::doWatch( $title, $user );
                }
 
index 193f20f..8eed1a5 100644 (file)
@@ -48,6 +48,7 @@ class BacklinkCache {
        /**
         * Multi dimensions array representing batches. Keys are:
         *  > (string) links table name
+        *   > (int) batch size
         *    > 'numRows' : Number of rows for this link table
         *    > 'batches' : array( $start, $end )
         *
@@ -107,6 +108,7 @@ class BacklinkCache {
                if ( !self::$cache->has( $dbKey, 'obj', 3600 ) ) {
                        self::$cache->set( $dbKey, 'obj', new self( $title ) );
                }
+
                return self::$cache->get( $dbKey, 'obj' );
        }
 
@@ -148,6 +150,7 @@ class BacklinkCache {
                if ( !isset( $this->db ) ) {
                        $this->db = wfGetDB( DB_SLAVE );
                }
+
                return $this->db;
        }
 
@@ -169,16 +172,17 @@ class BacklinkCache {
         * @param $startId Integer|false
         * @param $endId Integer|false
         * @param $max Integer|INF
+        * @param $select string 'all' or 'ids'
         * @return ResultWrapper
         */
-       protected function queryLinks( $table, $startId, $endId, $max ) {
+       protected function queryLinks( $table, $startId, $endId, $max, $select = 'all' ) {
                wfProfileIn( __METHOD__ );
 
                $fromField = $this->getPrefix( $table ) . '_from';
 
                if ( !$startId && !$endId && is_infinite( $max )
-                       && isset( $this->fullResultCache[$table] ) )
-               {
+                       && isset( $this->fullResultCache[$table] )
+               {
                        wfDebug( __METHOD__ . ": got results from cache\n" );
                        $res = $this->fullResultCache[$table];
                } else {
@@ -192,20 +196,34 @@ class BacklinkCache {
                        if ( $endId ) {
                                $conds[] = "$fromField <= " . intval( $endId );
                        }
-                       $options = array( 'STRAIGHT_JOIN', 'ORDER BY' => $fromField );
+                       $options = array( 'ORDER BY' => $fromField );
                        if ( is_finite( $max ) && $max > 0 ) {
                                $options['LIMIT'] = $max;
                        }
 
-                       $res = $this->getDB()->select(
-                               array( $table, 'page' ),
-                               array( 'page_namespace', 'page_title', 'page_id' ),
-                               $conds,
-                               __METHOD__,
-                               $options
-                       );
+                       if ( $select === 'ids' ) {
+                               // Just select from the backlink table and ignore the page JOIN
+                               $res = $this->getDB()->select(
+                                       $table,
+                                       array( $this->getPrefix( $table ) . '_from AS page_id' ),
+                                       array_filter( $conds, function ( $clause ) { // kind of janky
+                                               return !preg_match( '/(\b|=)page_id(\b|=)/', $clause );
+                                       } ),
+                                       __METHOD__,
+                                       $options
+                               );
+                       } else {
+                               // Select from the backlink table and JOIN with page title information
+                               $res = $this->getDB()->select(
+                                       array( $table, 'page' ),
+                                       array( 'page_namespace', 'page_title', 'page_id' ),
+                                       $conds,
+                                       __METHOD__,
+                                       array_merge( array( 'STRAIGHT_JOIN' ), $options )
+                               );
+                       }
 
-                       if ( !$startId && !$endId && $res->numRows() < $max ) {
+                       if ( $select === 'all' && !$startId && !$endId && $res->numRows() < $max ) {
                                // The full results fit within the limit, so cache them
                                $this->fullResultCache[$table] = $res;
                        } else {
@@ -214,6 +232,7 @@ class BacklinkCache {
                }
 
                wfProfileOut( __METHOD__ );
+
                return $res;
        }
 
@@ -280,13 +299,13 @@ class BacklinkCache {
                        case 'imagelinks':
                                $conds = array(
                                        'il_to' => $this->title->getDBkey(),
-                                       'page_id=il_from'
+                                       "page_id={$prefix}_from"
                                );
                                break;
                        case 'categorylinks':
                                $conds = array(
                                        'cl_to' => $this->title->getDBkey(),
-                                       'page_id=cl_from',
+                                       "page_id={$prefix}_from"
                                );
                                break;
                        default:
@@ -316,11 +335,12 @@ class BacklinkCache {
         * @return integer
         */
        public function getNumLinks( $table, $max = INF ) {
-               global $wgMemc;
+               global $wgMemc, $wgUpdateRowsPerJob;
 
                // 1) try partition cache ...
                if ( isset( $this->partitionCache[$table] ) ) {
                        $entry = reset( $this->partitionCache[$table] );
+
                        return min( $max, $entry['numRows'] );
                }
 
@@ -338,9 +358,17 @@ class BacklinkCache {
                }
 
                // 4) fetch from the database ...
-               $count = $this->getLinks( $table, false, false, $max )->count();
-               if ( $count < $max ) { // full count
-                       $wgMemc->set( $memcKey, $count, self::CACHE_EXPIRY );
+               if ( is_infinite( $max ) ) { // no limit at all
+                       // Use partition() since it will batch the query and skip the JOIN.
+                       // Use $wgUpdateRowsPerJob just to encourage cache reuse for jobs.
+                       $this->partition( $table, $wgUpdateRowsPerJob ); // updates $this->partitionCache
+                       return $this->partitionCache[$table][$wgUpdateRowsPerJob]['numRows'];
+               } else { // probably some sane limit
+                       // Fetch the full title info, since the caller will likely need it next
+                       $count = $this->getLinks( $table, false, false, $max )->count();
+                       if ( $count < $max ) { // full count
+                               $wgMemc->set( $memcKey, $count, self::CACHE_EXPIRY );
+                       }
                }
 
                return min( $max, $count );
@@ -361,6 +389,7 @@ class BacklinkCache {
                // 1) try partition cache ...
                if ( isset( $this->partitionCache[$table][$batchSize] ) ) {
                        wfDebug( __METHOD__ . ": got from partition cache\n" );
+
                        return $this->partitionCache[$table][$batchSize]['batches'];
                }
 
@@ -371,6 +400,7 @@ class BacklinkCache {
                if ( isset( $this->fullResultCache[$table] ) ) {
                        $cacheEntry = $this->partitionResult( $this->fullResultCache[$table], $batchSize );
                        wfDebug( __METHOD__ . ": got from full result cache\n" );
+
                        return $cacheEntry['batches'];
                }
 
@@ -386,6 +416,7 @@ class BacklinkCache {
                if ( is_array( $memcValue ) ) {
                        $cacheEntry = $memcValue;
                        wfDebug( __METHOD__ . ": got from memcached $memcKey\n" );
+
                        return $cacheEntry['batches'];
                }
 
@@ -396,7 +427,7 @@ class BacklinkCache {
                $selectSize = max( $batchSize, 200000 - ( 200000 % $batchSize ) );
                $start = false;
                do {
-                       $res = $this->queryLinks( $table, $start, false, $selectSize );
+                       $res = $this->queryLinks( $table, $start, false, $selectSize, 'ids' );
                        $partitions = $this->partitionResult( $res, $batchSize, false );
                        // Merge the link count and range partitions for this chunk
                        $cacheEntry['numRows'] += $partitions['numRows'];
@@ -420,6 +451,7 @@ class BacklinkCache {
                $wgMemc->set( $memcKey, $cacheEntry['numRows'], self::CACHE_EXPIRY );
 
                wfDebug( __METHOD__ . ": got from database\n" );
+
                return $cacheEntry['batches'];
        }
 
index 32bcdf7..b7d0a7c 100644 (file)
@@ -28,8 +28,8 @@
  * @ingroup Cache
  */
 class DependencyWrapper {
-       var $value;
-       var $deps;
+       private $value;
+       private $deps;
 
        /**
         * Create an instance.
@@ -110,8 +110,8 @@ class DependencyWrapper {
         *    callback was defined.
         */
        static function getValueFromCache( $cache, $key, $expiry = 0, $callback = false,
-               $callbackParams = array(), $deps = array() )
-       {
+               $callbackParams = array(), $deps = array()
+       {
                $obj = $cache->get( $key );
 
                if ( is_object( $obj ) && $obj instanceof DependencyWrapper && !$obj->isExpired() ) {
@@ -141,14 +141,16 @@ abstract class CacheDependency {
        /**
         * Hook to perform any expensive pre-serialize loading of dependency values.
         */
-       function loadDependencyValues() { }
+       function loadDependencyValues() {
+       }
 }
 
 /**
  * @ingroup Cache
  */
 class FileDependency extends CacheDependency {
-       var $filename, $timestamp;
+       private $filename;
+       private $timestamp;
 
        /**
         * Create a file dependency
@@ -172,6 +174,7 @@ class FileDependency extends CacheDependency {
         */
        function __sleep() {
                $this->loadDependencyValues();
+
                return array( 'filename', 'timestamp' );
        }
 
@@ -198,6 +201,7 @@ class FileDependency extends CacheDependency {
                        } else {
                                # Deleted
                                wfDebug( "Dependency triggered: {$this->filename} deleted.\n" );
+
                                return true;
                        }
                } else {
@@ -205,6 +209,7 @@ class FileDependency extends CacheDependency {
                        if ( $lastmod > $this->timestamp ) {
                                # Modified or created
                                wfDebug( "Dependency triggered: {$this->filename} changed.\n" );
+
                                return true;
                        } else {
                                # Not modified
@@ -214,186 +219,12 @@ class FileDependency extends CacheDependency {
        }
 }
 
-/**
- * @ingroup Cache
- */
-class TitleDependency extends CacheDependency {
-       var $titleObj;
-       var $ns, $dbk;
-       var $touched;
-
-       /**
-        * Construct a title dependency
-        * @param $title Title
-        */
-       function __construct( Title $title ) {
-               $this->titleObj = $title;
-               $this->ns = $title->getNamespace();
-               $this->dbk = $title->getDBkey();
-       }
-
-       function loadDependencyValues() {
-               $this->touched = $this->getTitle()->getTouched();
-       }
-
-       /**
-        * Get rid of bulky Title object for sleep
-        *
-        * @return array
-        */
-       function __sleep() {
-               return array( 'ns', 'dbk', 'touched' );
-       }
-
-       /**
-        * @return Title
-        */
-       function getTitle() {
-               if ( !isset( $this->titleObj ) ) {
-                       $this->titleObj = Title::makeTitle( $this->ns, $this->dbk );
-               }
-
-               return $this->titleObj;
-       }
-
-       /**
-        * @return bool
-        */
-       function isExpired() {
-               $touched = $this->getTitle()->getTouched();
-
-               if ( $this->touched === false ) {
-                       if ( $touched === false ) {
-                               # Still missing
-                               return false;
-                       } else {
-                               # Created
-                               return true;
-                       }
-               } elseif ( $touched === false ) {
-                       # Deleted
-                       return true;
-               } elseif ( $touched > $this->touched ) {
-                       # Updated
-                       return true;
-               } else {
-                       # Unmodified
-                       return false;
-               }
-       }
-}
-
-/**
- * @ingroup Cache
- */
-class TitleListDependency extends CacheDependency {
-       var $linkBatch;
-       var $timestamps;
-
-       /**
-        * Construct a dependency on a list of titles
-        * @param $linkBatch LinkBatch
-        */
-       function __construct( LinkBatch $linkBatch ) {
-               $this->linkBatch = $linkBatch;
-       }
-
-       /**
-        * @return array
-        */
-       function calculateTimestamps() {
-               # Initialise values to false
-               $timestamps = array();
-
-               foreach ( $this->getLinkBatch()->data as $ns => $dbks ) {
-                       if ( count( $dbks ) > 0 ) {
-                               $timestamps[$ns] = array();
-
-                               foreach ( $dbks as $dbk => $value ) {
-                                       $timestamps[$ns][$dbk] = false;
-                               }
-                       }
-               }
-
-               # Do the query
-               if ( count( $timestamps ) ) {
-                       $dbr = wfGetDB( DB_SLAVE );
-                       $where = $this->getLinkBatch()->constructSet( 'page', $dbr );
-                       $res = $dbr->select(
-                               'page',
-                               array( 'page_namespace', 'page_title', 'page_touched' ),
-                               $where,
-                               __METHOD__
-                       );
-
-                       foreach ( $res as $row ) {
-                               $timestamps[$row->page_namespace][$row->page_title] = $row->page_touched;
-                       }
-               }
-
-               return $timestamps;
-       }
-
-       function loadDependencyValues() {
-               $this->timestamps = $this->calculateTimestamps();
-       }
-
-       /**
-        * @return array
-        */
-       function __sleep() {
-               return array( 'timestamps' );
-       }
-
-       /**
-        * @return LinkBatch
-        */
-       function getLinkBatch() {
-               if ( !isset( $this->linkBatch ) ) {
-                       $this->linkBatch = new LinkBatch;
-                       $this->linkBatch->setArray( $this->timestamps );
-               }
-               return $this->linkBatch;
-       }
-
-       /**
-        * @return bool
-        */
-       function isExpired() {
-               $newTimestamps = $this->calculateTimestamps();
-
-               foreach ( $this->timestamps as $ns => $dbks ) {
-                       foreach ( $dbks as $dbk => $oldTimestamp ) {
-                               $newTimestamp = $newTimestamps[$ns][$dbk];
-
-                               if ( $oldTimestamp === false ) {
-                                       if ( $newTimestamp === false ) {
-                                               # Still missing
-                                       } else {
-                                               # Created
-                                               return true;
-                                       }
-                               } elseif ( $newTimestamp === false ) {
-                                       # Deleted
-                                       return true;
-                               } elseif ( $newTimestamp > $oldTimestamp ) {
-                                       # Updated
-                                       return true;
-                               } else {
-                                       # Unmodified
-                               }
-                       }
-               }
-
-               return false;
-       }
-}
-
 /**
  * @ingroup Cache
  */
 class GlobalDependency extends CacheDependency {
-       var $name, $value;
+       private $name;
+       private $value;
 
        function __construct( $name ) {
                $this->name = $name;
@@ -407,6 +238,7 @@ class GlobalDependency extends CacheDependency {
                if ( !isset( $GLOBALS[$this->name] ) ) {
                        return true;
                }
+
                return $GLOBALS[$this->name] != $this->value;
        }
 }
@@ -415,7 +247,8 @@ class GlobalDependency extends CacheDependency {
  * @ingroup Cache
  */
 class ConstantDependency extends CacheDependency {
-       var $name, $value;
+       private $name;
+       private $value;
 
        function __construct( $name ) {
                $this->name = $name;
index d4bf5ee..d33f3f6 100644 (file)
@@ -51,6 +51,7 @@ abstract class FileCacheBase {
         */
        final protected function baseCacheDirectory() {
                global $wgFileCacheDirectory;
+
                return $wgFileCacheDirectory;
        }
 
@@ -91,6 +92,7 @@ abstract class FileCacheBase {
                if ( $this->mCached === null ) {
                        $this->mCached = file_exists( $this->cachePath() );
                }
+
                return $this->mCached;
        }
 
@@ -100,6 +102,7 @@ abstract class FileCacheBase {
         */
        public function cacheTimestamp() {
                $timestamp = filemtime( $this->cachePath() );
+
                return ( $timestamp !== false )
                        ? wfTimestamp( TS_MW, $timestamp )
                        : false;
@@ -120,7 +123,8 @@ abstract class FileCacheBase {
 
                $cachetime = $this->cacheTimestamp();
                $good = ( $timestamp <= $cachetime && $wgCacheEpoch <= $cachetime );
-               wfDebug( __METHOD__ . ": cachetime $cachetime, touched '{$timestamp}' epoch {$wgCacheEpoch}, good $good\n" );
+               wfDebug( __METHOD__ .
+                       ": cachetime $cachetime, touched '{$timestamp}' epoch {$wgCacheEpoch}, good $good\n" );
 
                return $good;
        }
@@ -140,6 +144,7 @@ abstract class FileCacheBase {
        public function fetchText() {
                if ( $this->useGzip() ) {
                        $fh = gzopen( $this->cachePath(), 'rb' );
+
                        return stream_get_contents( $fh );
                } else {
                        return file_get_contents( $this->cachePath() );
@@ -165,10 +170,12 @@ abstract class FileCacheBase {
                if ( !file_put_contents( $this->cachePath(), $text, LOCK_EX ) ) {
                        wfDebug( __METHOD__ . "() failed saving " . $this->cachePath() . "\n" );
                        $this->mCached = null;
+
                        return false;
                }
 
                $this->mCached = true;
+
                return $text;
        }
 
@@ -262,6 +269,7 @@ abstract class FileCacheBase {
         */
        public function getMissesRecent() {
                global $wgMemc;
+
                return self::MISS_FACTOR * $wgMemc->get( $this->cacheMissKey() );
        }
 
index a933527..285675d 100644 (file)
@@ -41,10 +41,12 @@ class GenderCache {
                if ( $that === null ) {
                        $that = new self();
                }
+
                return $that;
        }
 
-       protected function __construct() {}
+       protected function __construct() {
+       }
 
        /**
         * Returns the default gender option in this wiki.
@@ -54,6 +56,7 @@ class GenderCache {
                if ( $this->default === null ) {
                        $this->default = User::getDefaultOption( 'gender' );
                }
+
                return $this->default;
        }
 
@@ -77,8 +80,8 @@ class GenderCache {
                                        $this->misses++;
                                        wfDebug( __METHOD__ . ": too many misses, returning default onwards\n" );
                                }
-                               return $this->getDefault();
 
+                               return $this->getDefault();
                        } else {
                                $this->misses++;
                                $this->doQuery( $username, $caller );
@@ -184,6 +187,7 @@ class GenderCache {
                if ( $indexSlash !== false ) {
                        $username = substr( $username, 0, $indexSlash );
                }
+
                // normalize underscore/spaces
                return strtr( $username, '_', ' ' );
        }
index ab37911..2629995 100644 (file)
@@ -94,6 +94,7 @@ class HTMLFileCache extends FileCacheBase {
                }
                if ( $wgShowIPinHeader || $wgDebugToolbar ) {
                        wfDebug( "HTML file cache skipped. Either \$wgShowIPinHeader and/or \$wgDebugToolbar on\n" );
+
                        return false;
                }
 
@@ -109,6 +110,7 @@ class HTMLFileCache extends FileCacheBase {
                        } elseif ( $query === 'maxage' || $query === 'smaxage' ) {
                                continue;
                        }
+
                        return false;
                }
                $user = $context->getUser();
@@ -116,6 +118,7 @@ class HTMLFileCache extends FileCacheBase {
                // and extensions for auto-detecting user language.
                $ulang = $context->getLanguage()->getCode();
                $clang = $wgContLang->getCode();
+
                // Check that there are no other sources of variation
                return !$user->getId() && !$user->getNewtalk() && $ulang == $clang;
        }
@@ -185,6 +188,7 @@ class HTMLFileCache extends FileCacheBase {
                        // @todo Ugly wfClientAcceptsGzip() function - use context!
                        if ( wfClientAcceptsGzip() ) {
                                header( 'Content-Encoding: gzip' );
+
                                return $compressed;
                        } else {
                                return $text;
index 48b60aa..1a20ab4 100644 (file)
@@ -31,7 +31,7 @@ class LinkBatch {
        /**
         * 2-d array, first index namespace, second index dbkey, value arbitrary
         */
-       var $data = array();
+       public $data = array();
 
        /**
         * For debugging which method is using this class.
@@ -117,6 +117,7 @@ class LinkBatch {
         */
        public function execute() {
                $linkCache = LinkCache::singleton();
+
                return $this->executeInto( $linkCache );
        }
 
@@ -133,6 +134,7 @@ class LinkBatch {
                $this->doGenderQuery();
                $ids = $this->addResultToCache( $cache, $res );
                wfProfileOut( __METHOD__ );
+
                return $ids;
        }
 
@@ -170,6 +172,7 @@ class LinkBatch {
                                $ids[$title->getPrefixedDBkey()] = 0;
                        }
                }
+
                return $ids;
        }
 
@@ -197,6 +200,7 @@ class LinkBatch {
                }
                $res = $dbr->select( $table, $fields, $conds, $caller );
                wfProfileOut( __METHOD__ );
+
                return $res;
        }
 
@@ -217,6 +221,7 @@ class LinkBatch {
 
                $genderCache = GenderCache::singleton();
                $genderCache->doLinkBatch( $this->data, $this->caller );
+
                return true;
        }
 
index 6ac7e7a..0d706c0 100644 (file)
@@ -51,6 +51,7 @@ class LinkCache {
                        return self::$instance;
                }
                self::$instance = new LinkCache;
+
                return self::$instance;
        }
 
@@ -122,21 +123,24 @@ class LinkCache {
        /**
         * Add a link for the title to the link cache
         *
-        * @param $id Integer: page's ID
-        * @param $title Title object
-        * @param $len Integer: text's length
-        * @param $redir Integer: whether the page is a redirect
-        * @param $revision Integer: latest revision's ID
-        * @param $model Integer: latest revision's content model ID
+        * @param int $id Page's ID
+        * @param Title $title
+        * @param int $len Text's length
+        * @param int $redir Whether the page is a redirect
+        * @param int $revision Latest revision's ID
+        * @param int $model Latest revision's content model ID
         */
-       public function addGoodLinkObj( $id, $title, $len = -1, $redir = null, $revision = false, $model = false ) {
+       public function addGoodLinkObj( $id, $title, $len = -1, $redir = null,
+               $revision = 0, $model = 0
+       ) {
                $dbkey = $title->getPrefixedDBkey();
-               $this->mGoodLinks[$dbkey] = intval( $id );
+               $this->mGoodLinks[$dbkey] = (int)$id;
                $this->mGoodLinkFields[$dbkey] = array(
-                       'length' => intval( $len ),
-                       'redirect' => intval( $redir ),
-                       'revision' => intval( $revision ),
-                       'model' => intval( $model ) );
+                       'length' => (int)$len,
+                       'redirect' => (int)$redir,
+                       'revision' => (int)$revision,
+                       'model' => (int)$model
+               );
        }
 
        /**
@@ -218,16 +222,19 @@ class LinkCache {
                $key = $nt->getPrefixedDBkey();
                if ( $this->isBadLink( $key ) || $nt->isExternal() ) {
                        wfProfileOut( __METHOD__ );
+
                        return 0;
                }
                $id = $this->getGoodLinkID( $key );
                if ( $id != 0 ) {
                        wfProfileOut( __METHOD__ );
+
                        return $id;
                }
 
                if ( $key === '' ) {
                        wfProfileOut( __METHOD__ );
+
                        return 0;
                }
 
@@ -262,6 +269,7 @@ class LinkCache {
                }
 
                wfProfileOut( __METHOD__ );
+
                return $id;
        }
 
index c5a153a..7d029bc 100644 (file)
@@ -36,19 +36,19 @@ define( 'MW_LC_VERSION', 2 );
  */
 class LocalisationCache {
        /** Configuration associative array */
-       var $conf;
+       private $conf;
 
        /**
         * True if recaching should only be done on an explicit call to recache().
         * Setting this reduces the overhead of cache freshness checking, which
         * requires doing a stat() for every extension i18n file.
         */
-       var $manualRecache = false;
+       private $manualRecache = false;
 
        /**
         * True to treat all files as expired until they are regenerated by this object.
         */
-       var $forceRecache = false;
+       private $forceRecache = false;
 
        /**
         * The cache data. 3-d array, where the first key is the language code,
@@ -56,14 +56,14 @@ class LocalisationCache {
         * an item specific subkey index. Some items are not arrays and so for those
         * items, there are no subkeys.
         */
-       var $data = array();
+       protected $data = array();
 
        /**
         * The persistent store object. An instance of LCStore.
         *
         * @var LCStore
         */
-       var $store;
+       private $store;
 
        /**
         * A 2-d associative array, code/key, where presence indicates that the item
@@ -72,32 +72,32 @@ class LocalisationCache {
         * For split items, if set, this indicates that all of the subitems have been
         * loaded.
         */
-       var $loadedItems = array();
+       private $loadedItems = array();
 
        /**
         * A 3-d associative array, code/key/subkey, where presence indicates that
         * the subitem is loaded. Only used for the split items, i.e. messages.
         */
-       var $loadedSubitems = array();
+       private $loadedSubitems = array();
 
        /**
         * An array where presence of a key indicates that that language has been
         * initialised. Initialisation includes checking for cache expiry and doing
         * any necessary updates.
         */
-       var $initialisedLangs = array();
+       private $initialisedLangs = array();
 
        /**
         * An array mapping non-existent pseudo-languages to fallback languages. This
         * is filled by initShallowFallback() when data is requested from a language
         * that lacks a Messages*.php file.
         */
-       var $shallowFallbacks = array();
+       private $shallowFallbacks = array();
 
        /**
         * An array where the keys are codes that have been recached by this instance.
         */
-       var $recachedLangs = array();
+       private $recachedLangs = array();
 
        /**
         * All item keys
@@ -158,7 +158,7 @@ class LocalisationCache {
         * Associative array of cached plural rules. The key is the language code,
         * the value is an array of plural rules for that language.
         */
-       var $pluralRules = null;
+       private $pluralRules = null;
 
        /**
         * Associative array of cached plural rule types. The key is the language
@@ -172,9 +172,9 @@ class LocalisationCache {
         * example, {{plural:count|wordform1|wordform2|wordform3}}, rather than
         * {{plural:count|one=wordform1|two=wordform2|many=wordform3}}.
         */
-       var $pluralRuleTypes = null;
+       private $pluralRuleTypes = null;
 
-       var $mergeableKeys = null;
+       private $mergeableKeys = null;
 
        /**
         * Constructor.
@@ -195,16 +195,16 @@ class LocalisationCache {
                        switch ( $conf['store'] ) {
                                case 'files':
                                case 'file':
-                                       $storeClass = 'LCStore_CDB';
+                                       $storeClass = 'LCStoreCDB';
                                        break;
                                case 'db':
-                                       $storeClass = 'LCStore_DB';
+                                       $storeClass = 'LCStoreDB';
                                        break;
                                case 'accel':
-                                       $storeClass = 'LCStore_Accel';
+                                       $storeClass = 'LCStoreAccel';
                                        break;
                                case 'detect':
-                                       $storeClass = $wgCacheDirectory ? 'LCStore_CDB' : 'LCStore_DB';
+                                       $storeClass = $wgCacheDirectory ? 'LCStoreCDB' : 'LCStoreDB';
                                        break;
                                default:
                                        throw new MWException(
@@ -241,6 +241,7 @@ class LocalisationCache {
                                self::$magicWordKeys
                        ) );
                }
+
                return isset( $this->mergeableKeys[$key] );
        }
 
@@ -276,7 +277,8 @@ class LocalisationCache {
         */
        public function getSubitem( $code, $key, $subkey ) {
                if ( !isset( $this->loadedSubitems[$code][$key][$subkey] ) &&
-                        !isset( $this->loadedItems[$code][$key] ) ) {
+                       !isset( $this->loadedItems[$code][$key] )
+               ) {
                        wfProfileIn( __METHOD__ . '-load' );
                        $this->loadSubitem( $code, $key, $subkey );
                        wfProfileOut( __METHOD__ . '-load' );
@@ -331,6 +333,7 @@ class LocalisationCache {
 
                if ( isset( $this->shallowFallbacks[$code] ) ) {
                        $this->loadItem( $this->shallowFallbacks[$code], $key );
+
                        return;
                }
 
@@ -358,6 +361,7 @@ class LocalisationCache {
        protected function loadSubitem( $code, $key, $subkey ) {
                if ( !in_array( $key, self::$splitKeys ) ) {
                        $this->loadItem( $code, $key );
+
                        return;
                }
 
@@ -367,12 +371,14 @@ class LocalisationCache {
 
                // Check to see if initLanguage() loaded it for us
                if ( isset( $this->loadedItems[$code][$key] ) ||
-                        isset( $this->loadedSubitems[$code][$key][$subkey] ) ) {
+                       isset( $this->loadedSubitems[$code][$key][$subkey] )
+               ) {
                        return;
                }
 
                if ( isset( $this->shallowFallbacks[$code] ) ) {
                        $this->loadSubitem( $this->shallowFallbacks[$code], $key, $subkey );
+
                        return;
                }
 
@@ -391,15 +397,17 @@ class LocalisationCache {
        public function isExpired( $code ) {
                if ( $this->forceRecache && !isset( $this->recachedLangs[$code] ) ) {
                        wfDebug( __METHOD__ . "($code): forced reload\n" );
+
                        return true;
                }
 
                $deps = $this->store->get( $code, 'deps' );
                $keys = $this->store->get( $code, 'list' );
                $preload = $this->store->get( $code, 'preload' );
-               // Different keys may expire separately, at least in LCStore_Accel
+               // Different keys may expire separately, at least in LCStoreAccel
                if ( $deps === null || $keys === null || $preload === null ) {
                        wfDebug( __METHOD__ . "($code): cache missing, need to make one\n" );
+
                        return true;
                }
 
@@ -411,6 +419,7 @@ class LocalisationCache {
                        if ( !$dep instanceof CacheDependency || $dep->isExpired() ) {
                                wfDebug( __METHOD__ . "($code): cache for $code expired due to " .
                                        get_class( $dep ) . "\n" );
+
                                return true;
                        }
                }
@@ -433,6 +442,7 @@ class LocalisationCache {
                # If the code is of the wrong form for a Messages*.php file, do a shallow fallback
                if ( !Language::isValidBuiltInCode( $code ) ) {
                        $this->initShallowFallback( $code, 'en' );
+
                        return;
                }
 
@@ -445,6 +455,7 @@ class LocalisationCache {
                        } else {
                                $this->initShallowFallback( $code, 'en' );
                        }
+
                        return;
                }
 
@@ -458,6 +469,7 @@ class LocalisationCache {
                                                'Please run maintenance/rebuildLocalisationCache.php.' );
                                }
                                $this->initShallowFallback( $code, 'en' );
+
                                return;
                        } else {
                                throw new MWException( 'Invalid or missing localisation cache.' );
@@ -511,6 +523,7 @@ class LocalisationCache {
                        throw new MWException( __METHOD__ . ": Invalid file type: $_fileType" );
                }
                wfProfileOut( __METHOD__ );
+
                return $data;
        }
 
@@ -527,8 +540,10 @@ class LocalisationCache {
                        $compiledRules = CLDRPluralRuleEvaluator::compile( $rules );
                } catch ( CLDRPluralRuleError $e ) {
                        wfDebugLog( 'l10n', $e->getMessage() . "\n" );
+
                        return array();
                }
+
                return $compiledRules;
        }
 
@@ -616,6 +631,7 @@ class LocalisationCache {
                $fileName = Language::getMessagesFileName( $code );
                if ( !file_exists( $fileName ) ) {
                        wfProfileOut( __METHOD__ );
+
                        return false;
                }
 
@@ -633,6 +649,7 @@ class LocalisationCache {
                $deps['plurals-mw'] = new FileDependency( "$IP/languages/data/plurals-mediawiki.xml" );
 
                wfProfileOut( __METHOD__ );
+
                return $data;
        }
 
@@ -747,7 +764,6 @@ class LocalisationCache {
                        foreach ( $data as $key => $value ) {
                                $this->mergeItem( $key, $coreData[$key], $value );
                        }
-
                }
 
                # Fill in the fallback if it's not there already
@@ -885,7 +901,7 @@ class LocalisationCache {
                # Clear out the MessageBlobStore
                # HACK: If using a null (i.e. disabled) storage backend, we
                # can't write to the MessageBlobStore either
-               if ( !$this->store instanceof LCStore_Null ) {
+               if ( !$this->store instanceof LCStoreNull ) {
                        MessageBlobStore::clear();
                }
 
@@ -950,7 +966,7 @@ class LocalisationCache {
         * Disable the storage backend
         */
        public function disableBackend() {
-               $this->store = new LCStore_Null;
+               $this->store = new LCStoreNull;
                $this->manualRecache = false;
        }
 }
@@ -1005,9 +1021,9 @@ interface LCStore {
  * This will work if one of XCache, WinCache or APC cacher is configured.
  * (See ObjectCache.php)
  */
-class LCStore_Accel implements LCStore {
-       var $currentLang;
-       var $keys;
+class LCStoreAccel implements LCStore {
+       private $currentLang;
+       private $keys;
 
        public function __construct() {
                $this->cache = wfGetCache( CACHE_ACCEL );
@@ -1016,6 +1032,7 @@ class LCStore_Accel implements LCStore {
        public function get( $code, $key ) {
                $k = wfMemcKey( 'l10n', $code, 'k', $key );
                $r = $this->cache->get( $k );
+
                return $r === false ? null : $r;
        }
 
@@ -1053,16 +1070,16 @@ class LCStore_Accel implements LCStore {
  * LCStore implementation which uses the standard DB functions to store data.
  * This will work on any MediaWiki installation.
  */
-class LCStore_DB implements LCStore {
-       var $currentLang;
-       var $writesDone = false;
+class LCStoreDB implements LCStore {
+       private $currentLang;
+       private $writesDone = false;
 
        /**
         * @var DatabaseBase
         */
-       var $dbw;
-       var $batch;
-       var $readOnly = false;
+       private $dbw;
+       private $batch;
+       private $readOnly = false;
 
        public function get( $code, $key ) {
                if ( $this->writesDone ) {
@@ -1096,6 +1113,7 @@ class LCStore_DB implements LCStore {
                        if ( $this->dbw->wasReadOnlyError() ) {
                                $this->readOnly = true;
                                $this->dbw->rollback( __METHOD__ );
+
                                return;
                        } else {
                                throw $e;
@@ -1155,8 +1173,11 @@ class LCStore_DB implements LCStore {
  *
  * See Cdb.php and http://cr.yp.to/cdb.html
  */
-class LCStore_CDB implements LCStore {
-       var $readers, $writer, $currentLang, $directory;
+class LCStoreCDB implements LCStore {
+       private $readers;
+       private $writer;
+       private $currentLang;
+       private $directory;
 
        function __construct( $conf = array() ) {
                global $wgCacheDirectory;
@@ -1187,6 +1208,7 @@ class LCStore_CDB implements LCStore {
                        if ( $value === false ) {
                                return null;
                        }
+
                        return unserialize( $value );
                }
        }
@@ -1227,6 +1249,7 @@ class LCStore_CDB implements LCStore {
                if ( strval( $code ) === '' || strpos( $code, '/' ) !== false ) {
                        throw new MWException( __METHOD__ . ": Invalid language \"$code\"" );
                }
+
                return "{$this->directory}/l10n_cache-$code.cdb";
        }
 }
@@ -1234,38 +1257,43 @@ class LCStore_CDB implements LCStore {
 /**
  * Null store backend, used to avoid DB errors during install
  */
-class LCStore_Null implements LCStore {
+class LCStoreNull implements LCStore {
        public function get( $code, $key ) {
                return null;
        }
 
-       public function startWrite( $code ) {}
-       public function finishWrite() {}
-       public function set( $key, $value ) {}
+       public function startWrite( $code ) {
+       }
+
+       public function finishWrite() {
+       }
+
+       public function set( $key, $value ) {
+       }
 }
 
 /**
  * A localisation cache optimised for loading large amounts of data for many
  * languages. Used by rebuildLocalisationCache.php.
  */
-class LocalisationCache_BulkLoad extends LocalisationCache {
+class LocalisationCacheBulkLoad extends LocalisationCache {
        /**
         * A cache of the contents of data files.
         * Core files are serialized to avoid using ~1GB of RAM during a recache.
         */
-       var $fileCache = array();
+       private $fileCache = array();
 
        /**
         * Most recently used languages. Uses the linked-list aspect of PHP hashtables
         * to keep the most recently used language codes at the end of the array, and
         * the language codes that are ready to be deleted at the beginning.
         */
-       var $mruLangs = array();
+       private $mruLangs = array();
 
        /**
         * Maximum number of languages that may be loaded into $this->data
         */
-       var $maxLoadedLangs = 10;
+       private $maxLoadedLangs = 10;
 
        /**
         * @param $fileName
@@ -1301,6 +1329,7 @@ class LocalisationCache_BulkLoad extends LocalisationCache {
        public function getItem( $code, $key ) {
                unset( $this->mruLangs[$code] );
                $this->mruLangs[$code] = true;
+
                return parent::getItem( $code, $key );
        }
 
@@ -1313,6 +1342,7 @@ class LocalisationCache_BulkLoad extends LocalisationCache {
        public function getSubitem( $code, $key, $subkey ) {
                unset( $this->mruLangs[$code] );
                $this->mruLangs[$code] = true;
+
                return parent::getSubitem( $code, $key, $subkey );
        }
 
index a92c87f..8b52728 100644 (file)
@@ -110,6 +110,7 @@ class MessageCache {
                                $wgMsgCacheExpiry
                        );
                }
+
                return self::$instance;
        }
 
@@ -147,6 +148,7 @@ class MessageCache {
                        $this->mParserOptions = new ParserOptions;
                        $this->mParserOptions->setEditSection( false );
                }
+
                return $this->mParserOptions;
        }
 
@@ -179,9 +181,11 @@ class MessageCache {
                                $serialized .= fread( $file, 100000 );
                        }
                        fclose( $file );
+
                        return unserialize( $serialized );
                } else {
                        fclose( $file );
+
                        return false; // Wrong hash
                }
        }
@@ -201,6 +205,7 @@ class MessageCache {
 
                if ( !$file ) {
                        wfDebug( "Unable to open local cache file for writing\n" );
+
                        return;
                }
 
@@ -253,6 +258,7 @@ class MessageCache {
                                wfDebug( __METHOD__ . ": disabled\n" );
                                $shownDisabled = true;
                        }
+
                        return true;
                }
 
@@ -415,6 +421,7 @@ class MessageCache {
                $info = implode( ', ', $where );
                wfDebug( __METHOD__ . ": Loading $code... $info\n" );
                wfProfileOut( __METHOD__ );
+
                return $success;
        }
 
@@ -502,6 +509,7 @@ class MessageCache {
                $cache['VERSION'] = MSG_CACHE_VERSION;
                $cache['EXPIRY'] = wfTimestamp( TS_MW, time() + $this->mExpiry );
                wfProfileOut( __METHOD__ );
+
                return $cache;
        }
 
@@ -517,6 +525,7 @@ class MessageCache {
 
                if ( $this->mDisable ) {
                        wfProfileOut( __METHOD__ );
+
                        return;
                }
 
@@ -584,6 +593,7 @@ class MessageCache {
                if ( wfTimestampNow() >= $cache['EXPIRY'] ) {
                        return true;
                }
+
                return false;
        }
 
@@ -617,6 +627,7 @@ class MessageCache {
                }
 
                wfProfileOut( __METHOD__ );
+
                return $success;
        }
 
@@ -689,7 +700,8 @@ class MessageCache {
         *                   "msg/lang".
         *
         * @throws MWException when given an invalid key
-        * @return string|bool False if the message doesn't exist, otherwise the message (which can be empty)
+        * @return string|bool False if the message doesn't exist, otherwise the
+        *   message (which can be empty)
         */
        function get( $key, $useDB = true, $langcode = true, $isFullKey = false ) {
                global $wgContLang;
@@ -726,7 +738,12 @@ class MessageCache {
 
                // Loop through each language in the fallback list until we find something useful
                $lang = wfGetLangObj( $langcode );
-               $message = $this->getMessageFromFallbackChain( $lang, $lckey, $uckey, !$this->mDisable && $useDB );
+               $message = $this->getMessageFromFallbackChain(
+                       $lang,
+                       $lckey,
+                       $uckey,
+                       !$this->mDisable && $useDB
+               );
 
                // If we still have no message, maybe the key was in fact a full key so try that
                if ( $message === false ) {
@@ -804,7 +821,8 @@ class MessageCache {
                        return $message;
                }
 
-               list( $fallbackChain, $siteFallbackChain ) = Language::getFallbacksIncludingSiteLanguage( $langcode );
+               list( $fallbackChain, $siteFallbackChain ) =
+                       Language::getFallbacksIncludingSiteLanguage( $langcode );
 
                // Next try checking the database for all of the fallback languages of the requested language.
                if ( $useDB ) {
@@ -897,11 +915,13 @@ class MessageCache {
                if ( $entry ) {
                        if ( substr( $entry, 0, 1 ) === ' ' ) {
                                $this->mCache[$code][$title] = $entry;
+
                                // The message exists, so make sure a string
                                // is returned.
                                return (string)substr( $entry, 1 );
                        } elseif ( $entry === '!NONEXISTENT' ) {
                                $this->mCache[$code][$title] = '!NONEXISTENT';
+
                                return false;
                        } else {
                                # Corrupt/obsolete entry, delete it
@@ -983,6 +1003,7 @@ class MessageCache {
                        $this->mInParser = false;
                        $popts->setUserLang( $userlang );
                }
+
                return $message;
        }
 
@@ -1003,6 +1024,7 @@ class MessageCache {
                                $this->mParser = clone $wgParser;
                        }
                }
+
                return $this->mParser;
        }
 
@@ -1043,6 +1065,7 @@ class MessageCache {
                $this->mInParser = false;
 
                wfProfileOut( __METHOD__ );
+
                return $res;
        }
 
@@ -1085,6 +1108,7 @@ class MessageCache {
                }
 
                $message = implode( '/', $pieces );
+
                return array( $message, $lang );
        }
 
@@ -1109,6 +1133,7 @@ class MessageCache {
                unset( $cache['EXPIRY'] );
                // Remove any !NONEXISTENT keys
                $cache = array_diff( $cache, array( '!NONEXISTENT' ) );
+
                // Keys may appear with a capital first letter. lcfirst them.
                return array_map( array( $wgContLang, 'lcfirst' ), array_keys( $cache ) );
        }
index 76c76f3..786d74a 100644 (file)
@@ -79,6 +79,7 @@ class ProcessCacheLRU {
                if ( isset( $this->cache[$key][$prop] ) ) {
                        return ( $maxAge <= 0 || ( time() - $this->cacheTimes[$key][$prop] ) <= $maxAge );
                }
+
                return false;
        }
 
index 2ad7b85..3ace396 100644 (file)
@@ -80,8 +80,10 @@ class ResourceFileCache extends FileCacheBase {
                        } elseif ( $query === 'debug' && $val === 'false' ) {
                                continue;
                        }
+
                        return false;
                }
+
                return true; // cacheable
        }
 
@@ -104,6 +106,7 @@ class ResourceFileCache extends FileCacheBase {
                                $this->getMissesRecent() >= self::MISS_THRESHOLD // many misses
                        );
                }
+
                return $this->mCacheWorthy;
        }
 }
index 6085f58..2e4c1e9 100644 (file)
@@ -36,10 +36,12 @@ class UserCache {
                if ( $instance === null ) {
                        $instance = new self();
                }
+
                return $instance;
        }
 
-       protected function __construct() {}
+       protected function __construct() {
+       }
 
        /**
         * Get a property of a user based on their user ID
@@ -53,6 +55,7 @@ class UserCache {
                        wfDebug( __METHOD__ . ": querying DB for prop '$prop' for user ID '$userId'.\n" );
                        $this->doQuery( array( $userId ) ); // cache miss
                }
+
                return isset( $this->cache[$userId][$prop] )
                        ? $this->cache[$userId][$prop]
                        : false; // user does not exist?
index fe5bf78..a9c3a67 100644 (file)
  */
 
 class ChangesList extends ContextSource {
-
        /**
         * @var Skin
         */
        public $skin;
 
        protected $watchlist = false;
-
+       protected $lastdate;
        protected $message;
+       protected $rc_cache;
+       protected $rcCacheIndex;
+       protected $rclistOpen;
+       protected $rcMoveIndex;
 
        /**
         * Changeslist constructor
         *
-        * @param $obj Skin or IContextSource
+        * @param Skin|IContextSource $obj
         */
        public function __construct( $obj ) {
                if ( $obj instanceof IContextSource ) {
@@ -53,8 +56,8 @@ class ChangesList extends ContextSource {
         * Fetch an appropriate changes list class for the specified context
         * Some users might want to use an enhanced list format, for instance
         *
-        * @param $context IContextSource to use
-        * @return ChangesList|EnhancedChangesList|OldChangesList derivative
+        * @param IContextSource $context
+        * @return ChangesList derivative
         */
        public static function newFromContext( IContextSource $context ) {
                $user = $context->getUser();
@@ -62,6 +65,7 @@ class ChangesList extends ContextSource {
                $list = null;
                if ( wfRunHooks( 'FetchChangesList', array( $user, &$sk, &$list ) ) ) {
                        $new = $context->getRequest()->getBool( 'enhanced', $user->getOption( 'usenewrc' ) );
+
                        return $new ? new EnhancedChangesList( $context ) : new OldChangesList( $context );
                } else {
                        return $list;
@@ -95,7 +99,7 @@ class ChangesList extends ContextSource {
         * Returns the appropriate flags for new page, minor change and patrolling
         * @param array $flags Associative array of 'flag' => Bool
         * @param string $nothing to use for empty space
-        * @return String
+        * @return string
         */
        public function recentChangesFlags( $flags, $nothing = '&#160;' ) {
                global $wgRecentChangesFlags;
@@ -105,6 +109,7 @@ class ChangesList extends ContextSource {
                                ? self::flag( $flag )
                                : $nothing;
                }
+
                return $f;
        }
 
@@ -115,7 +120,7 @@ class ChangesList extends ContextSource {
         * "!" respectively, plus it will have an appropriate title and class.
         *
         * @param string $flag One key of $wgRecentChangesFlags
-        * @return String: Raw HTML
+        * @return string Raw HTML
         */
        public static function flag( $flag ) {
                static $flagInfos = null;
@@ -140,14 +145,14 @@ class ChangesList extends ContextSource {
                        $flag = $map[$flag];
                }
 
-               return "<abbr class='" . $flagInfos[$flag]['class'] . "' title='" . $flagInfos[$flag]['title'] . "'>" .
-                       $flagInfos[$flag]['letter'] .
+               return "<abbr class='" . $flagInfos[$flag]['class'] . "' title='" .
+                       $flagInfos[$flag]['title'] . "'>" . $flagInfos[$flag]['letter'] .
                        '</abbr>';
        }
 
        /**
         * Returns text for the start of the tabular part of RC
-        * @return String
+        * @return string
         */
        public function beginRecentChangesList() {
                $this->rc_cache = array();
@@ -156,15 +161,16 @@ class ChangesList extends ContextSource {
                $this->lastdate = '';
                $this->rclistOpen = false;
                $this->getOutput()->addModuleStyles( 'mediawiki.special.changeslist' );
+
                return '';
        }
 
        /**
         * Show formatted char difference
-        * @param $old Integer: bytes
-        * @param $new Integer: bytes
-        * @param $context IContextSource context to use
-        * @return String
+        * @param int $old Number of bytes
+        * @param int $new Number of bytes
+        * @param IContextSource $context
+        * @return string
         */
        public static function showCharacterDifference( $old, $new, IContextSource $context = null ) {
                global $wgRCChangedSizeThreshold, $wgMiserMode;
@@ -198,12 +204,10 @@ class ChangesList extends ContextSource {
 
                if ( $szdiff === 0 ) {
                        $formattedSizeClass = 'mw-plusminus-null';
-               }
-               if ( $szdiff > 0 ) {
+               } elseif ( $szdiff > 0 ) {
                        $formattedSize = '+' . $formattedSize;
                        $formattedSizeClass = 'mw-plusminus-pos';
-               }
-               if ( $szdiff < 0 ) {
+               } else {
                        $formattedSizeClass = 'mw-plusminus-neg';
                }
 
@@ -313,7 +317,9 @@ class ChangesList extends ContextSource {
                                'action' => 'history'
                        )
                );
-               $s .= $this->msg( 'parentheses' )->rawParams( $diffhist )->escaped() . ' <span class="mw-changeslist-separator">. .</span> ';
+               // @todo FIXME: Hard coded ". .". Is there a message for this? Should there be?
+               $s .= $this->msg( 'parentheses' )->rawParams( $diffhist )->escaped() .
+                       ' <span class="mw-changeslist-separator">. .</span> ';
        }
 
        /**
@@ -353,8 +359,12 @@ class ChangesList extends ContextSource {
         * @return string HTML fragment
         */
        public function getTimestamp( $rc ) {
+               // @todo FIXME: Hard coded ". .". Is there a message for this? Should there be?
                return $this->message['semicolon-separator'] . '<span class="mw-changeslist-date">' .
-                       $this->getLanguage()->userTime( $rc->mAttribs['rc_timestamp'], $this->getUser() ) . '</span> <span class="mw-changeslist-separator">. .</span> ';
+                       $this->getLanguage()->userTime(
+                               $rc->mAttribs['rc_timestamp'],
+                               $this->getUser()
+                       ) . '</span> <span class="mw-changeslist-separator">. .</span> ';
        }
 
        /**
@@ -375,7 +385,8 @@ class ChangesList extends ContextSource {
         */
        public function insertUserRelatedLinks( &$s, &$rc ) {
                if ( $this->isDeleted( $rc, Revision::DELETED_USER ) ) {
-                       $s .= ' <span class="history-deleted">' . $this->msg( 'rev-deleted-user' )->escaped() . '</span>';
+                       $s .= ' <span class="history-deleted">' .
+                               $this->msg( 'rev-deleted-user' )->escaped() . '</span>';
                } else {
                        $s .= $this->getLanguage()->getDirMark() . Linker::userLink( $rc->mAttribs['rc_user'],
                                $rc->mAttribs['rc_user_text'] );
@@ -394,6 +405,7 @@ class ChangesList extends ContextSource {
                $formatter->setContext( $this->getContext() );
                $formatter->setShowUserToolLinks( true );
                $mark = $this->getLanguage()->getDirMark();
+
                return $formatter->getActionText() . " $mark" . $formatter->getComment();
        }
 
@@ -405,11 +417,13 @@ class ChangesList extends ContextSource {
        public function insertComment( $rc ) {
                if ( $rc->mAttribs['rc_type'] != RC_MOVE && $rc->mAttribs['rc_type'] != RC_MOVE_OVER_REDIRECT ) {
                        if ( $this->isDeleted( $rc, Revision::DELETED_COMMENT ) ) {
-                               return ' <span class="history-deleted">' . $this->msg( 'rev-deleted-comment' )->escaped() . '</span>';
+                               return ' <span class="history-deleted">' .
+                                       $this->msg( 'rev-deleted-comment' )->escaped() . '</span>';
                        } else {
                                return Linker::commentBlock( $rc->mAttribs['rc_comment'], $rc->getTitle() );
                        }
                }
+
                return '';
        }
 
@@ -429,14 +443,17 @@ class ChangesList extends ContextSource {
 
        /**
         * Returns the string which indicates the number of watching users
+        * @param int $count Number of user watching a page
         * @return string
         */
        protected function numberofWatchingusers( $count ) {
                static $cache = array();
                if ( $count > 0 ) {
                        if ( !isset( $cache[$count] ) ) {
-                               $cache[$count] = $this->msg( 'number_of_watching_users_RCview' )->numParams( $count )->escaped();
+                               $cache[$count] = $this->msg( 'number_of_watching_users_RCview' )
+                                       ->numParams( $count )->escaped();
                        }
+
                        return $cache[$count];
                } else {
                        return '';
@@ -445,9 +462,9 @@ class ChangesList extends ContextSource {
 
        /**
         * Determine if said field of a revision is hidden
-        * @param $rc RCCacheEntry
-        * @param $field Integer: one of DELETED_* bitfield constants
-        * @return Boolean
+        * @param RCCacheEntry|RecentChange $rc
+        * @param int $field One of DELETED_* bitfield constants
+        * @return bool
         */
        public static function isDeleted( $rc, $field ) {
                return ( $rc->mAttribs['rc_deleted'] & $field ) == $field;
@@ -456,10 +473,10 @@ class ChangesList extends ContextSource {
        /**
         * Determine if the current user is allowed to view a particular
         * field of this revision, if it's marked as deleted.
-        * @param $rc RCCacheEntry
-        * @param $field Integer
-        * @param $user User object to check, or null to use $wgUser
-        * @return Boolean
+        * @param RCCacheEntry|RecentChange $rc
+        * @param int $field
+        * @param User $user User object to check, or null to use $wgUser
+        * @return bool
         */
        public static function userCan( $rc, $field, User $user = null ) {
                if ( $rc->mAttribs['rc_type'] == RC_LOG ) {
@@ -488,12 +505,16 @@ class ChangesList extends ContextSource {
         * @param $rc RecentChange
         */
        public function insertRollback( &$s, &$rc ) {
-               if ( $rc->mAttribs['rc_type'] == RC_EDIT && $rc->mAttribs['rc_this_oldid'] && $rc->mAttribs['rc_cur_id'] ) {
+               if ( $rc->mAttribs['rc_type'] == RC_EDIT
+                       && $rc->mAttribs['rc_this_oldid']
+                       && $rc->mAttribs['rc_cur_id']
+               ) {
                        $page = $rc->getTitle();
                        /** Check for rollback and edit permissions, disallow special pages, and only
-                         * show a link on the top-most revision */
-                       if ( $this->getUser()->isAllowed( 'rollback' ) && $rc->mAttribs['page_latest'] == $rc->mAttribs['rc_this_oldid'] )
-                       {
+                        * show a link on the top-most revision */
+                       if ( $this->getUser()->isAllowed( 'rollback' )
+                               && $rc->mAttribs['page_latest'] == $rc->mAttribs['rc_this_oldid']
+                       ) {
                                $rev = new Revision( array(
                                        'title' => $page,
                                        'id' => $rc->mAttribs['rc_this_oldid'],
@@ -516,7 +537,10 @@ class ChangesList extends ContextSource {
                        return;
                }
 
-               list( $tagSummary, $newClasses ) = ChangeTags::formatSummaryRow( $rc->mAttribs['ts_tags'], 'changeslist' );
+               list( $tagSummary, $newClasses ) = ChangeTags::formatSummaryRow(
+                       $rc->mAttribs['ts_tags'],
+                       'changeslist'
+               );
                $classes = array_merge( $classes, $newClasses );
                $s .= ' ' . $tagSummary;
        }
index 3b724f1..c8439be 100644 (file)
@@ -98,7 +98,8 @@ class EnhancedChangesList extends ChangesList {
                                $logtitle = SpecialPage::getTitleFor( 'Log', $logType );
                                $logpage = new LogPage( $logType );
                                $logname = $logpage->getName()->escaped();
-                               $clink = $this->msg( 'parentheses' )->rawParams( Linker::linkKnown( $logtitle, $logname ) )->escaped();
+                               $clink = $this->msg( 'parentheses' )
+                                       ->rawParams( Linker::linkKnown( $logtitle, $logname ) )->escaped();
                        } else {
                                $clink = Linker::link( $cacheEntry->getTitle() );
                        }
@@ -162,7 +163,8 @@ class EnhancedChangesList extends ChangesList {
 
                # Make user links
                if ( $this->isDeleted( $cacheEntry, Revision::DELETED_USER ) ) {
-                       $cacheEntry->userlink = ' <span class="history-deleted">' . $this->msg( 'rev-deleted-user' )->escaped() . '</span>';
+                       $cacheEntry->userlink = ' <span class="history-deleted">' .
+                               $this->msg( 'rev-deleted-user' )->escaped() . '</span>';
                } else {
                        $cacheEntry->userlink = Linker::userLink(
                                $cacheEntry->mAttribs['rc_user'],
@@ -218,10 +220,10 @@ class EnhancedChangesList extends ChangesList {
                if ( $block[0]->mAttribs['rc_log_type'] ) {
                        # Log entry
                        $classes[] = Sanitizer::escapeClass( 'mw-changeslist-log-'
-                                       . $block[0]->mAttribs['rc_log_type'] . '-' . $block[0]->mAttribs['rc_title'] );
+                               . $block[0]->mAttribs['rc_log_type'] . '-' . $block[0]->mAttribs['rc_title'] );
                } else {
                        $classes[] = Sanitizer::escapeClass( 'mw-changeslist-ns'
-                                       . $block[0]->mAttribs['rc_namespace'] . '-' . $block[0]->mAttribs['rc_title'] );
+                               . $block[0]->mAttribs['rc_namespace'] . '-' . $block[0]->mAttribs['rc_title'] );
                }
                $classes[] = $block[0]->watched && $block[0]->mAttribs['rc_timestamp'] >= $block[0]->watched
                        ? 'mw-changeslist-line-watched' : 'mw-changeslist-line-not-watched';
@@ -286,7 +288,9 @@ class EnhancedChangesList extends ChangesList {
                        $text = $userlink;
                        $text .= $this->getLanguage()->getDirMark();
                        if ( $count > 1 ) {
-                               $text .= ' ' . $this->msg( 'parentheses' )->rawParams( $this->getLanguage()->formatNum( $count ) . '×' )->escaped();
+                               // @todo FIXME: Hardcoded '×'. Should be a message.
+                               $formattedCount = $this->getLanguage()->formatNum( $count ) . '×';
+                               $text .= ' ' . $this->msg( 'parentheses' )->rawParams( $formattedCount )->escaped();
                        }
                        array_push( $users, $text );
                }
@@ -296,7 +300,8 @@ class EnhancedChangesList extends ChangesList {
                                implode( $this->message['semicolon-separator'], $users )
                        )->escaped() . '</span>';
 
-               $tl = '<span class="mw-collapsible-toggle mw-collapsible-arrow mw-enhancedchanges-arrow mw-enhancedchanges-arrow-space"></span>';
+               $tl = '<span class="mw-collapsible-toggle mw-collapsible-arrow ' .
+                       'mw-enhancedchanges-arrow mw-enhancedchanges-arrow-space"></span>';
                $r .= "<td>$tl</td>";
 
                # Main line
@@ -312,7 +317,8 @@ class EnhancedChangesList extends ChangesList {
 
                # Article link
                if ( $namehidden ) {
-                       $r .= ' <span class="history-deleted">' . $this->msg( 'rev-deleted-event' )->escaped() . '</span>';
+                       $r .= ' <span class="history-deleted">' .
+                               $this->msg( 'rev-deleted-event' )->escaped() . '</span>';
                } elseif ( $allLogs ) {
                        $r .= $this->maybeWatchedLink( $block[0]->link, $block[0]->watched );
                } else {
@@ -427,6 +433,7 @@ class EnhancedChangesList extends ChangesList {
 
                $r .= $users;
                $r .= $this->numberofWatchingusers( $block[0]->numberofWatchingusers );
+               $r .= '</td></tr>';
 
                # Sub-entries
                foreach ( $block as $rcObj ) {
@@ -461,11 +468,11 @@ class EnhancedChangesList extends ChangesList {
                        } else {
 
                                $link = Linker::linkKnown(
-                                               $rcObj->getTitle(),
-                                               $rcObj->timestamp,
-                                               array(),
-                                               $params
-                                       );
+                                       $rcObj->getTitle(),
+                                       $rcObj->timestamp,
+                                       array(),
+                                       $params
+                               );
                                if ( $this->isDeleted( $rcObj, Revision::DELETED_TEXT ) ) {
                                        $link = '<span class="history-deleted">' . $link . '</span> ';
                                }
@@ -473,7 +480,11 @@ class EnhancedChangesList extends ChangesList {
                        $r .= $link . '</span>';
 
                        if ( !$type == RC_LOG || $type == RC_NEW ) {
-                               $r .= ' ' . $this->msg( 'parentheses' )->rawParams( $rcObj->curlink . $this->message['pipe-separator'] . $rcObj->lastlink )->escaped();
+                               $r .= ' ' . $this->msg( 'parentheses' )->rawParams(
+                                       $rcObj->curlink .
+                                               $this->message['pipe-separator'] .
+                                               $rcObj->lastlink
+                               )->escaped();
                        }
                        $r .= ' <span class="mw-changeslist-separator">. .</span> ';
 
@@ -522,6 +533,7 @@ class EnhancedChangesList extends ChangesList {
                $encUrl = htmlspecialchars( $wgStylePath . '/common/images/Arr_' . $dir . '.png' );
                $encAlt = htmlspecialchars( $alt );
                $encTitle = htmlspecialchars( $title );
+
                return "<img src=\"$encUrl\" width=\"12\" height=\"12\" alt=\"$encAlt\" title=\"$encTitle\" />";
        }
 
@@ -532,6 +544,7 @@ class EnhancedChangesList extends ChangesList {
         */
        protected function sideArrow() {
                $dir = $this->getLanguage()->isRTL() ? 'l' : 'r';
+
                return $this->arrow( $dir, '+', $this->msg( 'rc-enhanced-expand' )->text() );
        }
 
@@ -570,10 +583,10 @@ class EnhancedChangesList extends ChangesList {
                if ( $logType ) {
                        # Log entry
                        $classes[] = Sanitizer::escapeClass( 'mw-changeslist-log-'
-                                       . $logType . '-' . $rcObj->mAttribs['rc_title'] );
+                               . $logType . '-' . $rcObj->mAttribs['rc_title'] );
                } else {
                        $classes[] = Sanitizer::escapeClass( 'mw-changeslist-ns' .
-                                       $rcObj->mAttribs['rc_namespace'] . '-' . $rcObj->mAttribs['rc_title'] );
+                               $rcObj->mAttribs['rc_namespace'] . '-' . $rcObj->mAttribs['rc_title'] );
                }
                $classes[] = $rcObj->watched && $rcObj->mAttribs['rc_timestamp'] >= $rcObj->watched
                        ? 'mw-changeslist-line-watched' : 'mw-changeslist-line-not-watched';
@@ -598,19 +611,21 @@ class EnhancedChangesList extends ChangesList {
                        $logPage = new LogPage( $logType );
                        $logTitle = SpecialPage::getTitleFor( 'Log', $logType );
                        $logName = $logPage->getName()->escaped();
-                       $r .= $this->msg( 'parentheses' )->rawParams( Linker::linkKnown( $logTitle, $logName ) )->escaped();
+                       $r .= $this->msg( 'parentheses' )
+                               ->rawParams( Linker::linkKnown( $logTitle, $logName ) )->escaped();
                } else {
                        $this->insertArticleLink( $r, $rcObj, $rcObj->unpatrolled, $rcObj->watched );
                }
                # Diff and hist links
                if ( $type != RC_LOG ) {
                        $query['action'] = 'history';
-                       $r .= ' ' . $this->msg( 'parentheses' )->rawParams( $rcObj->difflink . $this->message['pipe-separator'] . Linker::linkKnown(
-                               $rcObj->getTitle(),
-                               $this->message['hist'],
-                               array(),
-                               $query
-                       ) )->escaped();
+                       $r .= ' ' . $this->msg( 'parentheses' )
+                               ->rawParams( $rcObj->difflink . $this->message['pipe-separator'] . Linker::linkKnown(
+                                       $rcObj->getTitle(),
+                                       $this->message['hist'],
+                                       array(),
+                                       $query
+                               ) )->escaped();
                }
                $r .= ' <span class="mw-changeslist-separator">. .</span> ';
                # Character diff
@@ -648,7 +663,7 @@ class EnhancedChangesList extends ChangesList {
         * @return string
         */
        protected function recentChangesBlock() {
-               if ( count ( $this->rc_cache ) == 0 ) {
+               if ( count( $this->rc_cache ) == 0 ) {
                        return '';
                }
 
@@ -676,5 +691,4 @@ class EnhancedChangesList extends ChangesList {
        public function endRecentChangesList() {
                return $this->recentChangesBlock() . parent::endRecentChangesList();
        }
-
 }
index a7fe934..56630a6 100644 (file)
  * @file
  */
 class OldChangesList extends ChangesList {
-
        /**
         * Format a line using the old system (aka without any javascript).
         *
-        * @param $rc RecentChange, passed by reference
+        * @param RecentChange $rc Passed by reference
         * @param bool $watched (default false)
         * @param int $linenumber (default null)
         *
@@ -116,15 +115,18 @@ class OldChangesList extends ChangesList {
                }
 
                if ( $this->watchlist ) {
-                       $classes[] = Sanitizer::escapeClass( 'watchlist-' . $rc->mAttribs['rc_namespace'] . '-' . $rc->mAttribs['rc_title'] );
+                       $classes[] = Sanitizer::escapeClass( 'watchlist-' .
+                               $rc->mAttribs['rc_namespace'] . '-' . $rc->mAttribs['rc_title'] );
                }
 
                if ( !wfRunHooks( 'OldChangesListRecentChangesLine', array( &$this, &$s, $rc, &$classes ) ) ) {
                        wfProfileOut( __METHOD__ );
+
                        return false;
                }
 
                wfProfileOut( __METHOD__ );
+
                return "$dateheader<li class=\"" . implode( ' ', $classes ) . "\">" . $s . "</li>\n";
        }
 }
index 9aef3d3..271dd4a 100644 (file)
  * @file
  */
 class RCCacheEntry extends RecentChange {
-       var $secureName, $link;
-       var $curlink, $difflink, $lastlink, $usertalklink, $versionlink;
-       var $userlink, $timestamp, $watched;
+       public $curlink;
+       public $difflink;
+       public $lastlink;
+       public $link;
+       public $timestamp;
+       public $unpatrolled;
+       public $userlink;
+       public $usertalklink;
+       public $watched;
 
        /**
         * @param $rc RecentChange
@@ -30,6 +36,7 @@ class RCCacheEntry extends RecentChange {
                $rc2 = new RCCacheEntry;
                $rc2->mAttribs = $rc->mAttribs;
                $rc2->mExtra = $rc->mExtra;
+
                return $rc2;
        }
 }
index 8d4c9c1..0ef71c4 100644 (file)
@@ -26,7 +26,6 @@
  * mAttribs:
  *  rc_id           id of the row in the recentchanges table
  *  rc_timestamp    time the entry was made
- *  rc_cur_time     timestamp on the cur row
  *  rc_namespace    namespace #
  *  rc_title        non-prefixed db key
  *  rc_type         is new entry, used to determine whether updating is necessary
@@ -65,7 +64,6 @@
  * @todo document functions and variables
  */
 class RecentChange {
-
        // Constants for the rc_source field.  Extensions may also have
        // their own source constants.
        const SRC_EDIT = 'mw.edit';
@@ -73,24 +71,26 @@ class RecentChange {
        const SRC_LOG = 'mw.log';
        const SRC_EXTERNAL = 'mw.external'; // obsolete
 
-       var $mAttribs = array(), $mExtra = array();
+       public $mAttribs = array();
+       public $mExtra = array();
 
        /**
         * @var Title
         */
-       var $mTitle = false;
+       public $mTitle = false;
 
        /**
         * @var User
         */
        private $mPerformer = false;
 
+       public $numberofWatchingusers = 0; # Dummy to prevent error message in SpecialRecentchangeslinked
+       public $notificationtimestamp;
+
        /**
-        * @var Title
+        * @var int Line number of recent change. Default -1.
         */
-       var $mMovedToTitle = false;
-       var $numberofWatchingusers = 0; # Dummy to prevent error message in SpecialRecentchangeslinked
-       var $notificationtimestamp;
+       public $counter = -1;
 
        # Factory methods
 
@@ -101,10 +101,12 @@ class RecentChange {
        public static function newFromRow( $row ) {
                $rc = new RecentChange;
                $rc->loadFromRow( $row );
+
                return $rc;
        }
 
        /**
+        * No uses left in Gerrit on 2013-11-19.
         * @deprecated in 1.22
         * @param $row
         * @return RecentChange
@@ -115,6 +117,7 @@ class RecentChange {
                $rc->loadFromCurRow( $row );
                $rc->notificationtimestamp = false;
                $rc->numberofWatchingusers = false;
+
                return $rc;
        }
 
@@ -155,7 +158,6 @@ class RecentChange {
                return array(
                        'rc_id',
                        'rc_timestamp',
-                       'rc_cur_time',
                        'rc_user',
                        'rc_user_text',
                        'rc_namespace',
@@ -205,6 +207,7 @@ class RecentChange {
                if ( $this->mTitle === false ) {
                        $this->mTitle = Title::makeTitle( $this->mAttribs['rc_namespace'], $this->mAttribs['rc_title'] );
                }
+
                return $this->mTitle;
        }
 
@@ -221,6 +224,7 @@ class RecentChange {
                                $this->mPerformer = User::newFromName( $this->mAttribs['rc_user_text'], false );
                        }
                }
+
                return $this->mPerformer;
        }
 
@@ -254,7 +258,6 @@ class RecentChange {
 
                # Fixup database timestamps
                $this->mAttribs['rc_timestamp'] = $dbw->timestamp( $this->mAttribs['rc_timestamp'] );
-               $this->mAttribs['rc_cur_time'] = $dbw->timestamp( $this->mAttribs['rc_cur_time'] );
                $this->mAttribs['rc_id'] = $dbw->nextSequenceValue( 'recentchanges_rc_id_seq' );
 
                ## If we are using foreign keys, an entry of 0 for the page_id will fail, so use NULL
@@ -323,7 +326,7 @@ class RecentChange {
                        'add_interwiki_prefix' => $wgRC2UDPInterwikiPrefix,
                );
 
-               return $engine->send( $feed, $line );
+               $engine->send( $feed, $line );
        }
 
        /**
@@ -350,6 +353,7 @@ class RecentChange {
                                continue;
                        }
 
+                       /** @var $formatter RCFeedFormatter */
                        $formatter = new $feed['formatter']();
                        $line = $formatter->getLine( $feed, $this, $actionComment );
 
@@ -360,7 +364,8 @@ class RecentChange {
        /**
         * Gets the stream engine object for a given URI from $wgRCEngines
         *
-        * @param $uri string URI to get the engine object for
+        * @param string $uri URI to get the engine object for
+        * @throws MWException
         * @return object The engine object
         */
        private static function getEngine( $uri ) {
@@ -383,6 +388,7 @@ class RecentChange {
         */
        public static function cleanupForIRC( $text ) {
                wfDeprecated( __METHOD__, '1.22' );
+
                return IRCColourfulRCFeedFormatter::cleanupForIRC( $text );
        }
 
@@ -403,13 +409,15 @@ class RecentChange {
                if ( !$change instanceof RecentChange ) {
                        return null;
                }
+
                return $change->doMarkPatrolled( $wgUser, $auto );
        }
 
        /**
         * Mark this RecentChange as patrolled
         *
-        * NOTE: Can also return 'rcpatroldisabled', 'hookaborted' and 'markedaspatrollederror-noautopatrol' as errors
+        * NOTE: Can also return 'rcpatroldisabled', 'hookaborted' and
+        * 'markedaspatrollederror-noautopatrol' as errors
         * @param $user User object doing the action
         * @param $auto Boolean: for automatic patrol
         * @return array of permissions errors, see Title::getUserPermissionsErrors()
@@ -430,7 +438,9 @@ class RecentChange {
                }
                // Users without the 'autopatrol' right can't patrol their
                // own revisions
-               if ( $user->getName() == $this->getAttribute( 'rc_user_text' ) && !$user->isAllowed( 'autopatrol' ) ) {
+               if ( $user->getName() == $this->getAttribute( 'rc_user_text' )
+                       && !$user->isAllowed( 'autopatrol' )
+               ) {
                        $errors[] = array( 'markedaspatrollederror-noautopatrol' );
                }
                if ( $errors ) {
@@ -445,6 +455,7 @@ class RecentChange {
                // Log this patrol event
                PatrolLog::record( $this, $auto, $user );
                wfRunHooks( 'MarkPatrolledComplete', array( $this->getAttribute( 'rc_id' ), &$user, false ) );
+
                return array();
        }
 
@@ -467,6 +478,7 @@ class RecentChange {
                // Invalidate the page cache after the page has been patrolled
                // to make sure that the Patrol link isn't visible any longer!
                $this->getTitle()->invalidateCache();
+
                return $dbw->affectedRows();
        }
 
@@ -494,40 +506,40 @@ class RecentChange {
                $rc->mTitle = $title;
                $rc->mPerformer = $user;
                $rc->mAttribs = array(
-                       'rc_timestamp'  => $timestamp,
-                       'rc_cur_time'   => $timestamp,
-                       'rc_namespace'  => $title->getNamespace(),
-                       'rc_title'      => $title->getDBkey(),
-                       'rc_type'       => RC_EDIT,
-                       'rc_source'     => self::SRC_EDIT,
-                       'rc_minor'      => $minor ? 1 : 0,
-                       'rc_cur_id'     => $title->getArticleID(),
-                       'rc_user'       => $user->getId(),
-                       'rc_user_text'  => $user->getName(),
-                       'rc_comment'    => $comment,
+                       'rc_timestamp' => $timestamp,
+                       'rc_namespace' => $title->getNamespace(),
+                       'rc_title' => $title->getDBkey(),
+                       'rc_type' => RC_EDIT,
+                       'rc_source' => self::SRC_EDIT,
+                       'rc_minor' => $minor ? 1 : 0,
+                       'rc_cur_id' => $title->getArticleID(),
+                       'rc_user' => $user->getId(),
+                       'rc_user_text' => $user->getName(),
+                       'rc_comment' => $comment,
                        'rc_this_oldid' => $newId,
                        'rc_last_oldid' => $oldId,
-                       'rc_bot'        => $bot ? 1 : 0,
-                       'rc_ip'         => self::checkIPAddress( $ip ),
-                       'rc_patrolled'  => intval( $patrol ),
-                       'rc_new'        => 0,  # obsolete
-                       'rc_old_len'    => $oldSize,
-                       'rc_new_len'    => $newSize,
-                       'rc_deleted'    => 0,
-                       'rc_logid'      => 0,
-                       'rc_log_type'   => null,
+                       'rc_bot' => $bot ? 1 : 0,
+                       'rc_ip' => self::checkIPAddress( $ip ),
+                       'rc_patrolled' => intval( $patrol ),
+                       'rc_new' => 0, # obsolete
+                       'rc_old_len' => $oldSize,
+                       'rc_new_len' => $newSize,
+                       'rc_deleted' => 0,
+                       'rc_logid' => 0,
+                       'rc_log_type' => null,
                        'rc_log_action' => '',
-                       'rc_params'     => ''
+                       'rc_params' => ''
                );
 
                $rc->mExtra = array(
                        'prefixedDBkey' => $title->getPrefixedDBkey(),
                        'lastTimestamp' => $lastTimestamp,
-                       'oldSize'       => $oldSize,
-                       'newSize'       => $newSize,
-                       'pageStatus'   => 'changed'
+                       'oldSize' => $oldSize,
+                       'newSize' => $newSize,
+                       'pageStatus' => 'changed'
                );
                $rc->save();
+
                return $rc;
        }
 
@@ -554,30 +566,29 @@ class RecentChange {
                $rc->mTitle = $title;
                $rc->mPerformer = $user;
                $rc->mAttribs = array(
-                       'rc_timestamp'      => $timestamp,
-                       'rc_cur_time'       => $timestamp,
-                       'rc_namespace'      => $title->getNamespace(),
-                       'rc_title'          => $title->getDBkey(),
-                       'rc_type'           => RC_NEW,
-                       'rc_source'         => self::SRC_NEW,
-                       'rc_minor'          => $minor ? 1 : 0,
-                       'rc_cur_id'         => $title->getArticleID(),
-                       'rc_user'           => $user->getId(),
-                       'rc_user_text'      => $user->getName(),
-                       'rc_comment'        => $comment,
-                       'rc_this_oldid'     => $newId,
-                       'rc_last_oldid'     => 0,
-                       'rc_bot'            => $bot ? 1 : 0,
-                       'rc_ip'             => self::checkIPAddress( $ip ),
-                       'rc_patrolled'      => intval( $patrol ),
-                       'rc_new'            => 1, # obsolete
-                       'rc_old_len'        => 0,
-                       'rc_new_len'        => $size,
-                       'rc_deleted'        => 0,
-                       'rc_logid'          => 0,
-                       'rc_log_type'       => null,
-                       'rc_log_action'     => '',
-                       'rc_params'         => ''
+                       'rc_timestamp' => $timestamp,
+                       'rc_namespace' => $title->getNamespace(),
+                       'rc_title' => $title->getDBkey(),
+                       'rc_type' => RC_NEW,
+                       'rc_source' => self::SRC_NEW,
+                       'rc_minor' => $minor ? 1 : 0,
+                       'rc_cur_id' => $title->getArticleID(),
+                       'rc_user' => $user->getId(),
+                       'rc_user_text' => $user->getName(),
+                       'rc_comment' => $comment,
+                       'rc_this_oldid' => $newId,
+                       'rc_last_oldid' => 0,
+                       'rc_bot' => $bot ? 1 : 0,
+                       'rc_ip' => self::checkIPAddress( $ip ),
+                       'rc_patrolled' => intval( $patrol ),
+                       'rc_new' => 1, # obsolete
+                       'rc_old_len' => 0,
+                       'rc_new_len' => $size,
+                       'rc_deleted' => 0,
+                       'rc_logid' => 0,
+                       'rc_log_type' => null,
+                       'rc_log_action' => '',
+                       'rc_params' => ''
                );
 
                $rc->mExtra = array(
@@ -588,6 +599,7 @@ class RecentChange {
                        'pageStatus' => 'created'
                );
                $rc->save();
+
                return $rc;
        }
 
@@ -607,9 +619,10 @@ class RecentChange {
         * @return bool
         */
        public static function notifyLog( $timestamp, &$title, &$user, $actionComment, $ip, $type,
-               $action, $target, $logComment, $params, $newId = 0, $actionCommentIRC = '' )
-       {
+               $action, $target, $logComment, $params, $newId = 0, $actionCommentIRC = ''
+       {
                global $wgLogRestrictions;
+
                # Don't add private logs to RC!
                if ( isset( $wgLogRestrictions[$type] ) && $wgLogRestrictions[$type] != '*' ) {
                        return false;
@@ -617,6 +630,7 @@ class RecentChange {
                $rc = self::newLogEntry( $timestamp, $title, $user, $actionComment, $ip, $type, $action,
                        $target, $logComment, $params, $newId, $actionCommentIRC );
                $rc->save();
+
                return true;
        }
 
@@ -664,39 +678,39 @@ class RecentChange {
                $rc->mTitle = $target;
                $rc->mPerformer = $user;
                $rc->mAttribs = array(
-                       'rc_timestamp'  => $timestamp,
-                       'rc_cur_time'   => $timestamp,
-                       'rc_namespace'  => $target->getNamespace(),
-                       'rc_title'      => $target->getDBkey(),
-                       'rc_type'       => RC_LOG,
-                       'rc_source'     => self::SRC_LOG,
-                       'rc_minor'      => 0,
-                       'rc_cur_id'     => $target->getArticleID(),
-                       'rc_user'       => $user->getId(),
-                       'rc_user_text'  => $user->getName(),
-                       'rc_comment'    => $logComment,
+                       'rc_timestamp' => $timestamp,
+                       'rc_namespace' => $target->getNamespace(),
+                       'rc_title' => $target->getDBkey(),
+                       'rc_type' => RC_LOG,
+                       'rc_source' => self::SRC_LOG,
+                       'rc_minor' => 0,
+                       'rc_cur_id' => $target->getArticleID(),
+                       'rc_user' => $user->getId(),
+                       'rc_user_text' => $user->getName(),
+                       'rc_comment' => $logComment,
                        'rc_this_oldid' => 0,
                        'rc_last_oldid' => 0,
-                       'rc_bot'        => $user->isAllowed( 'bot' ) ? $wgRequest->getBool( 'bot', true ) : 0,
-                       'rc_ip'         => self::checkIPAddress( $ip ),
-                       'rc_patrolled'  => 1,
-                       'rc_new'        => 0, # obsolete
-                       'rc_old_len'    => null,
-                       'rc_new_len'    => null,
-                       'rc_deleted'    => 0,
-                       'rc_logid'      => $newId,
-                       'rc_log_type'   => $type,
+                       'rc_bot' => $user->isAllowed( 'bot' ) ? $wgRequest->getBool( 'bot', true ) : 0,
+                       'rc_ip' => self::checkIPAddress( $ip ),
+                       'rc_patrolled' => 1,
+                       'rc_new' => 0, # obsolete
+                       'rc_old_len' => null,
+                       'rc_new_len' => null,
+                       'rc_deleted' => 0,
+                       'rc_logid' => $newId,
+                       'rc_log_type' => $type,
                        'rc_log_action' => $action,
-                       'rc_params'     => $params
+                       'rc_params' => $params
                );
 
                $rc->mExtra = array(
                        'prefixedDBkey' => $title->getPrefixedDBkey(),
                        'lastTimestamp' => 0,
                        'actionComment' => $actionComment, // the comment appended to the action, passed from LogPage
-                       'pageStatus'    => $pageStatus,
+                       'pageStatus' => $pageStatus,
                        'actionCommentIRC' => $actionCommentIRC
                );
+
                return $rc;
        }
 
@@ -721,7 +735,6 @@ class RecentChange {
                wfDeprecated( __METHOD__, '1.22' );
                $this->mAttribs = array(
                        'rc_timestamp' => wfTimestamp( TS_MW, $row->rev_timestamp ),
-                       'rc_cur_time' => $row->rev_timestamp,
                        'rc_user' => $row->rev_user,
                        'rc_user_text' => $row->rev_user_text,
                        'rc_namespace' => $row->page_namespace,
@@ -783,6 +796,7 @@ class RecentChange {
                } else {
                        $trail = '';
                }
+
                return $trail;
        }
 
@@ -803,6 +817,7 @@ class RecentChange {
                if ( $old === null || $new === null ) {
                        return '';
                }
+
                return ChangesList::showCharacterDifference( $old, $new );
        }
 
@@ -817,7 +832,7 @@ class RecentChange {
 
                $method = __METHOD__;
                $dbw = wfGetDB( DB_MASTER );
-               $dbw->onTransactionIdle( function() use ( $dbw, $method ) {
+               $dbw->onTransactionIdle( function () use ( $dbw, $method ) {
                        global $wgRCMaxAge;
 
                        $cutoff = $dbw->timestamp( time() - $wgRCMaxAge );
@@ -833,7 +848,8 @@ class RecentChange {
                global $wgRequest;
                if ( $ip ) {
                        if ( !IP::isIPAddress( $ip ) ) {
-                               throw new MWException( "Attempt to write \"" . $ip . "\" as an IP address into recent changes" );
+                               throw new MWException( "Attempt to write \"" . $ip .
+                                       "\" as an IP address into recent changes" );
                        }
                } else {
                        $ip = $wgRequest->getIP();
@@ -841,6 +857,7 @@ class RecentChange {
                                $ip = '';
                        }
                }
+
                return $ip;
        }
 
@@ -855,6 +872,7 @@ class RecentChange {
         */
        public static function isInRCLifespan( $timestamp, $tolerance = 0 ) {
                global $wgRCMaxAge;
+
                return wfTimestamp( TS_UNIX, $timestamp ) > time() - $tolerance - $wgRCMaxAge;
        }
 }
index c8e98a7..537deac 100644 (file)
@@ -52,15 +52,15 @@ class RedisConnectionPool {
        protected $serializer;
        /** @} */
 
-       /** @var integer Current idle pool size */
+       /** @var int Current idle pool size */
        protected $idlePoolSize = 0;
 
-       /** @var Array (server name => ((connection info array),...) */
+       /** @var array (server name => ((connection info array),...) */
        protected $connections = array();
-       /** @var Array (server name => UNIX timestamp) */
+       /** @var array (server name => UNIX timestamp) */
        protected $downServers = array();
 
-       /** @var Array (pool ID => RedisConnectionPool) */
+       /** @var array (pool ID => RedisConnectionPool) */
        protected static $instances = array();
 
        /** integer; seconds to cache servers as "down". */
@@ -68,6 +68,7 @@ class RedisConnectionPool {
 
        /**
         * @param array $options
+        * @throws MWException
         */
        protected function __construct( array $options ) {
                if ( !class_exists( 'Redis' ) ) {
@@ -89,8 +90,8 @@ class RedisConnectionPool {
        }
 
        /**
-        * @param $options Array
-        * @return Array
+        * @param array $options
+        * @return array
         */
        protected static function applyDefaultConfig( array $options ) {
                if ( !isset( $options['connectTimeout'] ) ) {
@@ -102,11 +103,12 @@ class RedisConnectionPool {
                if ( !isset( $options['password'] ) ) {
                        $options['password'] = null;
                }
+
                return $options;
        }
 
        /**
-        * @param $options Array
+        * @param array $options
         * $options include:
         *   - connectTimeout : The timeout for new connections, in seconds.
         *                      Optional, default is 1 second.
@@ -127,6 +129,7 @@ class RedisConnectionPool {
                        self::$instances[$id] = new self( $options );
                        wfDebug( "Creating a new " . __CLASS__ . " instance with id $id." );
                }
+
                return self::$instances[$id];
        }
 
@@ -151,6 +154,7 @@ class RedisConnectionPool {
                                // Server is dead
                                wfDebug( "server $server is marked down for another " .
                                        ( $this->downServers[$server] - $now ) . " seconds, can't get connection" );
+
                                return false;
                        }
                }
@@ -161,6 +165,7 @@ class RedisConnectionPool {
                                if ( $connection['free'] ) {
                                        $connection['free'] = false;
                                        --$this->idlePoolSize;
+
                                        return new RedisConnRef( $this, $server, $connection['conn'] );
                                }
                        }
@@ -195,6 +200,7 @@ class RedisConnectionPool {
                                wfDebugLog( 'redis', "Could not connect to server $server" );
                                // Mark server down for some time to avoid further timeouts
                                $this->downServers[$server] = time() + self::SERVER_DOWN_TTL;
+
                                return false;
                        }
                        if ( $this->password !== null ) {
@@ -205,12 +211,14 @@ class RedisConnectionPool {
                } catch ( RedisException $e ) {
                        $this->downServers[$server] = time() + self::SERVER_DOWN_TTL;
                        wfDebugLog( 'redis', "Redis exception: " . $e->getMessage() . "\n" );
+
                        return false;
                }
 
                if ( $conn ) {
                        $conn->setOption( Redis::OPT_SERIALIZER, $this->serializer );
                        $this->connections[$server][] = array( 'conn' => $conn, 'free' => false );
+
                        return new RedisConnRef( $this, $server, $conn );
                } else {
                        return false;
@@ -220,9 +228,9 @@ class RedisConnectionPool {
        /**
         * Mark a connection to a server as free to return to the pool
         *
-        * @param $server string
-        * @param $conn Redis
-        * @return boolean
+        * @param string $server
+        * @param Redis $conn
+        * @return bool
         */
        public function freeConnection( $server, Redis $conn ) {
                $found = false;
@@ -242,15 +250,13 @@ class RedisConnectionPool {
 
        /**
         * Close any extra idle connections if there are more than the limit
-        *
-        * @return void
         */
        protected function closeExcessIdleConections() {
                if ( $this->idlePoolSize <= count( $this->connections ) ) {
                        return; // nothing to do (no more connections than servers)
                }
 
-               foreach ( $this->connections as $server => &$serverConnections ) {
+               foreach ( $this->connections as &$serverConnections ) {
                        foreach ( $serverConnections as $key => &$connection ) {
                                if ( $connection['free'] ) {
                                        unset( $serverConnections[$key] );
@@ -268,10 +274,9 @@ class RedisConnectionPool {
         * not. The safest response for us is to explicitly destroy the connection
         * object and let it be reopened during the next request.
         *
-        * @param $server string
-        * @param $cref RedisConnRef
-        * @param $e RedisException
-        * @return void
+        * @param string $server
+        * @param RedisConnRef $cref
+        * @param RedisException $e
         */
        public function handleException( $server, RedisConnRef $cref, RedisException $e ) {
                wfDebugLog( 'redis', "Redis exception on server $server: " . $e->getMessage() . "\n" );
@@ -285,9 +290,16 @@ class RedisConnectionPool {
        }
 
        /**
-        * Resend an AUTH request to the redis server (useful after disconnects)
+        * Re-send an AUTH request to the redis server (useful after disconnects).
+        *
+        * This works around an upstream bug in phpredis. phpredis hides disconnects by transparently
+        * reconnecting, but it neglects to re-authenticate the new connection. To the user of the
+        * phpredis client API this manifests as a seemingly random tendency of connections to lose
+        * their authentication status.
         *
-        * This method is for internal use only
+        * This method is for internal use only.
+        *
+        * @see https://github.com/nicolasff/phpredis/issues/403
         *
         * @param string $server
         * @param Redis $conn
@@ -297,16 +309,31 @@ class RedisConnectionPool {
                if ( $this->password !== null ) {
                        if ( !$conn->auth( $this->password ) ) {
                                wfDebugLog( 'redis', "Authentication error connecting to $server" );
+
                                return false;
                        }
                }
+
                return true;
        }
+
+       /**
+        * Make sure connections are closed for sanity
+        */
+       function __destruct() {
+               foreach ( $this->connections as $server => &$serverConnections ) {
+                       foreach ( $serverConnections as $key => &$connection ) {
+                               $connection['conn']->close();
+                       }
+               }
+       }
 }
 
 /**
  * Helper class to handle automatically marking connectons as reusable (via RAII pattern)
  *
+ * This class simply wraps the Redis class and can be used the same way
+ *
  * @ingroup Redis
  * @since 1.21
  */
@@ -317,11 +344,12 @@ class RedisConnRef {
        protected $conn;
 
        protected $server; // string
+       protected $lastError; // string
 
        /**
-        * @param $pool RedisConnectionPool
-        * @param $server string
-        * @param $conn Redis
+        * @param RedisConnectionPool $pool
+        * @param string $server
+        * @param Redis $conn
         */
        public function __construct( RedisConnectionPool $pool, $server, Redis $conn ) {
                $this->pool = $pool;
@@ -329,8 +357,37 @@ class RedisConnRef {
                $this->conn = $conn;
        }
 
+       /**
+        * @return string
+        * @since 1.23
+        */
+       public function getServer() {
+               return $this->server;
+       }
+
+       public function getLastError() {
+               return $this->lastError;
+       }
+
+       public function clearLastError() {
+               $this->lastError = null;
+       }
+
        public function __call( $name, $arguments ) {
-               return call_user_func_array( array( $this->conn, $name ), $arguments );
+               $conn = $this->conn; // convenience
+
+               $conn->clearLastError();
+               $res = call_user_func_array( array( $conn, $name ), $arguments );
+               if ( preg_match( '/^ERR operation not permitted\b/', $conn->getLastError() ) ) {
+                       $this->pool->reauthenticateConnection( $this->server, $conn );
+                       $conn->clearLastError();
+                       $res = call_user_func_array( array( $conn, $name ), $arguments );
+                       wfDebugLog( 'redis', "Used automatic re-authentication for method '$name'." );
+               }
+
+               $this->lastError = $conn->getLastError() ?: $this->lastError;
+
+               return $res;
        }
 
        /**
@@ -369,11 +426,13 @@ class RedisConnRef {
                        wfDebugLog( 'redis', "Lua script error on server $server: " . $conn->getLastError() );
                }
 
+               $this->lastError = $conn->getLastError() ?: $this->lastError;
+
                return $res;
        }
 
        /**
-        * @param RedisConnRef $conn
+        * @param Redis $conn
         * @return bool
         */
        public function isConnIdentical( Redis $conn ) {
index 137efb8..e1b1f01 100644 (file)
@@ -32,7 +32,6 @@
  * @ingroup Content
  */
 abstract class AbstractContent implements Content {
-
        /**
         * Name of the content model this Content object represents.
         * Use with CONTENT_MODEL_XXX constants
@@ -264,7 +263,7 @@ abstract class AbstractContent implements Content {
                                break;
                        }
                        // Redirects to some special pages are not permitted
-                       if ( $newtitle instanceOf Title && $newtitle->isValidRedirectTarget() ) {
+                       if ( $newtitle instanceof Title && $newtitle->isValidRedirectTarget() ) {
                                // The new title passes the checks, so make that our current
                                // title so that further recursion can be checked
                                $title = $newtitle;
@@ -273,6 +272,7 @@ abstract class AbstractContent implements Content {
                                break;
                        }
                }
+
                return $titles;
        }
 
@@ -293,6 +293,7 @@ abstract class AbstractContent implements Content {
         */
        public function getUltimateRedirectTarget() {
                $titles = $this->getRedirectChain();
+
                return $titles ? array_pop( $titles ) : null;
        }
 
@@ -394,15 +395,16 @@ abstract class AbstractContent implements Content {
         *    database after deletion.
         */
        public function getDeletionUpdates( WikiPage $page,
-               ParserOutput $parserOutput = null )
-       {
+               ParserOutput $parserOutput = null
+       {
                return array(
                        new LinksDeletionUpdate( $page ),
                );
        }
 
        /**
-        * This default implementation always returns false. Subclasses may override this to supply matching logic.
+        * This default implementation always returns false. Subclasses may override
+        * this to supply matching logic.
         *
         * @see Content::matchMagicWord
         *
@@ -422,8 +424,8 @@ abstract class AbstractContent implements Content {
         * This base implementation calls the hook ConvertContent to enable custom conversions.
         * Subclasses may override this to implement conversion for "their" content model.
         *
-        * @param string  $toModel the desired content model, use the CONTENT_MODEL_XXX flags.
-        * @param string  $lossy flag, set to "lossy" to allow lossy conversion. If lossy conversion is
+        * @param string $toModel the desired content model, use the CONTENT_MODEL_XXX flags.
+        * @param string $lossy flag, set to "lossy" to allow lossy conversion. If lossy conversion is
         * not allowed, full round-trip conversion is expected to work without losing information.
         *
         * @return Content|bool A content object with the content model $toModel, or false if
@@ -439,6 +441,7 @@ abstract class AbstractContent implements Content {
                $result = false;
 
                wfRunHooks( 'ConvertContent', array( $this, $toModel, $lossy, &$result ) );
+
                return $result;
        }
 }
index 5a90e09..da49ced 100644 (file)
@@ -32,7 +32,6 @@
  * @ingroup Content
  */
 interface Content {
-
        /**
         * @since 1.21
         *
@@ -267,6 +266,7 @@ interface Content {
        public function getParserOutput( Title $title,
                $revId = null,
                ParserOptions $options = null, $generateHtml = true );
+
        // TODO: make RenderOutput and RenderOptions base classes
 
        /**
@@ -362,7 +362,8 @@ interface Content {
         *
         * @param Title $target the new redirect target
         *
-        * @return Content a new Content object with the updated redirect (or $this if this Content object isn't a redirect)
+        * @return Content a new Content object with the updated redirect (or $this
+        *   if this Content object isn't a redirect)
         */
        public function updateRedirect( Title $target );
 
@@ -437,22 +438,22 @@ interface Content {
         * This may be used to check the content's consistency with global state. This function should
         * NOT write any information to the database.
         *
-        * Note that this method will usually be called inside the same transaction bracket that will be used
-        * to save the new revision.
+        * Note that this method will usually be called inside the same transaction
+        * bracket that will be used to save the new revision.
         *
-        * Note that this method is called before any update to the page table is performed. This means that
-        * $page may not yet know a page ID.
+        * Note that this method is called before any update to the page table is
+        * performed. This means that $page may not yet know a page ID.
         *
         * @since 1.21
         *
         * @param WikiPage $page The page to be saved.
-        * @param int      $flags bitfield for use with EDIT_XXX constants, see WikiPage::doEditContent()
-        * @param int      $baseRevId the ID of the current revision
-        * @param User     $user
+        * @param int $flags bitfield for use with EDIT_XXX constants, see WikiPage::doEditContent()
+        * @param int $baseRevId the ID of the current revision
+        * @param User $user
         *
-        * @return Status A status object indicating whether the content was successfully prepared for saving.
-        *                If the returned status indicates an error, a rollback will be performed and the
-        *                transaction aborted.
+        * @return Status A status object indicating whether the content was
+        *   successfully prepared for saving. If the returned status indicates
+        *   an error, a rollback will be performed and the transaction aborted.
         *
         * @see see WikiPage::doEditContent()
         */
@@ -491,17 +492,16 @@ interface Content {
         * Converts this content object into another content object with the given content model,
         * if that is possible.
         *
-        * @param string  $toModel the desired content model, use the CONTENT_MODEL_XXX flags.
-        * @param string  $lossy flag, set to "lossy" to allow lossy conversion. If lossy conversion is
+        * @param string $toModel the desired content model, use the CONTENT_MODEL_XXX flags.
+        * @param string $lossy flag, set to "lossy" to allow lossy conversion. If lossy conversion is
         * not allowed, full round-trip conversion is expected to work without losing information.
         *
         * @return Content|bool A content object with the content model $toModel, or false if
         * that conversion is not supported.
         */
        public function convert( $toModel, $lossy = '' );
-
-               // TODO: ImagePage and CategoryPage interfere with per-content action handlers
-       // TODO: nice&sane integration of GeSHi syntax highlighting
+       // @todo ImagePage and CategoryPage interfere with per-content action handlers
+       // @todo nice&sane integration of GeSHi syntax highlighting
        //   [11:59] <vvv> Hooks are ugly; make CodeHighlighter interface and a
        //   config to set the class which handles syntax highlighting
        //   [12:00] <vvv> And default it to a DummyHighlighter
index 8991290..1abe1fa 100644 (file)
@@ -31,7 +31,6 @@
  * @ingroup Content
  */
 class MWContentSerializationException extends MWException {
-
 }
 
 /**
@@ -54,7 +53,6 @@ class MWContentSerializationException extends MWException {
  * @ingroup Content
  */
 abstract class ContentHandler {
-
        /**
         * Switch for enabling deprecation warnings. Used by ContentHandler::deprecated()
         * and ContentHandler::runLegacyHooks().
@@ -145,8 +143,8 @@ abstract class ContentHandler {
         *    not be unserialized using $format.
         */
        public static function makeContent( $text, Title $title = null,
-               $modelId = null, $format = null )
-       {
+               $modelId = null, $format = null
+       {
                if ( is_null( $modelId ) ) {
                        if ( is_null( $title ) ) {
                                throw new MWException( "Must provide a Title object or a content model ID." );
@@ -156,6 +154,7 @@ abstract class ContentHandler {
                }
 
                $handler = ContentHandler::getForModelID( $modelId );
+
                return $handler->unserializeContent( $text, $format );
        }
 
@@ -259,6 +258,7 @@ abstract class ContentHandler {
         */
        public static function getForTitle( Title $title ) {
                $modelId = $title->getContentModel();
+
                return ContentHandler::getForModelID( $modelId );
        }
 
@@ -273,13 +273,14 @@ abstract class ContentHandler {
         */
        public static function getForContent( Content $content ) {
                $modelId = $content->getModel();
+
                return ContentHandler::getForModelID( $modelId );
        }
 
        /**
-        * @var Array A Cache of ContentHandler instances by model id
+        * @var array A Cache of ContentHandler instances by model id
         */
-       static $handlers;
+       protected static $handlers;
 
        /**
         * Returns the ContentHandler singleton for the given model ID. Use the
@@ -330,14 +331,16 @@ abstract class ContentHandler {
                        $handler = new $class( $modelId );
 
                        if ( !( $handler instanceof ContentHandler ) ) {
-                               throw new MWException( "$class from \$wgContentHandlers is not compatible with ContentHandler" );
+                               throw new MWException( "$class from \$wgContentHandlers is not " .
+                                       "compatible with ContentHandler" );
                        }
                }
 
                wfDebugLog( 'ContentHandler', 'Created handler for ' . $modelId
-                                       . ': ' . get_class( $handler ) );
+                       . ': ' . get_class( $handler ) );
 
                ContentHandler::$handlers[$modelId] = $handler;
+
                return ContentHandler::$handlers[$modelId];
        }
 
@@ -350,10 +353,12 @@ abstract class ContentHandler {
         * @param string $name The content model ID, as given by a CONTENT_MODEL_XXX
         *    constant or returned by Revision::getContentModel().
         *
-        * @return string The content format's localized name.
+        * @return string The content model's localized name.
         * @throws MWException if the model id isn't known.
         */
        public static function getLocalizedName( $name ) {
+               // Messages: content-model-wikitext, content-model-text,
+               // content-model-javascript, content-model-css
                $key = "content-model-$name";
 
                $msg = wfMessage( $key );
@@ -378,6 +383,7 @@ abstract class ContentHandler {
                }
 
                $formats = array_unique( $formats );
+
                return $formats;
        }
 
@@ -596,16 +602,18 @@ abstract class ContentHandler {
        /**
         * Get the language in which the content of the given page is written.
         *
-        * This default implementation just returns $wgContLang (except for pages in the MediaWiki namespace)
+        * This default implementation just returns $wgContLang (except for pages
+        * in the MediaWiki namespace)
         *
-        * Note that the pages language is not cacheable, since it may in some cases depend on user settings.
+        * Note that the pages language is not cacheable, since it may in some
+        * cases depend on user settings.
         *
         * Also note that the page language may or may not depend on the actual content of the page,
         * that is, this method may load the content in order to determine the language.
         *
         * @since 1.21
         *
-        * @param Title        $title the page to determine the language for.
+        * @param Title $title the page to determine the language for.
         * @param Content|null $content the page's content, if you have it handy, to avoid reloading it.
         *
         * @return Language the page's language
@@ -621,6 +629,7 @@ abstract class ContentHandler {
                }
 
                wfRunHooks( 'PageContentLanguage', array( $title, &$pageLang, $wgLang ) );
+
                return wfGetLangObj( $pageLang );
        }
 
@@ -639,7 +648,7 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @param Title        $title the page to determine the language for.
+        * @param Title $title the page to determine the language for.
         * @param Content|null $content the page's content, if you have it handy, to avoid reloading it.
         *
         * @return Language the page's language for viewing
@@ -733,15 +742,15 @@ abstract class ContentHandler {
                if ( is_object( $rt ) ) {
                        if ( !is_object( $ot )
                                || !$rt->equals( $ot )
-                               || $ot->getFragment() != $rt->getFragment() )
-                       {
+                               || $ot->getFragment() != $rt->getFragment()
+                       {
                                $truncatedtext = $newContent->getTextForSummary(
                                        250
-                                               - strlen( wfMessage( 'autoredircomment' )->inContentLanguage()->text() )
-                                               - strlen( $rt->getFullText() ) );
+                                       - strlen( wfMessage( 'autoredircomment' )->inContentLanguage()->text() )
+                                       - strlen( $rt->getFullText() ) );
 
                                return wfMessage( 'autoredircomment', $rt->getFullText() )
-                                               ->rawParams( $truncatedtext )->inContentLanguage()->text();
+                                       ->rawParams( $truncatedtext )->inContentLanguage()->text();
                        }
                }
 
@@ -754,7 +763,7 @@ abstract class ContentHandler {
                                200 - strlen( wfMessage( 'autosumm-new' )->inContentLanguage()->text() ) );
 
                        return wfMessage( 'autosumm-new' )->rawParams( $truncatedtext )
-                                       ->inContentLanguage()->text();
+                               ->inContentLanguage()->text();
                }
 
                // Blanking auto-summaries
@@ -762,15 +771,15 @@ abstract class ContentHandler {
                        return wfMessage( 'autosumm-blank' )->inContentLanguage()->text();
                } elseif ( !empty( $oldContent )
                        && $oldContent->getSize() > 10 * $newContent->getSize()
-                       && $newContent->getSize() < 500 )
-               {
+                       && $newContent->getSize() < 500
+               {
                        // Removing more than 90% of the article
 
                        $truncatedtext = $newContent->getTextForSummary(
                                200 - strlen( wfMessage( 'autosumm-replace' )->inContentLanguage()->text() ) );
 
                        return wfMessage( 'autosumm-replace' )->rawParams( $truncatedtext )
-                                       ->inContentLanguage()->text();
+                               ->inContentLanguage()->text();
                }
 
                // If we reach this point, there's no applicable auto-summary for our
@@ -1002,11 +1011,11 @@ abstract class ContentHandler {
         * Logs a deprecation warning, visible if $wgDevelopmentWarnings, but only if
         * self::$enableDeprecationWarnings is set to true.
         *
-        * @param string      $func The name of the deprecated function
-        * @param string      $version The version since the method is deprecated. Usually 1.21
-        *                    for ContentHandler related stuff.
-        * @param string|bool $component: Component to which the function belongs.
-        *                                If false, it is assumed the function is in MediaWiki core.
+        * @param string $func The name of the deprecated function
+        * @param string $version The version since the method is deprecated. Usually 1.21
+        *   for ContentHandler related stuff.
+        * @param string|bool $component : Component to which the function belongs.
+        *   If false, it is assumed the function is in MediaWiki core.
         *
         * @see ContentHandler::$enableDeprecationWarnings
         * @see wfDeprecated
@@ -1035,7 +1044,8 @@ abstract class ContentHandler {
         * @see ContentHandler::$enableDeprecationWarnings
         */
        public static function runLegacyHooks( $event, $args = array(),
-                       $warn = null ) {
+               $warn = null
+       ) {
 
                if ( $warn === null ) {
                        $warn = self::$enableDeprecationWarnings;
@@ -1077,7 +1087,8 @@ abstract class ContentHandler {
 
                        wfRestoreWarnings();
 
-                       wfWarn( "Using obsolete hook $event via ContentHandler::runLegacyHooks()! Handlers: " . implode( ', ', $handlerInfo ), 2 );
+                       wfWarn( "Using obsolete hook $event via ContentHandler::runLegacyHooks()! Handlers: " .
+                               implode( ', ', $handlerInfo ), 2 );
                }
 
                // convert Content objects to text
index cb5a349..7becabb 100644 (file)
@@ -28,7 +28,6 @@
  * @ingroup Content
  */
 class CssContentHandler extends TextContentHandler {
-
        public function __construct( $modelId = CONTENT_MODEL_CSS ) {
                parent::__construct( $modelId, array( CONTENT_FORMAT_CSS ) );
        }
@@ -46,6 +45,8 @@ class CssContentHandler extends TextContentHandler {
        /**
         * Returns the english language, because CSS is english, and should be handled as such.
         *
+        * @param Title $title
+        * @param Content $content
         * @return Language wfGetLangObj( 'en' )
         *
         * @see ContentHandler::getPageLanguage()
@@ -57,6 +58,8 @@ class CssContentHandler extends TextContentHandler {
        /**
         * Returns the english language, because CSS is english, and should be handled as such.
         *
+        * @param Title $title
+        * @param Content $content
         * @return Language wfGetLangObj( 'en' )
         *
         * @see ContentHandler::getPageViewLanguage()
index 33fa917..064c422 100644 (file)
@@ -28,7 +28,6 @@
  * @todo make ScriptContentHandler base class, do highlighting stuff there?
  */
 class JavaScriptContentHandler extends TextContentHandler {
-
        public function __construct( $modelId = CONTENT_MODEL_JAVASCRIPT ) {
                parent::__construct( $modelId, array( CONTENT_FORMAT_JAVASCRIPT ) );
        }
@@ -46,6 +45,8 @@ class JavaScriptContentHandler extends TextContentHandler {
        /**
         * Returns the english language, because JS is english, and should be handled as such.
         *
+        * @param Title $title
+        * @param Content $content
         * @return Language wfGetLangObj( 'en' )
         *
         * @see ContentHandler::getPageLanguage()
@@ -57,6 +58,8 @@ class JavaScriptContentHandler extends TextContentHandler {
        /**
         * Returns the english language, because JS is english, and should be handled as such.
         *
+        * @param Title $title
+        * @param Content $content
         * @return Language wfGetLangObj( 'en' )
         *
         * @see ContentHandler::getPageViewLanguage()
index b36b670..e780846 100644 (file)
  * @ingroup Content
  */
 class MessageContent extends AbstractContent {
-
        /**
         * @var Message
         */
        protected $mMessage;
 
        /**
-        * @param Message|String $msg    A Message object, or a message key
-        * @param array|null     $params An optional array of message parameters
+        * @param Message|String $msg A Message object, or a message key
+        * @param array|null $params An optional array of message parameters
         */
        public function __construct( $msg, $params = null ) {
                # XXX: messages may be wikitext, html or plain text! and maybe even something else entirely.
@@ -130,6 +129,7 @@ class MessageContent extends AbstractContent {
        /**
         * @see Content::isCountable
         *
+        * @param bool $hasLinks
         * @return bool false
         */
        public function isCountable( $hasLinks = null ) {
@@ -139,6 +139,10 @@ class MessageContent extends AbstractContent {
        /**
         * @see Content::getParserOutput
         *
+        * @param Title $title
+        * @param int $revId Optional revision ID
+        * @param ParserOptions $options
+        * @param bool $generateHtml Wether to generate HTML
         * @return ParserOutput
         */
        public function getParserOutput(
@@ -153,6 +157,7 @@ class MessageContent extends AbstractContent {
                }
 
                $po = new ParserOutput( $html );
+
                return $po;
        }
 }
index f66dacd..d03d61e 100644 (file)
  * @ingroup Content
  */
 class TextContent extends AbstractContent {
-
        public function __construct( $text, $model_id = CONTENT_MODEL_TEXT ) {
                parent::__construct( $model_id );
 
                if ( $text === null || $text === false ) {
                        wfWarn( "TextContent constructed with \$text = " . var_export( $text, true ) . "! "
-                                       . "This may indicate an error in the caller's scope." );
+                               . "This may indicate an error in the caller's scope." );
 
                        $text = '';
                }
@@ -74,6 +73,7 @@ class TextContent extends AbstractContent {
         */
        public function getSize() {
                $text = $this->getNativeData();
+
                return strlen( $text );
        }
 
@@ -107,6 +107,7 @@ class TextContent extends AbstractContent {
         */
        public function getNativeData() {
                $text = $this->mText;
+
                return $text;
        }
 
@@ -156,14 +157,14 @@ class TextContent extends AbstractContent {
        /**
         * Diff this content object with another content object.
         *
-        * @since 1.21diff
+        * @since 1.21
         *
         * @param $that Content: The other content object to compare this content
         * object to.
         * @param $lang Language: The language object to use for text segmentation.
         *    If not given, $wgContentLang is used.
         *
-        * @return DiffResult: A diff representing the changes that would have to be
+        * @return Diff A diff representing the changes that would have to be
         *    made to this content object to make it equal to $that.
         */
        public function diff( Content $that, Language $lang = null ) {
@@ -178,13 +179,14 @@ class TextContent extends AbstractContent {
                }
 
                $otext = $this->getNativeData();
-               $ntext = $this->getNativeData();
+               $ntext = $that->getNativeData();
 
                # Note: Use native PHP diff, external engines don't give us abstract output
                $ota = explode( "\n", $lang->segmentForDiff( $otext ) );
                $nta = explode( "\n", $lang->segmentForDiff( $ntext ) );
 
                $diff = new Diff( $ota, $nta );
+
                return $diff;
        }
 
@@ -224,6 +226,7 @@ class TextContent extends AbstractContent {
                }
 
                $po->setText( $html );
+
                return $po;
        }
 
@@ -259,8 +262,8 @@ class TextContent extends AbstractContent {
         * This implementation provides lossless conversion between content models based
         * on TextContent.
         *
-        * @param string  $toModel the desired content model, use the CONTENT_MODEL_XXX flags.
-        * @param string  $lossy flag, set to "lossy" to allow lossy conversion. If lossy conversion is
+        * @param string $toModel the desired content model, use the CONTENT_MODEL_XXX flags.
+        * @param string $lossy flag, set to "lossy" to allow lossy conversion. If lossy conversion is
         * not allowed, full round-trip conversion is expected to work without losing information.
         *
         * @return Content|bool A content object with the content model $toModel, or false if
index e7f41e1..c4584ae 100644 (file)
@@ -29,8 +29,9 @@
  * @ingroup Content
  */
 class TextContentHandler extends ContentHandler {
-
-       public function __construct( $modelId = CONTENT_MODEL_TEXT, $formats = array( CONTENT_FORMAT_TEXT ) ) {
+       public function __construct( $modelId = CONTENT_MODEL_TEXT,
+               $formats = array( CONTENT_FORMAT_TEXT )
+       ) {
                parent::__construct( $modelId, $formats );
        }
 
@@ -43,6 +44,7 @@ class TextContentHandler extends ContentHandler {
         */
        public function serializeContent( Content $content, $format = null ) {
                $this->checkFormat( $format );
+
                return $content->getNativeData();
        }
 
@@ -83,6 +85,7 @@ class TextContentHandler extends ContentHandler {
                }
 
                $mergedContent = $this->unserializeContent( $result, $format );
+
                return $mergedContent;
        }
 
index 26337db..1f96bdc 100644 (file)
@@ -31,7 +31,6 @@
  * @ingroup Content
  */
 class WikitextContent extends TextContent {
-
        public function __construct( $text ) {
                parent::__construct( $text, CONTENT_MODEL_WIKITEXT );
        }
@@ -73,11 +72,14 @@ class WikitextContent extends TextContent {
 
                if ( $section === '' ) {
                        wfProfileOut( __METHOD__ );
+
                        return $with; # XXX: copy first?
-               } if ( $section == 'new' ) {
+               }
+
+               if ( $section == 'new' ) {
                        # Inserting a new section
                        $subject = $sectionTitle ? wfMessage( 'newsectionheaderdefaultlevel' )
-                               ->rawParams( $sectionTitle )->inContentLanguage()->text() . "\n\n" : '';
+                                       ->rawParams( $sectionTitle )->inContentLanguage()->text() . "\n\n" : '';
                        if ( wfRunHooks( 'PlaceNewSection', array( $this, $oldtext, $subject, &$text ) ) ) {
                                $text = strlen( trim( $oldtext ) ) > 0
                                        ? "{$oldtext}\n\n{$subject}{$text}"
@@ -93,6 +95,7 @@ class WikitextContent extends TextContent {
                $newContent = new WikitextContent( $text );
 
                wfProfileOut( __METHOD__ );
+
                return $newContent;
        }
 
@@ -183,14 +186,16 @@ class WikitextContent extends TextContent {
                                if ( !$title instanceof Title || !$title->isValidRedirectTarget() ) {
                                        return null;
                                }
+
                                return $title;
                        }
                }
+
                return null;
        }
 
        /**
-        * @see   Content::updateRedirect()
+        * @see Content::updateRedirect()
         *
         * This implementation replaces the first link on the page with the given new target
         * if this Content object is a redirect. Otherwise, this method returns $this.
@@ -199,7 +204,8 @@ class WikitextContent extends TextContent {
         *
         * @param Title $target
         *
-        * @return Content a new Content object with the updated redirect (or $this if this Content object isn't a redirect)
+        * @return Content a new Content object with the updated redirect (or $this
+        *   if this Content object isn't a redirect)
         */
        public function updateRedirect( Title $target ) {
                if ( !$this->isRedirect() ) {
@@ -220,7 +226,7 @@ class WikitextContent extends TextContent {
         * Returns true if this content is not a redirect, and this content's text
         * is countable according to the criteria defined by $wgArticleCountMethod.
         *
-        * @param bool $hasLinks  if it is known whether this content contains
+        * @param bool $hasLinks if it is known whether this content contains
         *    links, provide this information here, to avoid redundant parsing to
         *    find out (default: null).
         * @param $title Title: (default: null)
@@ -298,6 +304,7 @@ class WikitextContent extends TextContent {
                }
 
                $po = $wgParser->parse( $this->getNativeData(), $title, $options, true, true, $revId );
+
                return $po;
        }
 
index b1b461f..1e8fd05 100644 (file)
@@ -29,7 +29,6 @@
  * @ingroup Content
  */
 class WikitextContentHandler extends TextContentHandler {
-
        public function __construct( $modelId = CONTENT_MODEL_WIKITEXT ) {
                parent::__construct( $modelId, array( CONTENT_FORMAT_WIKITEXT ) );
        }
@@ -72,7 +71,9 @@ class WikitextContentHandler extends TextContentHandler {
                }
 
                $mwRedir = MagicWord::get( 'redirect' );
-               $redirectText = $mwRedir->getSynonym( 0 ) . ' [[' . $optionalColon . $destination->getFullText() . ']]';
+               $redirectText = $mwRedir->getSynonym( 0 ) .
+                       ' [[' . $optionalColon . $destination->getFullText() . ']]';
+
                if ( $text != '' ) {
                        $redirectText .= "\n" . $text;
                }
index e13cfa8..0a3f18f 100644 (file)
@@ -41,9 +41,11 @@ abstract class ContextSource implements IContextSource {
        public function getContext() {
                if ( $this->context === null ) {
                        $class = get_class( $this );
-                       wfDebug( __METHOD__ . " ($class): called and \$context is null. Using RequestContext::getMain() for sanity\n" );
+                       wfDebug( __METHOD__ . " ($class): called and \$context is null. " .
+                               "Using RequestContext::getMain() for sanity\n" );
                        $this->context = RequestContext::getMain();
                }
+
                return $this->context;
        }
 
@@ -130,6 +132,7 @@ abstract class ContextSource implements IContextSource {
         */
        public function getLang() {
                wfDeprecated( __METHOD__, '1.19' );
+
                return $this->getLanguage();
        }
 
@@ -162,6 +165,7 @@ abstract class ContextSource implements IContextSource {
         */
        public function msg( /* $args */ ) {
                $args = func_get_args();
+
                return call_user_func_array( array( $this->getContext(), 'msg' ), $args );
        }
 
index fd9bf96..e96269d 100644 (file)
@@ -99,6 +99,7 @@ class DerivativeContext extends ContextSource {
         * Set the Title object
         *
         * @param Title $t
+        * @throws MWException
         */
        public function setTitle( $t ) {
                if ( $t !== null && !$t instanceof Title ) {
@@ -298,6 +299,7 @@ class DerivativeContext extends ContextSource {
         */
        public function msg() {
                $args = func_get_args();
+
                return call_user_func_array( 'wfMessage', $args )->setContext( $this );
        }
 }
index 01ec57c..04879e2 100644 (file)
@@ -82,6 +82,7 @@ class RequestContext implements IContextSource {
                        global $wgRequest; # fallback to $wg till we can improve this
                        $this->request = $wgRequest;
                }
+
                return $this->request;
        }
 
@@ -89,6 +90,7 @@ class RequestContext implements IContextSource {
         * Set the Title object
         *
         * @param Title $t
+        * @throws MWException
         */
        public function setTitle( $t ) {
                if ( $t !== null && !$t instanceof Title ) {
@@ -109,6 +111,7 @@ class RequestContext implements IContextSource {
                        global $wgTitle; # fallback to $wg till we can improve this
                        $this->title = $wgTitle;
                }
+
                return $this->title;
        }
 
@@ -169,6 +172,7 @@ class RequestContext implements IContextSource {
                        }
                        $this->wikipage = WikiPage::factory( $title );
                }
+
                return $this->wikipage;
        }
 
@@ -188,6 +192,7 @@ class RequestContext implements IContextSource {
                if ( $this->output === null ) {
                        $this->output = new OutputPage( $this );
                }
+
                return $this->output;
        }
 
@@ -209,6 +214,7 @@ class RequestContext implements IContextSource {
                if ( $this->user === null ) {
                        $this->user = User::newFromSession( $this->getRequest() );
                }
+
                return $this->user;
        }
 
@@ -269,6 +275,7 @@ class RequestContext implements IContextSource {
         */
        public function getLang() {
                wfDeprecated( __METHOD__, '1.19' );
+
                return $this->getLanguage();
        }
 
@@ -364,6 +371,7 @@ class RequestContext implements IContextSource {
                        $this->skin->setContext( $this );
                        wfProfileOut( __METHOD__ . '-createskin' );
                }
+
                return $this->skin;
        }
 
@@ -377,6 +385,7 @@ class RequestContext implements IContextSource {
         */
        public function msg() {
                $args = func_get_args();
+
                return call_user_func_array( 'wfMessage', $args )->setContext( $this );
        }
 
@@ -392,6 +401,7 @@ class RequestContext implements IContextSource {
                if ( $instance === null ) {
                        $instance = new self;
                }
+
                return $instance;
        }
 
@@ -446,7 +456,7 @@ class RequestContext implements IContextSource {
                        $user = User::newFromName( $params['ip'], false );
                }
 
-               $importSessionFunction = function( User $user, array $params ) {
+               $importSessionFunction = function ( User $user, array $params ) {
                        global $wgRequest, $wgUser;
 
                        $context = RequestContext::getMain();
@@ -482,7 +492,7 @@ class RequestContext implements IContextSource {
                $importSessionFunction( $user, $params );
 
                // Set callback to save and close the new session and reload the old one
-               return new ScopedCallback( function() use ( $importSessionFunction, $oUser, $oParams ) {
+               return new ScopedCallback( function () use ( $importSessionFunction, $oUser, $oParams ) {
                        $importSessionFunction( $oUser, $oParams );
                } );
        }
@@ -510,6 +520,7 @@ class RequestContext implements IContextSource {
                        $context->setRequest( new FauxRequest( $request ) );
                }
                $context->user = User::newFromName( '127.0.0.1', false );
+
                return $context;
        }
 }
index 6c009de..a9f7b7f 100644 (file)
@@ -28,7 +28,6 @@
  * @author Daniel Kinzler
  */
 abstract class DBAccessBase implements IDBAccessObject {
-
        /**
         * @var String|bool $wiki The target wiki's name. This must be an ID
         * that LBFactory can understand.
@@ -58,6 +57,7 @@ abstract class DBAccessBase implements IDBAccessObject {
         */
        protected function getConnection( $id, $groups = array() ) {
                $loadBalancer = wfGetLB( $this->wiki );
+
                return $loadBalancer->getConnection( $id, $groups, $this->wiki );
        }
 
@@ -68,7 +68,7 @@ abstract class DBAccessBase implements IDBAccessObject {
         *
         * @since 1.21
         *
-        * @param DatabaseBase  $db the database connection to release.
+        * @param DatabaseBase $db the database connection to release.
         */
        protected function releaseConnection( DatabaseBase $db ) {
                if ( $this->wiki !== false ) {
index de5e72c..3d1f453 100644 (file)
@@ -83,6 +83,7 @@ class ChronologyProtector {
                $info = $lb->parentInfo();
                if ( !$db || !$db->doneWrites() ) {
                        wfDebug( __METHOD__ . ": LB {$info['id']}, no writes done\n" );
+
                        return;
                }
                $pos = $db->getMasterPos();
index 819925c..1e01d29 100644 (file)
@@ -25,7 +25,6 @@
  */
 
 class CloneDatabase {
-
        /**
         * Table prefix for cloning
         * @var String
@@ -66,8 +65,8 @@ class CloneDatabase {
         * @param $dropCurrentTables bool
         */
        public function __construct( DatabaseBase $db, array $tablesToClone,
-               $newTablePrefix, $oldTablePrefix = '', $dropCurrentTables = true )
-       {
+               $newTablePrefix, $oldTablePrefix = '', $dropCurrentTables = true
+       {
                $this->db = $db;
                $this->tablesToClone = $tablesToClone;
                $this->newTablePrefix = $newTablePrefix;
@@ -98,7 +97,9 @@ class CloneDatabase {
                        self::changePrefix( $this->newTablePrefix );
                        $newTableName = $this->db->tableName( $tbl, 'raw' );
 
-                       if ( $this->dropCurrentTables && !in_array( $this->db->getType(), array( 'postgres', 'oracle' ) ) ) {
+                       if ( $this->dropCurrentTables
+                               && !in_array( $this->db->getType(), array( 'postgres', 'oracle' ) )
+                       ) {
                                $this->db->dropTable( $tbl, __METHOD__ );
                                wfDebug( __METHOD__ . " dropping {$newTableName}\n", true );
                                //Dropping the oldTable because the prefix was changed
index 30e92e5..f70934b 100644 (file)
@@ -208,7 +208,8 @@ interface DatabaseType {
  * Interface for classes that implement or wrap DatabaseBase
  * @ingroup Database
  */
-interface IDatabase {}
+interface IDatabase {
+}
 
 /**
  * Database abstraction object
@@ -243,7 +244,6 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
        protected $mTablePrefix;
        protected $mFlags;
        protected $mForeign;
-       protected $mTrxLevel = 0;
        protected $mErrorCount = 0;
        protected $mLBInfo = array();
        protected $mFakeSlaveLag = null, $mFakeMaster = false;
@@ -256,6 +256,14 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
 
        protected $delimiter = ';';
 
+       /**
+        * Either 1 if a transaction is active or 0 otherwise.
+        * The other Trx fields may not be meaningfull if this is 0.
+        *
+        * @var int
+        */
+       protected $mTrxLevel = 0;
+
        /**
         * Remembers the function name given for starting the most recent transaction via begin().
         * Used to provide additional context for error reporting.
@@ -391,16 +399,15 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
        }
 
        /**
-        * Gets or sets the current transaction level.
+        * Gets the current transaction level.
         *
         * Historically, transactions were allowed to be "nested". This is no
         * longer supported, so this function really only returns a boolean.
         *
-        * @param int $level An integer (0 or 1), or omitted to leave it unchanged.
         * @return int The previous value
         */
-       public function trxLevel( $level = null ) {
-               return wfSetVar( $this->mTrxLevel, $level );
+       public function trxLevel() {
+               return $this->mTrxLevel;
        }
 
        /**
@@ -620,7 +627,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
        /**
         * Clear a flag for this connection
         *
-        * @param $flag: same as setFlag()'s $flag param
+        * @param $flag : same as setFlag()'s $flag param
         */
        public function clearFlag( $flag ) {
                global $wgDebugDBTransactions;
@@ -633,7 +640,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
        /**
         * Returns a boolean whether the flag $flag is set for this connection
         *
-        * @param $flag: same as setFlag()'s $flag param
+        * @param $flag : same as setFlag()'s $flag param
         * @return Boolean
         */
        public function getFlag( $flag ) {
@@ -706,7 +713,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                        $tablePrefix = $params['tablePrefix'];
                        $foreign = $params['foreign'];
                } else { // legacy calling pattern
-                       wfDeprecated( __METHOD__ . " method called without parameter array.", "1.22" );
+                       wfDeprecated( __METHOD__ . " method called without parameter array.", "1.23" );
                        $args = func_get_args();
                        $server = isset( $args[0] ) ? $args[0] : false;
                        $user = isset( $args[1] ) ? $args[1] : false;
@@ -752,13 +759,14 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         * not restored on unserialize.
         */
        public function __sleep() {
-               throw new MWException( 'Database serialization may cause problems, since the connection is not restored on wakeup.' );
+               throw new MWException( 'Database serialization may cause problems, since ' .
+                       'the connection is not restored on wakeup.' );
        }
 
        /**
         * Given a DB type, construct the name of the appropriate child class of
         * DatabaseBase. This is designed to replace all of the manual stuff like:
-        *      $class = 'Database' . ucfirst( strtolower( $dbType ) );
+        *    $class = 'Database' . ucfirst( strtolower( $dbType ) );
         * as well as validate against the canonical list of DB types we have
         *
         * This factory function is mostly useful for when you need to connect to a
@@ -778,11 +786,11 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         */
        final public static function factory( $dbType, $p = array() ) {
                $canonicalDBTypes = array(
-                       'mysql'    => array( 'mysqli', 'mysql' ),
+                       'mysql' => array( 'mysqli', 'mysql' ),
                        'postgres' => array(),
-                       'sqlite'   => array(),
-                       'oracle'   => array(),
-                       'mssql'    => array(),
+                       'sqlite' => array(),
+                       'oracle' => array(),
+                       'mssql' => array(),
                );
 
                $driver = false;
@@ -823,6 +831,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                                'tablePrefix' => isset( $p['tablePrefix'] ) ? $p['tablePrefix'] : 'get from global',
                                'foreign' => isset( $p['foreign'] ) ? $p['foreign'] : false
                        );
+
                        return new $class( $params );
                } else {
                        return null;
@@ -846,6 +855,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                if ( $this->mPHPError ) {
                        $error = preg_replace( '!\[<a.*</a>\]!', '', $this->mPHPError );
                        $error = preg_replace( '!^.*?:\s?(.*)$!', '$1', $error );
+
                        return $error;
                } else {
                        return false;
@@ -885,6 +895,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
 
                        $ret = $this->closeConnection();
                        $this->mConn = false;
+
                        return $ret;
                } else {
                        return true;
@@ -981,8 +992,8 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
 
                # If DBO_TRX is set, start a transaction
                if ( ( $this->mFlags & DBO_TRX ) && !$this->mTrxLevel &&
-                       $sql != 'BEGIN' && $sql != 'COMMIT' && $sql != 'ROLLBACK' )
-               {
+                       $sql != 'BEGIN' && $sql != 'COMMIT' && $sql != 'ROLLBACK'
+               {
                        # Avoid establishing transactions for SHOW and SET statements too -
                        # that would delay transaction initializations to once connection
                        # is really used by application
@@ -1038,9 +1049,9 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                # Try reconnecting if the connection was lost
                if ( false === $ret && $this->wasErrorReissuable() ) {
                        # Transaction is gone, like it or not
+                       $hadTrx = $this->mTrxLevel; // possible lost transaction
+                       wfDebug( "Connection lost, reconnecting...\n" );
                        $this->mTrxLevel = 0;
-                       $this->mTrxIdleCallbacks = array(); // cancel
-                       $this->mTrxPreCommitCallbacks = array(); // cancel
                        wfDebug( "Connection lost, reconnecting...\n" );
 
                        if ( $this->ping() ) {
@@ -1053,7 +1064,10 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                                        # Not a database error to lose a transaction after a minute or two
                                        wfLogDBError( "Connection lost and reconnected after {$elapsed}s, query: $sqlx\n" );
                                }
-                               $ret = $this->doQuery( $commentedSql );
+                               if ( !$hadTrx ) {
+                                       # Should be safe to silently retry
+                                       $ret = $this->doQuery( $commentedSql );
+                               }
                        } else {
                                wfDebug( "Failed\n" );
                        }
@@ -1091,7 +1105,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                        wfDebug( "SQL ERROR (ignored): $error\n" );
                        $this->ignoreErrors( $ignore );
                } else {
-                       $sql1line = str_replace( "\n", "\\n", $sql );
+                       $sql1line = mb_substr( str_replace( "\n", "\\n", $sql ), 0, 5*1024 );
                        wfLogDBError( "$fname\t{$this->mServer}\t$errno\t$error\t$sql1line\n" );
                        wfDebug( "SQL ERROR: " . $error . "\n" );
                        throw new DBQueryError( $this, $error, $errno, $sql, $fname );
@@ -1189,9 +1203,15 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                                return $arg;
                        case '&':
                                # return $this->addQuotes( file_get_contents( $arg ) );
-                               throw new DBUnexpectedError( $this, '& mode is not implemented. If it\'s really needed, uncomment the line above.' );
+                               throw new DBUnexpectedError(
+                                       $this,
+                                       '& mode is not implemented. If it\'s really needed, uncomment the line above.'
+                               );
                        default:
-                               throw new DBUnexpectedError( $this, 'Received invalid match. This should never happen!' );
+                               throw new DBUnexpectedError(
+                                       $this,
+                                       'Received invalid match. This should never happen!'
+                               );
                }
        }
 
@@ -1353,6 +1373,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                                : $options['HAVING'];
                        $sql .= ' HAVING ' . $having;
                }
+
                return $sql;
        }
 
@@ -1369,8 +1390,10 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                        $ob = is_array( $options['ORDER BY'] )
                                ? implode( ',', $options['ORDER BY'] )
                                : $options['ORDER BY'];
+
                        return ' ORDER BY ' . $ob;
                }
+
                return '';
        }
 
@@ -1537,8 +1560,8 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         * @see DatabaseBase::select()
         */
        public function selectSQLText( $table, $vars, $conds = '', $fname = __METHOD__,
-               $options = array(), $join_conds = array() )
-       {
+               $options = array(), $join_conds = array()
+       {
                if ( is_array( $vars ) ) {
                        $vars = implode( ',', $this->fieldNamesWithAlias( $vars ) );
                }
@@ -1602,8 +1625,8 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         * @return object|bool
         */
        public function selectRow( $table, $vars, $conds, $fname = __METHOD__,
-               $options = array(), $join_conds = array() )
-       {
+               $options = array(), $join_conds = array()
+       {
                $options = (array)$options;
                $options['LIMIT'] = 1;
                $res = $this->select( $table, $vars, $conds, $fname, $options, $join_conds );
@@ -1642,8 +1665,8 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         * @return Integer: row count
         */
        public function estimateRowCount( $table, $vars = '*', $conds = '',
-               $fname = __METHOD__, $options = array() )
-       {
+               $fname = __METHOD__, $options = array()
+       {
                $rows = 0;
                $res = $this->select( $table, array( 'rowcount' => 'COUNT(*)' ), $conds, $fname, $options );
 
@@ -1896,7 +1919,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         * @param $table  String name of the table to UPDATE. This will be passed through
         *                DatabaseBase::tableName().
         *
-        * @param array $values  An array of values to SET. For each array element,
+        * @param array $values An array of values to SET. For each array element,
         *                the key gives the field name, and the value gives the data
         *                to set that field to. The data will be quoted by
         *                DatabaseBase::addQuotes().
@@ -2070,6 +2093,30 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                return 'CONCAT(' . implode( ',', $stringList ) . ')';
        }
 
+       /**
+        * Build a GROUP_CONCAT or equivalent statement for a query.
+        *
+        * This is useful for combining a field for several rows into a single string.
+        * NULL values will not appear in the output, duplicated values will appear,
+        * and the resulting delimiter-separated values have no defined sort order.
+        * Code using the results may need to use the PHP unique() or sort() methods.
+        *
+        * @param string $delim Glue to bind the results together
+        * @param string|array $table Table name
+        * @param string $field Field name
+        * @param string|array $conds Conditions
+        * @param string|array $join_conds Join conditions
+        * @return String SQL text
+        * @since 1.23
+        */
+       public function buildGroupConcatField(
+               $delim, $table, $field, $conds = '', $join_conds = array()
+       ) {
+               $fld = "GROUP_CONCAT($field SEPARATOR " . $this->addQuotes( $delim ) . ')';
+
+               return '(' . $this->selectSQLText( $table, $fld, $conds, null, array(), $join_conds ) . ')';
+       }
+
        /**
         * Change the current database
         *
@@ -2084,6 +2131,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                # if your database engine supports a concept similar to MySQL's
                # databases you may as well.
                $this->mDBname = $db;
+
                return true;
        }
 
@@ -2151,7 +2199,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                        list( $table ) = $dbDetails;
                        if ( $wgSharedDB !== null # We have a shared database
                                && $this->mForeign == false # We're not working on a foreign database
-                               && !$this->isQuotedIdentifier( $table ) # Paranoia check to prevent shared tables listing '`table`'
+                               && !$this->isQuotedIdentifier( $table ) # Prevent shared tables listing '`table`'
                                && in_array( $table, $wgSharedTables ) # A shared table is selected
                        ) {
                                $database = $wgSharedDB;
@@ -2253,6 +2301,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                        }
                        $retval[] = $this->tableNameWithAlias( $table, $alias );
                }
+
                return $retval;
        }
 
@@ -2286,6 +2335,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                        }
                        $retval[] = $this->fieldNameWithAlias( $field, $alias );
                }
+
                return $retval;
        }
 
@@ -2430,13 +2480,17 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
        }
 
        /**
-        * LIKE statement wrapper, receives a variable-length argument list with parts of pattern to match
-        * containing either string literals that will be escaped or tokens returned by anyChar() or anyString().
-        * Alternatively, the function could be provided with an array of aforementioned parameters.
+        * LIKE statement wrapper, receives a variable-length argument list with
+        * parts of pattern to match containing either string literals that will be
+        * escaped or tokens returned by anyChar() or anyString(). Alternatively,
+        * the function could be provided with an array of aforementioned
+        * parameters.
         *
-        * Example: $dbr->buildLike( 'My_page_title/', $dbr->anyString() ) returns a LIKE clause that searches
-        * for subpages of 'My page title'.
-        * Alternatively: $pattern = array( 'My_page_title/', $dbr->anyString() ); $query .= $dbr->buildLike( $pattern );
+        * Example: $dbr->buildLike( 'My_page_title/', $dbr->anyString() ) returns
+        * a LIKE clause that searches for subpages of 'My page title'.
+        * Alternatively:
+        *   $pattern = array( 'My_page_title/', $dbr->anyString() );
+        *   $query .= $dbr->buildLike( $pattern );
         *
         * @since 1.16
         * @return String: fully built LIKE statement
@@ -2719,8 +2773,8 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         * @throws DBUnexpectedError
         */
        public function deleteJoin( $delTable, $joinTable, $delVar, $joinVar, $conds,
-               $fname = __METHOD__ )
-       {
+               $fname = __METHOD__
+       {
                if ( !$conds ) {
                        throw new DBUnexpectedError( $this,
                                'DatabaseBase::deleteJoin() called with empty $conds' );
@@ -2831,8 +2885,8 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         */
        public function insertSelect( $destTable, $srcTable, $varMap, $conds,
                $fname = __METHOD__,
-               $insertOptions = array(), $selectOptions = array() )
-       {
+               $insertOptions = array(), $selectOptions = array()
+       {
                $destTable = $this->tableName( $destTable );
 
                if ( is_array( $insertOptions ) ) {
@@ -2891,6 +2945,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                if ( !is_numeric( $limit ) ) {
                        throw new DBUnexpectedError( $this, "Invalid non-numeric limit passed to limitResult()\n" );
                }
+
                return "$sql LIMIT "
                        . ( ( is_numeric( $offset ) && $offset != 0 ) ? "{$offset}," : "" )
                        . "{$limit} ";
@@ -2915,6 +2970,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         */
        public function unionQueries( $sqls, $all ) {
                $glue = $all ? ') UNION ALL (' : ') UNION (';
+
                return '(' . implode( $glue, $sqls ) . ')';
        }
 
@@ -2931,6 +2987,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                if ( is_array( $cond ) ) {
                        $cond = $this->makeList( $cond, LIST_AND );
                }
+
                return " (CASE WHEN $cond THEN $trueVal ELSE $falseVal END) ";
        }
 
@@ -3051,9 +3108,11 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                if ( $tries <= 0 ) {
                        $this->rollback( __METHOD__ );
                        $this->reportQueryError( $error, $errno, $sql, $fname );
+
                        return false;
                } else {
                        $this->commit( __METHOD__ );
+
                        return $retVal;
                }
        }
@@ -3078,15 +3137,18 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                        if ( $wait > $timeout * 1e6 ) {
                                wfDebug( "Fake slave timed out waiting for $pos ($wait us)\n" );
                                wfProfileOut( __METHOD__ );
+
                                return -1;
                        } elseif ( $wait > 0 ) {
                                wfDebug( "Fake slave waiting $wait us\n" );
                                usleep( $wait );
                                wfProfileOut( __METHOD__ );
+
                                return 1;
                        } else {
                                wfDebug( "Fake slave up to date ($wait us)\n" );
                                wfProfileOut( __METHOD__ );
+
                                return 0;
                        }
                }
@@ -3106,6 +3168,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                if ( !is_null( $this->mFakeSlaveLag ) ) {
                        $pos = new MySQLMasterPos( 'fake', microtime( true ) - $this->mFakeSlaveLag );
                        wfDebug( __METHOD__ . ": fake slave pos = $pos\n" );
+
                        return $pos;
                } else {
                        # Stub
@@ -3184,7 +3247,8 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                                        $this->clearFlag( DBO_TRX ); // make each query its own transaction
                                        call_user_func( $phpCallback );
                                        $this->setFlag( $autoTrx ? DBO_TRX : 0 ); // restore automatic begin()
-                               } catch ( Exception $e ) {}
+                               } catch ( Exception $e ) {
+                               }
                        }
                } while ( count( $this->mTrxIdleCallbacks ) );
 
@@ -3207,7 +3271,8 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                                try {
                                        list( $phpCallback ) = $callback;
                                        call_user_func( $phpCallback );
-                               } catch ( Exception $e ) {}
+                               } catch ( Exception $e ) {
+                               }
                        }
                } while ( count( $this->mTrxPreCommitCallbacks ) );
 
@@ -3238,6 +3303,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         *
         * @since 1.23
         * @param string $fname
+        * @throws DBError
         */
        final public function startAtomic( $fname = __METHOD__ ) {
                if ( !$this->mTrxLevel ) {
@@ -3250,16 +3316,45 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
        }
 
        /**
-        * Begin a transaction. If a transaction is already in progress, that transaction will be committed before the
-        * new transaction is started.
+        * Ends an atomic section of SQL statements
         *
-        * Note that when the DBO_TRX flag is set (which is usually the case for web requests, but not for maintenance scripts),
-        * any previous database query will have started a transaction automatically.
+        * Ends the next section of atomic SQL statements and commits the transaction
+        * if necessary.
         *
-        * Nesting of transactions is not supported. Attempts to nest transactions will cause a warning, unless the current
-        * transaction was started automatically because of the DBO_TRX flag.
+        * @since 1.23
+        * @see DatabaseBase::startAtomic
+        * @param string $fname
+        * @throws DBError
+        */
+       final public function endAtomic( $fname = __METHOD__ ) {
+               if ( !$this->mTrxLevel ) {
+                       throw new DBUnexpectedError( $this, 'No atomic transaction is open.' );
+               }
+               if ( $this->mTrxAtomicLevels->isEmpty() ||
+                       $this->mTrxAtomicLevels->pop() !== $fname
+               ) {
+                       throw new DBUnexpectedError( $this, 'Invalid atomic section ended.' );
+               }
+
+               if ( $this->mTrxAtomicLevels->isEmpty() && $this->mTrxAutomaticAtomic ) {
+                       $this->commit( $fname, 'flush' );
+               }
+       }
+
+       /**
+        * Begin a transaction. If a transaction is already in progress,
+        * that transaction will be committed before the new transaction is started.
+        *
+        * Note that when the DBO_TRX flag is set (which is usually the case for web
+        * requests, but not for maintenance scripts), any previous database query
+        * will have started a transaction automatically.
+        *
+        * Nesting of transactions is not supported. Attempts to nest transactions
+        * will cause a warning, unless the current transaction was started
+        * automatically because of the DBO_TRX flag.
         *
         * @param $fname string
+        * @throws DBError
         */
        final public function begin( $fname = __METHOD__ ) {
                global $wgDebugDBTransactions;
@@ -3302,6 +3397,8 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                $this->mTrxAutomatic = false;
                $this->mTrxAutomaticAtomic = false;
                $this->mTrxAtomicLevels = new SplStack;
+               $this->mTrxIdleCallbacks = array();
+               $this->mTrxPreCommitCallbacks = array();
        }
 
        /**
@@ -3315,28 +3412,6 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                $this->mTrxLevel = 1;
        }
 
-       /**
-        * Ends an atomic section of SQL statements
-        *
-        * Ends the next section of atomic SQL statements and commits the transaction
-        * if necessary.
-        *
-        * @since 1.23
-        * @see DatabaseBase::startAtomic
-        * @param string $fname
-        */
-       final public function endAtomic( $fname = __METHOD__ ) {
-               if ( $this->mTrxAtomicLevels->isEmpty() ||
-                       $this->mTrxAtomicLevels->pop() !== $fname
-               ) {
-                       throw new DBUnexpectedError( $this, 'Invalid atomic section ended.' );
-               }
-
-               if ( $this->mTrxAtomicLevels->isEmpty() && $this->mTrxAutomaticAtomic ) {
-                       $this->commit( $fname, 'flush' );
-               }
-       }
-
        /**
         * Commits a transaction previously started using begin().
         * If no transaction is in progress, a warning is issued.
@@ -3344,15 +3419,19 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         * Nesting of transactions is not supported.
         *
         * @param $fname string
-        * @param string $flush Flush flag, set to 'flush' to disable warnings about explicitly committing implicit
-        *        transactions, or calling commit when no transaction is in progress.
-        *        This will silently break any ongoing explicit transaction. Only set the flush flag if you are sure
-        *        that it is safe to ignore these warnings in your context.
+        * @param string $flush Flush flag, set to 'flush' to disable warnings about
+        *   explicitly committing implicit transactions, or calling commit when no
+        *   transaction is in progress. This will silently break any ongoing
+        *   explicit transaction. Only set the flush flag if you are sure that it
+        *   is safe to ignore these warnings in your context.
         */
        final public function commit( $fname = __METHOD__, $flush = '' ) {
                if ( !$this->mTrxAtomicLevels->isEmpty() ) {
                        // There are still atomic sections open. This cannot be ignored
-                       throw new DBUnexpectedError( $this, "Attempted to commit transaction while atomic sections are still open" );
+                       throw new DBUnexpectedError(
+                               $this,
+                               "Attempted to commit transaction while atomic sections are still open"
+                       );
                }
 
                if ( $flush != 'flush' ) {
@@ -3374,7 +3453,6 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                if ( $this->mTrxDoneWrites ) {
                        Profiler::instance()->transactionWritingOut( $this->mServer, $this->mDBname );
                }
-               $this->mTrxDoneWrites = false;
                $this->runOnTransactionIdleCallbacks();
        }
 
@@ -3410,7 +3488,6 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                if ( $this->mTrxDoneWrites ) {
                        Profiler::instance()->transactionWritingOut( $this->mServer, $this->mDBname );
                }
-               $this->mTrxDoneWrites = false;
        }
 
        /**
@@ -3473,8 +3550,8 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         * For caching purposes the list of all views should be stored in
         * $this->allViews. The process cache can be cleared with clearViewsCache()
         *
-        * @param string $prefix   Only show VIEWs with this prefix, eg. unit_test_
-        * @param string $fname    Name of calling function
+        * @param string $prefix Only show VIEWs with this prefix, eg. unit_test_
+        * @param string $fname Name of calling function
         * @throws MWException
         * @since 1.22
         */
@@ -3635,8 +3712,9 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         * @param bool|callable $lineCallback Optional function called before reading each line
         * @param bool|callable $resultCallback Optional function called for each MySQL result
         * @param bool|string $fname Calling function name or false if name should be
-        *      generated dynamically using $filename
-        * @param bool|callable $inputCallback Callback: Optional function called for each complete line sent
+        *   generated dynamically using $filename
+        * @param bool|callable $inputCallback Callback: Optional function called
+        *   for each complete line sent
         * @throws MWException
         * @throws Exception|MWException
         * @return bool|string
@@ -3658,8 +3736,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
 
                try {
                        $error = $this->sourceStream( $fp, $lineCallback, $resultCallback, $fname, $inputCallback );
-               }
-               catch ( MWException $e ) {
+               } catch ( MWException $e ) {
                        fclose( $fp );
                        throw $e;
                }
@@ -3713,8 +3790,8 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         * @return bool|string
         */
        public function sourceStream( $fp, $lineCallback = false, $resultCallback = false,
-               $fname = __METHOD__, $inputCallback = false )
-       {
+               $fname = __METHOD__, $inputCallback = false
+       {
                $cmd = '';
 
                while ( !feof( $fp ) ) {
@@ -3752,6 +3829,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
 
                                        if ( false === $res ) {
                                                $err = $this->lastError();
+
                                                return "Query \"{$cmd}\" failed with error code \"$err\".\n";
                                        }
                                }
@@ -3777,6 +3855,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                                return true;
                        }
                }
+
                return false;
        }
 
@@ -3807,6 +3886,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                        // replace /*$var*/
                        $ins = str_replace( '/*$' . $var . '*/', $this->strencode( $value ), $ins );
                }
+
                return $ins;
        }
 
@@ -3960,6 +4040,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                if ( $this->cascadingDeletes() ) {
                        $sql .= " CASCADE";
                }
+
                return $this->query( $sql, $fName );
        }
 
@@ -4040,7 +4121,6 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                        $callers = array();
                        foreach ( $this->mTrxIdleCallbacks as $callbackInfo ) {
                                $callers[] = $callbackInfo[1];
-
                        }
                        $callers = implode( ', ', $callers );
                        trigger_error( "DB transaction callbacks still pending (from $callers)." );
index f14a502..8be8530 100644 (file)
@@ -26,7 +26,6 @@
  * @ingroup Database
  */
 class DBError extends MWException {
-
        /**
         * @var DatabaseBase
         */
@@ -129,6 +128,7 @@ class DBConnectionError extends DBError {
                } else {
                        $message = $fallback;
                }
+
                return wfMsgReplaceArgs( $message, $args );
        }
 
@@ -146,8 +146,14 @@ class DBConnectionError extends DBError {
        function getHTML() {
                global $wgShowDBErrorBacktrace, $wgShowHostnames, $wgShowSQLErrors;
 
-               $sorry = htmlspecialchars( $this->msg( 'dberr-problems', 'Sorry! This site is experiencing technical difficulties.' ) );
-               $again = htmlspecialchars( $this->msg( 'dberr-again', 'Try waiting a few minutes and reloading.' ) );
+               $sorry = htmlspecialchars( $this->msg(
+                       'dberr-problems',
+                       'Sorry! This site is experiencing technical difficulties.'
+               ) );
+               $again = htmlspecialchars( $this->msg(
+                       'dberr-again',
+                       'Try waiting a few minutes and reloading.'
+               ) );
 
                if ( $wgShowHostnames || $wgShowSQLErrors ) {
                        $info = str_replace(
@@ -155,7 +161,10 @@ class DBConnectionError extends DBError {
                                htmlspecialchars( $this->msg( 'dberr-info', '(Cannot contact the database server: $1)' ) )
                        );
                } else {
-                       $info = htmlspecialchars( $this->msg( 'dberr-info-hidden', '(Cannot contact the database server)' ) );
+                       $info = htmlspecialchars( $this->msg(
+                               'dberr-info-hidden',
+                               '(Cannot contact the database server)'
+                       ) );
                }
 
                # No database access
@@ -202,6 +211,7 @@ class DBConnectionError extends DBError {
 
                                        // Output cached page with notices on bottom and re-close body
                                        echo "{$cache}<hr />{$this->getHTML()}</body></html>";
+
                                        return;
                                }
                        } catch ( MWException $e ) {
@@ -219,8 +229,14 @@ class DBConnectionError extends DBError {
        function searchForm() {
                global $wgSitename, $wgCanonicalServer, $wgRequest;
 
-               $usegoogle = htmlspecialchars( $this->msg( 'dberr-usegoogle', 'You can try searching via Google in the meantime.' ) );
-               $outofdate = htmlspecialchars( $this->msg( 'dberr-outofdate', 'Note that their indexes of our content may be out of date.' ) );
+               $usegoogle = htmlspecialchars( $this->msg(
+                       'dberr-usegoogle',
+                       'You can try searching via Google in the meantime.'
+               ) );
+               $outofdate = htmlspecialchars( $this->msg(
+                       'dberr-outofdate',
+                       'Note that their indexes of our content may be out of date.'
+               ) );
                $googlesearch = htmlspecialchars( $this->msg( 'searchbutton', 'Search' ) );
 
                $search = htmlspecialchars( $wgRequest->getVal( 'search' ) );
@@ -246,6 +262,7 @@ class DBConnectionError extends DBError {
        </p>
 </form>
 EOT;
+
                return $trygoogle;
        }
 
@@ -297,7 +314,9 @@ class DBQueryError extends DBError {
         * @param $fname string
         */
        function __construct( DatabaseBase $db, $error, $errno, $sql, $fname ) {
-               $message = "A database error has occurred. Did you forget to run maintenance/update.php after upgrading?  See: https://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script\n" .
+               $message = "A database error has occurred. Did you forget to run " .
+                       "maintenance/update.php after upgrading?  See: " .
+                       "https://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script\n" .
                        "Query: $sql\n" .
                        "Function: $fname\n" .
                        "Error: $errno $error\n";
@@ -408,12 +427,13 @@ This may indicate a bug in the software.',
                        'databaseerror-function' => 'Function: $1',
                        'databaseerror-error' => 'Error: $1',
                );
+
                return $messages[$key];
        }
-
 }
 
 /**
  * @ingroup Database
  */
-class DBUnexpectedError extends DBError {}
+class DBUnexpectedError extends DBError {
+}
index 240a097..5a5eab1 100644 (file)
@@ -78,12 +78,16 @@ class DatabaseMssql extends DatabaseBase {
        function open( $server, $user, $password, $dbName ) {
                # Test for driver support, to avoid suppressed fatal error
                if ( !function_exists( 'sqlsrv_connect' ) ) {
-                       throw new DBConnectionError( $this, "MS Sql Server Native (sqlsrv) functions missing. You can download the driver from: http://go.microsoft.com/fwlink/?LinkId=123470\n" );
+                       throw new DBConnectionError(
+                               $this,
+                               "MS Sql Server Native (sqlsrv) functions missing. You can download " .
+                                       "the driver from: http://go.microsoft.com/fwlink/?LinkId=123470\n" );
                }
 
                global $wgDBport;
 
-               if ( !strlen( $user ) ) { # e.g. the class is being loaded
+               # e.g. the class is being loaded
+               if ( !strlen( $user ) ) {
                        return;
                }
 
@@ -102,9 +106,11 @@ class DatabaseMssql extends DatabaseBase {
 
                // Start NT Auth Hack
                // Quick and dirty work around to provide NT Auth designation support.
-               // Current solution requires installer to know to input 'ntauth' for both username and password
-               // to trigger connection via NT Auth. - ugly, ugly, ugly
-               // TO-DO: Make this better and add NT Auth choice to MW installer when SQL Server option is chosen.
+               // Current solution requires installer to know to input 'ntauth' for
+               // both username and password to trigger connection via NT Auth. Ugly,
+               // ugly, ugly!
+               // @todo Make this better and add NT Auth choice to MW installer when
+               // SQL Server option is chosen.
                $ntAuthUserTest = strtolower( $user );
                $ntAuthPassTest = strtolower( $password );
 
@@ -123,12 +129,15 @@ class DatabaseMssql extends DatabaseBase {
 
                if ( $this->mConn === false ) {
                        wfDebug( "DB connection error\n" );
-                       wfDebug( "Server: $server, Database: $dbName, User: $user, Password: " . substr( $password, 0, 3 ) . "...\n" );
+                       wfDebug( "Server: $server, Database: $dbName, User: $user, Password: " .
+                               substr( $password, 0, 3 ) . "...\n" );
                        wfDebug( $this->lastError() . "\n" );
+
                        return false;
                }
 
                $this->mOpened = true;
+
                return $this->mConn;
        }
 
@@ -145,10 +154,11 @@ class DatabaseMssql extends DatabaseBase {
                wfDebug( "SQL: [$sql]\n" );
                $this->offset = 0;
 
-               // several extensions seem to think that all databases support limits via LIMIT N after the WHERE clause
-               // well, MSSQL uses SELECT TOP N, so to catch any of those extensions we'll do a quick check for a LIMIT
-               // clause and pass $sql through $this->LimitToTopN() which parses the limit clause and passes the result to
-               // $this->limitResult();
+               // several extensions seem to think that all databases support limits
+               // via LIMIT N after the WHERE clause well, MSSQL uses SELECT TOP N,
+               // so to catch any of those extensions we'll do a quick check for a
+               // LIMIT clause and pass $sql through $this->LimitToTopN() which parses
+               // the limit clause and passes the result to $this->limitResult();
                if ( preg_match( '/\bLIMIT\s*/i', $sql ) ) {
                        // massage LIMIT -> TopN
                        $sql = $this->LimitToTopN( $sql );
@@ -163,7 +173,9 @@ class DatabaseMssql extends DatabaseBase {
                // perform query
                $stmt = sqlsrv_query( $this->mConn, $sql );
                if ( $stmt == false ) {
-                       $message = "A database error has occurred. Did you forget to run maintenance/update.php after upgrading?  See: http://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script\n" .
+                       $message = "A database error has occurred. Did you forget " .
+                               "to run maintenance/update.php after upgrading?  See: " .
+                               "http://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script\n" .
                                "Query: " . htmlentities( $sql ) . "\n" .
                                "Function: " . __METHOD__ . "\n";
                        // process each error (our driver will give us an array of errors unlike other providers)
@@ -176,9 +188,11 @@ class DatabaseMssql extends DatabaseBase {
                // remember number of rows affected
                $this->mAffectedRows = sqlsrv_rows_affected( $stmt );
 
-               // if it is a SELECT statement, or an insert with a request to output something we want to return a row.
+               // if it is a SELECT statement, or an insert with a request to output
+               // something we want to return a row.
                if ( ( preg_match( '#\bSELECT\s#i', $sql ) ) ||
-                       ( preg_match( '#\bINSERT\s#i', $sql ) && preg_match( '#\bOUTPUT\s+INSERTED\b#i', $sql ) ) ) {
+                       ( preg_match( '#\bINSERT\s#i', $sql ) && preg_match( '#\bOUTPUT\s+INSERTED\b#i', $sql ) )
+               ) {
                        // this is essentially a rowset, but Mediawiki calls these 'result'
                        // the rowset owns freeing the statement
                        $res = new MssqlResult( $stmt );
@@ -186,6 +200,7 @@ class DatabaseMssql extends DatabaseBase {
                        // otherwise we simply return it was successful, failure throws an exception
                        $res = true;
                }
+
                return $res;
        }
 
@@ -201,6 +216,7 @@ class DatabaseMssql extends DatabaseBase {
                        $res = $res->result;
                }
                $row = $res->fetch( 'OBJECT' );
+
                return $row;
        }
 
@@ -216,6 +232,7 @@ class DatabaseMssql extends DatabaseBase {
                } else {
                        $strRet = "No errors found";
                }
+
                return $strRet;
        }
 
@@ -224,6 +241,7 @@ class DatabaseMssql extends DatabaseBase {
                        $res = $res->result;
                }
                $row = $res->fetch( SQLSRV_FETCH_BOTH );
+
                return $row;
        }
 
@@ -231,6 +249,7 @@ class DatabaseMssql extends DatabaseBase {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
+
                return ( $res ) ? $res->numrows() : 0;
        }
 
@@ -238,6 +257,7 @@ class DatabaseMssql extends DatabaseBase {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
+
                return ( $res ) ? $res->numfields() : 0;
        }
 
@@ -245,6 +265,7 @@ class DatabaseMssql extends DatabaseBase {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
+
                return ( $res ) ? $res->fieldname( $n ) : 0;
        }
 
@@ -260,6 +281,7 @@ class DatabaseMssql extends DatabaseBase {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
+
                return ( $res ) ? $res->seek( $row ) : false;
        }
 
@@ -291,21 +313,26 @@ class DatabaseMssql extends DatabaseBase {
         * @param $vars    Mixed: array or string, field name(s) to be retrieved
         * @param $conds   Mixed: array or string, condition(s) for WHERE
         * @param $fname   String: calling function name (use __METHOD__) for logs/profiling
-        * @param array $options associative array of options (e.g. array('GROUP BY' => 'page_title')),
-        *                 see Database::makeSelectOptions code for list of supported stuff
-        * @param $join_conds Array: Associative array of table join conditions (optional)
-        *                                                 (e.g. array( 'page' => array('LEFT JOIN','page_latest=rev_id') )
-        * @return Mixed: database result resource (feed to Database::fetchObject or whatever), or false on failure
+        * @param array $options associative array of options (e.g.
+        *   array('GROUP BY' => 'page_title')), see Database::makeSelectOptions
+        *   code for list of supported stuff
+        * @param $join_conds Array: Associative array of table join conditions
+        *   (optional) (e.g. array( 'page' => array('LEFT JOIN','page_latest=rev_id') )
+        * @return Mixed: database result resource (feed to Database::fetchObject
+        *   or whatever), or false on failure
         */
-       function select( $table, $vars, $conds = '', $fname = __METHOD__, $options = array(), $join_conds = array() )
-       {
+       function select( $table, $vars, $conds = '', $fname = __METHOD__,
+               $options = array(), $join_conds = array()
+       ) {
                $sql = $this->selectSQLText( $table, $vars, $conds, $fname, $options, $join_conds );
                if ( isset( $options['EXPLAIN'] ) ) {
                        sqlsrv_query( $this->mConn, "SET SHOWPLAN_ALL ON;" );
                        $ret = $this->query( $sql, $fname );
                        sqlsrv_query( $this->mConn, "SET SHOWPLAN_ALL OFF;" );
+
                        return $ret;
                }
+
                return $this->query( $sql, $fname );
        }
 
@@ -316,16 +343,19 @@ class DatabaseMssql extends DatabaseBase {
         * @param $vars    Mixed:  Array or string, field name(s) to be retrieved
         * @param $conds   Mixed:  Array or string, condition(s) for WHERE
         * @param $fname   String: Calling function name (use __METHOD__) for logs/profiling
-        * @param array $options  Associative array of options (e.g. array('GROUP BY' => 'page_title')),
+        * @param array $options Associative array of options (e.g. array('GROUP BY' => 'page_title')),
         *                 see Database::makeSelectOptions code for list of supported stuff
         * @param $join_conds Array: Associative array of table join conditions (optional)
         *                    (e.g. array( 'page' => array('LEFT JOIN','page_latest=rev_id') )
         * @return string, the SQL text
         */
-       function selectSQLText( $table, $vars, $conds = '', $fname = __METHOD__, $options = array(), $join_conds = array() ) {
+       function selectSQLText( $table, $vars, $conds = '', $fname = __METHOD__,
+               $options = array(), $join_conds = array()
+       ) {
                if ( isset( $options['EXPLAIN'] ) ) {
                        unset( $options['EXPLAIN'] );
                }
+
                return parent::selectSQLText( $table, $vars, $conds, $fname, $options, $join_conds );
        }
 
@@ -337,8 +367,11 @@ class DatabaseMssql extends DatabaseBase {
         * Takes same arguments as Database::select()
         * @return int
         */
-       function estimateRowCount( $table, $vars = '*', $conds = '', $fname = __METHOD__, $options = array() ) {
-               $options['EXPLAIN'] = true;// http://msdn2.microsoft.com/en-us/library/aa259203.aspx
+       function estimateRowCount( $table, $vars = '*', $conds = '',
+               $fname = __METHOD__, $options = array()
+       ) {
+               // http://msdn2.microsoft.com/en-us/library/aa259203.aspx
+               $options['EXPLAIN'] = true;
                $res = $this->select( $table, $vars, $conds, $fname, $options );
 
                $rows = -1;
@@ -348,6 +381,7 @@ class DatabaseMssql extends DatabaseBase {
                                $rows = $row['EstimateRows'];
                        }
                }
+
                return $rows;
        }
 
@@ -357,8 +391,9 @@ class DatabaseMssql extends DatabaseBase {
         * @return array|bool|null
         */
        function indexInfo( $table, $index, $fname = __METHOD__ ) {
-               # This does not return the same info as MYSQL would, but that's OK because MediaWiki never uses the
-               # returned value except to check for the existance of indexes.
+               # This does not return the same info as MYSQL would, but that's OK
+               # because MediaWiki never uses the returned value except to check for
+               # the existance of indexes.
                $sql = "sp_helpindex '" . $table . "'";
                $res = $this->query( $sql, $fname );
                if ( !$res ) {
@@ -383,6 +418,7 @@ class DatabaseMssql extends DatabaseBase {
                                }
                        }
                }
+
                return empty( $result ) ? false : $result;
        }
 
@@ -413,16 +449,20 @@ class DatabaseMssql extends DatabaseBase {
 
                $table = $this->tableName( $table );
 
-               if ( !( isset( $arrToInsert[0] ) && is_array( $arrToInsert[0] ) ) ) {// Not multi row
-                       $arrToInsert = array( 0 => $arrToInsert );// make everything multi row compatible
+               if ( !( isset( $arrToInsert[0] ) && is_array( $arrToInsert[0] ) ) ) { // Not multi row
+                       $arrToInsert = array( 0 => $arrToInsert ); // make everything multi row compatible
                }
 
                $allOk = true;
 
                // We know the table we're inserting into, get its identity column
                $identity = null;
-               $tableRaw = preg_replace( '#\[([^\]]*)\]#', '$1', $table ); // strip matching square brackets from table name
-               $res = $this->doQuery( "SELECT NAME AS idColumn FROM SYS.IDENTITY_COLUMNS WHERE OBJECT_NAME(OBJECT_ID)='{$tableRaw}'" );
+               // strip matching square brackets from table name
+               $tableRaw = preg_replace( '#\[([^\]]*)\]#', '$1', $table );
+               $res = $this->doQuery(
+                       "SELECT NAME AS idColumn FROM SYS.IDENTITY_COLUMNS " .
+                               "WHERE OBJECT_NAME(OBJECT_ID)='{$tableRaw}'"
+               );
                if ( $res && $res->numrows() ) {
                        // There is an identity for this table.
                        $identity = array_pop( $res->fetch( SQLSRV_FETCH_ASSOC ) );
@@ -430,7 +470,8 @@ class DatabaseMssql extends DatabaseBase {
                unset( $res );
 
                foreach ( $arrToInsert as $a ) {
-                       // start out with empty identity column, this is so we can return it as a result of the insert logic
+                       // start out with empty identity column, this is so we can return
+                       // it as a result of the insert logic
                        $sqlPre = '';
                        $sqlPost = '';
                        $identityClause = '';
@@ -444,14 +485,15 @@ class DatabaseMssql extends DatabaseBase {
                                                        // there is a value being passed to us, we need to turn on and off inserted identity
                                                        $sqlPre = "SET IDENTITY_INSERT $table ON;";
                                                        $sqlPost = ";SET IDENTITY_INSERT $table OFF;";
-
                                                } else {
                                                        // we can't insert NULL into an identity column, so remove the column from the insert.
                                                        unset( $a[$k] );
                                                }
                                        }
                                }
-                               $identityClause = "OUTPUT INSERTED.$identity "; // we want to output an identity column as result
+
+                               // we want to output an identity column as result
+                               $identityClause = "OUTPUT INSERTED.$identity ";
                        }
 
                        $keys = array_keys( $a );
@@ -469,7 +511,8 @@ class DatabaseMssql extends DatabaseBase {
                        // translate MySQL INSERT IGNORE to something SQL Server can use
                        // example:
                        // MySQL: INSERT IGNORE INTO user_groups (ug_user,ug_group) VALUES ('1','sysop')
-                       // MSSQL: IF NOT EXISTS (SELECT * FROM user_groups WHERE ug_user = '1') INSERT INTO user_groups (ug_user,ug_group) VALUES ('1','sysop')
+                       // MSSQL: IF NOT EXISTS (SELECT * FROM user_groups WHERE ug_user = '1')
+                       //        INSERT INTO user_groups (ug_user,ug_group) VALUES ('1','sysop')
                        if ( $ignoreClause ) {
                                $prival = $a[$keys[0]];
                                $sqlPre .= "IF NOT EXISTS (SELECT * FROM $table WHERE $keys[0] = '$prival')";
@@ -520,19 +563,19 @@ class DatabaseMssql extends DatabaseBase {
                        }
                        $allOk = false;
                }
+
                return $allOk;
        }
 
        /**
         * INSERT SELECT wrapper
         * $varMap must be an associative array of the form array( 'dest1' => 'source1', ...)
-        * Source items may be literals rather than field names, but strings should be quoted with Database::addQuotes()
-        * $conds may be "*" to copy the whole table
-        * srcTable may be an array of tables.
+        * Source items may be literals rather than field names, but strings should
+        * be quoted with Database::addQuotes().
         * @param string $destTable
-        * @param array|string $srcTable
+        * @param array|string $srcTable May be an array of tables.
         * @param array $varMap
-        * @param array $conds
+        * @param array $conds May be "*" to copy the whole table.
         * @param string $fname
         * @param array $insertOptions
         * @param array $selectOptions
@@ -541,15 +584,25 @@ class DatabaseMssql extends DatabaseBase {
         */
        function insertSelect( $destTable, $srcTable, $varMap, $conds, $fname = __METHOD__,
                $insertOptions = array(), $selectOptions = array() ) {
-               $ret = parent::insertSelect( $destTable, $srcTable, $varMap, $conds, $fname, $insertOptions, $selectOptions );
+               $ret = parent::insertSelect(
+                       $destTable,
+                       $srcTable,
+                       $varMap,
+                       $conds,
+                       $fname,
+                       $insertOptions,
+                       $selectOptions
+               );
 
                if ( $ret === false ) {
                        throw new DBQueryError( $this, $this->getErrors(), $this->lastErrno(), /*$sql*/ '', $fname );
                } elseif ( $ret != null ) {
                        // remember number of rows affected
                        $this->mAffectedRows = sqlsrv_rows_affected( $ret );
+
                        return $ret;
                }
+
                return null;
        }
 
@@ -559,14 +612,19 @@ class DatabaseMssql extends DatabaseBase {
         */
        function nextSequenceValue( $seqName ) {
                if ( !$this->tableExists( 'sequence_' . $seqName ) ) {
-                       sqlsrv_query( $this->mConn, "CREATE TABLE [sequence_$seqName] (id INT NOT NULL IDENTITY PRIMARY KEY, junk varchar(10) NULL)" );
+                       sqlsrv_query(
+                               $this->mConn,
+                               "CREATE TABLE [sequence_$seqName] (id INT NOT NULL IDENTITY PRIMARY KEY, junk varchar(10) NULL)"
+                       );
                }
                sqlsrv_query( $this->mConn, "INSERT INTO [sequence_$seqName] (junk) VALUES ('')" );
                $ret = sqlsrv_query( $this->mConn, "SELECT TOP 1 id FROM [sequence_$seqName] ORDER BY id DESC" );
-               $row = sqlsrv_fetch_array( $ret, SQLSRV_FETCH_ASSOC );// KEEP ASSOC THERE, weird weird bug dealing with the return value if you don't
+               // KEEP ASSOC THERE, weird weird bug dealing with the return value if you don't
+               $row = sqlsrv_fetch_array( $ret, SQLSRV_FETCH_ASSOC );
 
                sqlsrv_free_stmt( $ret );
                $this->mInsertId = $row['id'];
+
                return $row['id'];
        }
 
@@ -579,6 +637,7 @@ class DatabaseMssql extends DatabaseBase {
                if ( $ret !== false ) {
                        $row = sqlsrv_fetch_array( $ret );
                        sqlsrv_free_stmt( $ret );
+
                        return $row['id'];
                } else {
                        return $this->nextSequenceValue( $seqName );
@@ -596,6 +655,7 @@ class DatabaseMssql extends DatabaseBase {
                if ( strtolower( $row['DATA_TYPE'] ) != 'text' ) {
                        $size = $row['CHARACTER_MAXIMUM_LENGTH'];
                }
+
                return $size;
        }
 
@@ -622,13 +682,16 @@ class DatabaseMssql extends DatabaseBase {
                                        ) as sub2
                                ) AS sub3
                                WHERE line3 BETWEEN ' . ( $offset + 1 ) . ' AND ' . ( $offset + $limit );
+
                        return $sql;
                }
        }
 
-       // If there is a limit clause, parse it, strip it, and pass the remaining sql through limitResult()
-       // with the appropriate parameters. Not the prettiest solution, but better than building a whole new parser.
-       // This exists becase there are still too many extensions that don't use dynamic sql generation.
+       // If there is a limit clause, parse it, strip it, and pass the remaining
+       // SQL through limitResult() with the appropriate parameters. Not the
+       // prettiest solution, but better than building a whole new parser. This
+       // exists becase there are still too many extensions that don't use dynamic
+       // sql generation.
        function LimitToTopN( $sql ) {
                // Matches: LIMIT {[offset,] row_count | row_count OFFSET offset}
                $pattern = '/\bLIMIT\s+((([0-9]+)\s*,\s*)?([0-9]+)(\s+OFFSET\s+([0-9]+))?)/i';
@@ -637,13 +700,15 @@ class DatabaseMssql extends DatabaseBase {
                        $row_count = $matches[4];
                        // offset = $matches[3] OR $matches[6]
                        $offset = $matches[3] or
-                               $offset = $matches[6] or
-                               $offset = false;
+                       $offset = $matches[6] or
+                       $offset = false;
 
                        // strip the matching LIMIT clause out
                        $sql = str_replace( $matches[0], '', $sql );
+
                        return $this->limitResult( $sql, $row_count, $offset );
                }
+
                return $sql;
        }
 
@@ -667,6 +732,7 @@ class DatabaseMssql extends DatabaseBase {
                if ( isset( $server_info['SQLServerVersion'] ) ) {
                        $version = $server_info['SQLServerVersion'];
                }
+
                return $version;
        }
 
@@ -675,6 +741,7 @@ class DatabaseMssql extends DatabaseBase {
                        WHERE table_type='BASE TABLE' AND table_name = '$table'" );
                if ( $res === false ) {
                        print "Error in tableExists query: " . $this->getErrors();
+
                        return false;
                }
                if ( sqlsrv_fetch( $res ) ) {
@@ -694,6 +761,7 @@ class DatabaseMssql extends DatabaseBase {
                        WHERE TABLE_NAME = '$table' AND COLUMN_NAME = '$field'" );
                if ( $res === false ) {
                        print "Error in fieldExists query: " . $this->getErrors();
+
                        return false;
                }
                if ( sqlsrv_fetch( $res ) ) {
@@ -709,12 +777,14 @@ class DatabaseMssql extends DatabaseBase {
                        WHERE TABLE_NAME = '$table' AND COLUMN_NAME = '$field'" );
                if ( $res === false ) {
                        print "Error in fieldInfo query: " . $this->getErrors();
+
                        return false;
                }
                $meta = $this->fetchRow( $res );
                if ( $meta ) {
                        return new MssqlField( $meta );
                }
+
                return false;
        }
 
@@ -759,9 +829,11 @@ class DatabaseMssql extends DatabaseBase {
                        throw new MWException( "The identifier '$identifier' is too long (max. 128)" );
                }
                if ( ( strpos( $identifier, '[' ) !== false ) || ( strpos( $identifier, ']' ) !== false ) ) {
-                       // It may be allowed if you quoted with double quotation marks, but that would break if QUOTED_IDENTIFIER is OFF
+                       // It may be allowed if you quoted with double quotation marks, but
+                       // that would break if QUOTED_IDENTIFIER is OFF
                        throw new MWException( "You can't use square brackers in the identifier '$identifier'" );
                }
+
                return "[$identifier]";
        }
 
@@ -825,13 +897,13 @@ class DatabaseMssql extends DatabaseBase {
        }
 
        function encodeBlob( $b ) {
-       // we can't have zero's and such, this is a simple encoding to make sure we don't barf
+               // we can't have zero's and such, this is a simple encoding to make sure we don't barf
                return base64_encode( $b );
        }
 
        function decodeBlob( $b ) {
-       // we can't have zero's and such, this is a simple encoding to make sure we don't barf
-       return base64_decode( $b );
+               // we can't have zero's and such, this is a simple encoding to make sure we don't barf
+               return base64_decode( $b );
        }
 
        /**
@@ -868,6 +940,7 @@ class DatabaseMssql extends DatabaseBase {
                // We can't separate explicit JOIN clauses with ',', use ' ' for those
                $straightJoins = !empty( $ret ) ? implode( ',', $ret ) : "";
                $otherJoins = !empty( $retJOIN ) ? implode( ' ', $retJOIN ) : "";
+
                // Compile our final table clause
                return implode( ' ', array( $straightJoins, $otherJoins ) );
        }
@@ -951,7 +1024,6 @@ class DatabaseMssql extends DatabaseBase {
        public function getInfinity() {
                return '3000-01-31 00:00:00.000';
        }
-
 } // end DatabaseMssql class
 
 /**
@@ -961,6 +1033,7 @@ class DatabaseMssql extends DatabaseBase {
  */
 class MssqlField implements Field {
        private $name, $tablename, $default, $max_length, $nullable, $type;
+
        function __construct( $info ) {
                $this->name = $info['COLUMN_NAME'];
                $this->tablename = $info['TABLE_NAME'];
@@ -996,8 +1069,9 @@ class MssqlField implements Field {
 }
 
 /**
- * The MSSQL PHP driver doesn't support sqlsrv_num_rows, so we recall all rows into an array and maintain our
- * own cursor index into that array...This is similar to the way the Oracle driver handles this same issue
+ * The MSSQL PHP driver doesn't support sqlsrv_num_rows, so we recall all rows
+ * into an array and maintain our own cursor index into that array... This is
+ * similar to the way the Oracle driver handles this same issue
  *
  * @ingroup Database
  */
@@ -1014,11 +1088,11 @@ class MssqlResult {
                foreach ( $rows as $row ) {
                        if ( $row !== null ) {
                                foreach ( $row as $k => $v ) {
-                                       if ( is_object( $v ) && method_exists( $v, 'format' ) ) {// DateTime Object
+                                       if ( is_object( $v ) && method_exists( $v, 'format' ) ) { // DateTime Object
                                                $row[$k] = $v->format( "Y-m-d\TH:i:s\Z" );
                                        }
                                }
-                               $this->mRows[] = $row;// read results into memory, cursors are not supported
+                               $this->mRows[] = $row; // read results into memory, cursors are not supported
                        }
                }
                $this->mRowCount = count( $this->mRows );
@@ -1036,6 +1110,7 @@ class MssqlResult {
                                }
                        }
                }
+
                return $obj;
        }
 
@@ -1067,6 +1142,7 @@ class MssqlResult {
                }
 
                $this->mCursor++;
+
                return $ret;
        }
 
@@ -1088,6 +1164,7 @@ class MssqlResult {
 
        public function fieldname( $nr ) {
                $arrKeys = array_keys( $this->mRows[0] );
+
                return $arrKeys[$nr];
        }
 
@@ -1193,6 +1270,7 @@ class MssqlResult {
                        default:
                                $strType = $intType;
                }
+
                return $strType;
        }
 
index 956bb69..e253f91 100644 (file)
@@ -28,7 +28,6 @@
  * @see Database
  */
 class DatabaseMysql extends DatabaseMysqlBase {
-
        /**
         * @param $sql string
         * @return resource
@@ -39,6 +38,7 @@ class DatabaseMysql extends DatabaseMysqlBase {
                } else {
                        $ret = mysql_unbuffered_query( $sql, $this->mConn );
                }
+
                return $ret;
        }
 
@@ -46,7 +46,10 @@ class DatabaseMysql extends DatabaseMysqlBase {
                # Fail now
                # Otherwise we get a suppressed fatal error, which is very hard to track down
                if ( !extension_loaded( 'mysql' ) ) {
-                       throw new DBConnectionError( $this, "MySQL functions missing, have you compiled PHP with the --with-mysql option?\n" );
+                       throw new DBConnectionError(
+                               $this,
+                               "MySQL functions missing, have you compiled PHP with the --with-mysql option?\n"
+                       );
                }
 
                $connFlags = 0;
@@ -80,6 +83,17 @@ class DatabaseMysql extends DatabaseMysqlBase {
                return $conn;
        }
 
+       /**
+        * @return bool
+        */
+       protected function mysqlSetCharset( $charset ) {
+               if ( function_exists( 'mysql_set_charset' ) ) {
+                       return mysql_set_charset( $charset, $this->mConn );
+               } else {
+                       return $this->query( 'SET NAMES ' . $charset, __METHOD__ );
+               }
+       }
+
        /**
         * @return bool
         */
@@ -118,6 +132,7 @@ class DatabaseMysql extends DatabaseMysqlBase {
         */
        function selectDB( $db ) {
                $this->mDBname = $db;
+
                return mysql_select_db( $db, $this->mConn );
        }
 
index 26c9d24..61b9a17 100644 (file)
@@ -76,6 +76,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                } catch ( Exception $ex ) {
                        wfProfileOut( "dbconnect-$server" );
                        wfProfileOut( __METHOD__ );
+                       $this->restoreErrorHandler();
                        throw $ex;
                }
                $error = $this->restoreErrorHandler();
@@ -93,6 +94,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                                substr( $password, 0, 3 ) . "..., error: " . $error . "\n" );
 
                        wfProfileOut( __METHOD__ );
+
                        return $this->reportConnectionError( $error );
                }
 
@@ -106,6 +108,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                                        "from client host " . wfHostname() . "\n" );
 
                                wfProfileOut( __METHOD__ );
+
                                return $this->reportConnectionError( "Error selecting database $dbName" );
                        }
                }
@@ -113,18 +116,25 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                // Tell the server we're communicating with it in UTF-8.
                // This may engage various charset conversions.
                if ( $wgDBmysql5 ) {
-                       $this->query( 'SET NAMES utf8', __METHOD__ );
+                       $this->mysqlSetCharset( 'utf8' );
                } else {
-                       $this->query( 'SET NAMES binary', __METHOD__ );
+                       $this->mysqlSetCharset( 'binary' );
                }
                // Set SQL mode, default is turning them all off, can be overridden or skipped with null
                if ( is_string( $wgSQLMode ) ) {
                        $mode = $this->addQuotes( $wgSQLMode );
-                       $this->query( "SET sql_mode = $mode", __METHOD__ );
+                       // Use doQuery() to avoid opening implicit transactions (DBO_TRX)
+                       $success = $this->doQuery( "SET sql_mode = $mode", __METHOD__ );
+                       if ( !$success ) {
+                               wfLogDBError( "Error setting sql_mode to $mode on server {$this->mServer}" );
+                               wfProfileOut( __METHOD__ );
+                               return $this->reportConnectionError( "Error setting sql_mode to $mode" );
+                       }
                }
 
                $this->mOpened = true;
                wfProfileOut( __METHOD__ );
+
                return true;
        }
 
@@ -137,6 +147,14 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
         */
        abstract protected function mysqlConnect( $realServer );
 
+       /**
+        * Set the character set of the MySQL link
+        *
+        * @param string $charset
+        * @return bool
+        */
+       abstract protected function mysqlSetCharset( $charset );
+
        /**
         * @param $res ResultWrapper
         * @throws DBUnexpectedError
@@ -180,8 +198,12 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                // these are the only errors mysql_fetch_object can cause.
                // See http://dev.mysql.com/doc/refman/5.0/en/mysql-fetch-row.html.
                if ( $errno == 2000 || $errno == 2013 ) {
-                       throw new DBUnexpectedError( $this, 'Error in fetchObject(): ' . htmlspecialchars( $this->lastError() ) );
+                       throw new DBUnexpectedError(
+                               $this,
+                               'Error in fetchObject(): ' . htmlspecialchars( $this->lastError() )
+                       );
                }
+
                return $row;
        }
 
@@ -212,8 +234,12 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                // these are the only errors mysql_fetch_array can cause.
                // See http://dev.mysql.com/doc/refman/5.0/en/mysql-fetch-row.html.
                if ( $errno == 2000 || $errno == 2013 ) {
-                       throw new DBUnexpectedError( $this, 'Error in fetchRow(): ' . htmlspecialchars( $this->lastError() ) );
+                       throw new DBUnexpectedError(
+                               $this,
+                               'Error in fetchRow(): ' . htmlspecialchars( $this->lastError() )
+                       );
                }
+
                return $row;
        }
 
@@ -237,6 +263,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                wfSuppressWarnings();
                $n = $this->mysqlNumRows( $res );
                wfRestoreWarnings();
+
                // Unfortunately, mysql_num_rows does not reset the last errno.
                // We are not checking for any errors here, since
                // these are no errors mysql_num_rows can cause.
@@ -261,6 +288,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
+
                return $this->mysqlNumFields( $res );
        }
 
@@ -281,6 +309,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
+
                return $this->mysqlFieldName( $res, $n );
        }
 
@@ -302,6 +331,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
+
                return $this->mysqlDataSeek( $res, $row );
        }
 
@@ -332,6 +362,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                if ( $error ) {
                        $error .= ' (' . $this->mServer . ')';
                }
+
                return $error;
        }
 
@@ -366,7 +397,9 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
         * @param $options string|array
         * @return int
         */
-       public function estimateRowCount( $table, $vars = '*', $conds = '', $fname = __METHOD__, $options = array() ) {
+       public function estimateRowCount( $table, $vars = '*', $conds = '',
+               $fname = __METHOD__, $options = array()
+       ) {
                $options['EXPLAIN'] = true;
                $res = $this->select( $table, $vars, $conds, $fname, $options );
                if ( $res === false ) {
@@ -380,6 +413,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                foreach ( $res as $plan ) {
                        $rows *= $plan->rows > 0 ? $plan->rows : 1; // avoid resetting to zero
                }
+
                return $rows;
        }
 
@@ -401,6 +435,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                                return new MySQLField( $meta );
                        }
                }
+
                return false;
        }
 
@@ -443,6 +478,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                                $result[] = $row;
                        }
                }
+
                return empty( $result ) ? false : $result;
        }
 
@@ -458,6 +494,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                        $this->ping();
                        $sQuoted = $this->mysqlRealEscapeString( $s );
                }
+
                return $sQuoted;
        }
 
@@ -471,7 +508,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
        public function addIdentifierQuotes( $s ) {
                // Characters in the range \u0001-\uFFFF are valid in a quoted identifier
                // Remove NUL bytes and escape backticks by doubling
-               return '`' . str_replace( array( "\0", '`' ), array( '', '``' ), $s )  . '`';
+               return '`' . str_replace( array( "\0", '`' ), array( '', '``' ), $s ) . '`';
        }
 
        /**
@@ -495,6 +532,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                $this->mOpened = false;
                $this->mConn = false;
                $this->open( $this->mServer, $this->mUser, $this->mPassword, $this->mDBname );
+
                return true;
        }
 
@@ -515,6 +553,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
        function getLag() {
                if ( !is_null( $this->mFakeSlaveLag ) ) {
                        wfDebug( "getLag: fake slave lagged {$this->mFakeSlaveLag} seconds\n" );
+
                        return $this->mFakeSlaveLag;
                }
 
@@ -568,7 +607,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                                $row->State != 'Waiting to reconnect after a failed master event read' &&
                                $row->State != 'Reconnecting after a failed master event read' &&
                                $row->State != 'Registering slave on master'
-                               ) {
+                       ) {
                                # This is it, return the time (except -ve)
                                if ( $row->Time > 0x7fffffff ) {
                                        return false;
@@ -577,6 +616,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                                }
                        }
                }
+
                return false;
        }
 
@@ -600,6 +640,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                if ( !is_null( $this->mFakeSlaveLag ) ) {
                        $status = parent::masterPosWait( $pos, $timeout );
                        wfProfileOut( __METHOD__ );
+
                        return $status;
                }
 
@@ -618,6 +659,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                }
 
                wfProfileOut( __METHOD__ );
+
                return $status;
        }
 
@@ -635,7 +677,10 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                $row = $this->fetchObject( $res );
 
                if ( $row ) {
-                       $pos = isset( $row->Exec_master_log_pos ) ? $row->Exec_master_log_pos : $row->Exec_Master_Log_Pos;
+                       $pos = isset( $row->Exec_master_log_pos )
+                               ? $row->Exec_master_log_pos
+                               : $row->Exec_Master_Log_Pos;
+
                        return new MySQLMasterPos( $row->Relay_Master_Log_File, $pos );
                } else {
                        return false;
@@ -701,6 +746,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                        $this->delimiter = $m[1];
                        $newLine = '';
                }
+
                return parent::streamStatementEnd( $sql, $newLine );
        }
 
@@ -716,6 +762,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                $lockName = $this->addQuotes( $lockName );
                $result = $this->query( "SELECT IS_FREE_LOCK($lockName) AS lockstatus", $method );
                $row = $this->fetchObject( $result );
+
                return ( $row->lockstatus == 1 );
        }
 
@@ -734,12 +781,14 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                        return true;
                } else {
                        wfDebug( __METHOD__ . " failed to acquire lock\n" );
+
                        return false;
                }
        }
 
        /**
-        * FROM MYSQL DOCS: http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_release-lock
+        * FROM MYSQL DOCS:
+        * http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_release-lock
         * @param $lockName string
         * @param $method string
         * @return bool
@@ -748,6 +797,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                $lockName = $this->addQuotes( $lockName );
                $result = $this->query( "SELECT RELEASE_LOCK($lockName) as lockstatus", $method );
                $row = $this->fetchObject( $result );
+
                return ( $row->lockstatus == 1 );
        }
 
@@ -763,8 +813,8 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
 
                foreach ( $write as $table ) {
                        $tbl = $this->tableName( $table ) .
-                                       ( $lowPriority ? ' LOW_PRIORITY' : '' ) .
-                                       ' WRITE';
+                               ( $lowPriority ? ' LOW_PRIORITY' : '' ) .
+                               ' WRITE';
                        $items[] = $tbl;
                }
                foreach ( $read as $table ) {
@@ -772,6 +822,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                }
                $sql = "LOCK TABLES " . implode( ',', $items );
                $this->query( $sql, $method );
+
                return true;
        }
 
@@ -781,6 +832,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
         */
        public function unlockTables( $method ) {
                $this->query( "UNLOCK TABLES", $method );
+
                return true;
        }
 
@@ -878,6 +930,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
         */
        function getServerUptime() {
                $vars = $this->getMysqlStatus( 'Uptime' );
+
                return (int)$vars['Uptime'];
        }
 
@@ -966,6 +1019,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                if ( !$this->tableExists( $tableName, $fName ) ) {
                        return false;
                }
+
                return $this->query( "DROP TABLE IF EXISTS " . $this->tableName( $tableName ), $fName );
        }
 
@@ -975,7 +1029,12 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
        protected function getDefaultSchemaVars() {
                $vars = parent::getDefaultSchemaVars();
                $vars['wgDBTableOptions'] = str_replace( 'TYPE', 'ENGINE', $GLOBALS['wgDBTableOptions'] );
-               $vars['wgDBTableOptions'] = str_replace( 'CHARSET=mysql4', 'CHARSET=binary', $vars['wgDBTableOptions'] );
+               $vars['wgDBTableOptions'] = str_replace(
+                       'CHARSET=mysql4',
+                       'CHARSET=binary',
+                       $vars['wgDBTableOptions']
+               );
+
                return $vars;
        }
 
@@ -999,9 +1058,9 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
        /**
         * Lists VIEWs in the database
         *
-        * @param string $prefix   Only show VIEWs with this prefix, eg.
+        * @param string $prefix Only show VIEWs with this prefix, eg.
         * unit_test_, or $wgDBprefix. Default: null, would return all views.
-        * @param string $fname    Name of calling function
+        * @param string $fname Name of calling function
         * @return array
         * @since 1.22
         */
@@ -1015,12 +1074,12 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                        // Query for the VIEWS
                        $result = $this->query( 'SHOW FULL TABLES WHERE TABLE_TYPE = "VIEW"' );
                        $this->allViews = array();
-                       while ( ($row = $this->fetchRow($result)) !== false ) {
+                       while ( ( $row = $this->fetchRow( $result ) ) !== false ) {
                                array_push( $this->allViews, $row[$propertyName] );
                        }
                }
 
-               if ( is_null($prefix) || $prefix === '' ) {
+               if ( is_null( $prefix ) || $prefix === '' ) {
                        return $this->allViews;
                }
 
@@ -1031,6 +1090,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                                array_push( $filteredViews, $viewName );
                        }
                }
+
                return $filteredViews;
        }
 
@@ -1044,11 +1104,8 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
        public function isView( $name, $prefix = null ) {
                return in_array( $name, $this->listViews( $prefix ) );
        }
-
 }
 
-
-
 /**
  * Utility class.
  * @ingroup Database
@@ -1143,12 +1200,14 @@ class MySQLMasterPos implements DBMasterPos {
                if ( preg_match( '!\.(\d+)/(\d+)$!', (string)$this, $m ) ) {
                        return array( (int)$m[1], (int)$m[2] );
                }
+
                return false;
        }
 
        function hasReached( MySQLMasterPos $pos ) {
                $thisPos = $this->getCoordinates();
                $thatPos = $pos->getCoordinates();
+
                return ( $thisPos && $thatPos && $thisPos >= $thatPos );
        }
 }
index 7761abe..9f18da3 100644 (file)
@@ -29,7 +29,6 @@
  * @see Database
  */
 class DatabaseMysqli extends DatabaseMysqlBase {
-
        /**
         * @param $sql string
         * @return resource
@@ -40,6 +39,7 @@ class DatabaseMysqli extends DatabaseMysqlBase {
                } else {
                        $ret = $this->mConn->query( $sql, MYSQLI_USE_RESULT );
                }
+
                return $ret;
        }
 
@@ -70,8 +70,8 @@ class DatabaseMysqli extends DatabaseMysqlBase {
                                usleep( 1000 );
                        }
                        if ( $mysqli->real_connect( $realServer, $this->mUser,
-                               $this->mPassword, $this->mDBname, null, null, $connFlags ) )
-                       {
+                               $this->mPassword, $this->mDBname, null, null, $connFlags )
+                       {
                                return $mysqli;
                        }
                }
@@ -79,6 +79,17 @@ class DatabaseMysqli extends DatabaseMysqlBase {
                return false;
        }
 
+       /**
+        * @return bool
+        */
+       protected function mysqlSetCharset( $charset ) {
+               if ( method_exists( $this->mConn, 'set_charset' ) ) {
+                       return $this->mConn->set_charset( $charset );
+               } else {
+                       return $this->query( 'SET NAMES ' . $charset, __METHOD__ );
+               }
+       }
+
        /**
         * @return bool
         */
@@ -117,6 +128,7 @@ class DatabaseMysqli extends DatabaseMysqlBase {
         */
        function selectDB( $db ) {
                $this->mDBname = $db;
+
                return $this->mConn->select_db( $db );
        }
 
@@ -129,6 +141,7 @@ class DatabaseMysqli extends DatabaseMysqlBase {
 
        protected function mysqlFreeResult( $res ) {
                $res->free_result();
+
                return true;
        }
 
@@ -137,6 +150,7 @@ class DatabaseMysqli extends DatabaseMysqlBase {
                if ( $object === null ) {
                        return false;
                }
+
                return $object;
        }
 
@@ -145,6 +159,7 @@ class DatabaseMysqli extends DatabaseMysqlBase {
                if ( $array === null ) {
                        return false;
                }
+
                return $array;
        }
 
@@ -163,11 +178,13 @@ class DatabaseMysqli extends DatabaseMysqlBase {
                $field->unique_key = $field->flags & MYSQLI_UNIQUE_KEY_FLAG;
                $field->multiple_key = $field->flags & MYSQLI_MULTIPLE_KEY_FLAG;
                $field->binary = $field->flags & MYSQLI_BINARY_FLAG;
+
                return $field;
        }
 
        protected function mysqlFieldName( $res, $n ) {
                $field = $res->fetch_field_direct( $n );
+
                return $field->name;
        }
 
@@ -176,7 +193,7 @@ class DatabaseMysqli extends DatabaseMysqlBase {
        }
 
        protected function mysqlError( $conn = null ) {
-               if ($conn === null) {
+               if ( $conn === null ) {
                        return mysqli_connect_error();
                } else {
                        return $conn->error;
@@ -190,5 +207,4 @@ class DatabaseMysqli extends DatabaseMysqlBase {
        protected function mysqlPing() {
                return $this->mConn->ping();
        }
-
 }
index 97070fb..10715e4 100644 (file)
@@ -57,10 +57,12 @@ class ORAResult {
        function __construct( &$db, $stmt, $unique = false ) {
                $this->db =& $db;
 
-               if ( ( $this->nrows = oci_fetch_all( $stmt, $this->rows, 0, - 1, OCI_FETCHSTATEMENT_BY_ROW | OCI_NUM ) ) === false ) {
+               $this->nrows = oci_fetch_all( $stmt, $this->rows, 0, -1, OCI_FETCHSTATEMENT_BY_ROW | OCI_NUM );
+               if ( $this->nrows === false ) {
                        $e = oci_error( $stmt );
                        $db->reportQueryError( $e['message'], $e['code'], '', __METHOD__ );
                        $this->free();
+
                        return;
                }
 
@@ -121,6 +123,7 @@ class ORAResult {
                        $ret[$lc] = $v;
                        $ret[$k] = $v;
                }
+
                return $ret;
        }
 }
@@ -235,21 +238,27 @@ class DatabaseOracle extends DatabaseBase {
        function cascadingDeletes() {
                return true;
        }
+
        function cleanupTriggers() {
                return true;
        }
+
        function strictIPs() {
                return true;
        }
+
        function realTimestamps() {
                return true;
        }
+
        function implicitGroupby() {
                return false;
        }
+
        function implicitOrderby() {
                return false;
        }
+
        function searchableIPs() {
                return true;
        }
@@ -266,7 +275,11 @@ class DatabaseOracle extends DatabaseBase {
        function open( $server, $user, $password, $dbName ) {
                global $wgDBOracleDRCP;
                if ( !function_exists( 'oci_connect' ) ) {
-                       throw new DBConnectionError( $this, "Oracle functions missing, have you compiled PHP with the --with-oci8 option?\n (Note: if you recently installed PHP, you may need to restart your webserver and database)\n" );
+                       throw new DBConnectionError(
+                               $this,
+                               "Oracle functions missing, have you compiled PHP with the --with-oci8 option?\n " .
+                                       "(Note: if you recently installed PHP, you may need to restart your webserver\n " .
+                                       "and database)\n" );
                }
 
                $this->close();
@@ -300,11 +313,29 @@ class DatabaseOracle extends DatabaseBase {
 
                wfSuppressWarnings();
                if ( $this->mFlags & DBO_PERSISTENT ) {
-                       $this->mConn = oci_pconnect( $this->mUser, $this->mPassword, $this->mServer, $this->defaultCharset, $session_mode );
+                       $this->mConn = oci_pconnect(
+                               $this->mUser,
+                               $this->mPassword,
+                               $this->mServer,
+                               $this->defaultCharset,
+                               $session_mode
+                       );
                } elseif ( $this->mFlags & DBO_DEFAULT ) {
-                       $this->mConn = oci_new_connect( $this->mUser, $this->mPassword, $this->mServer, $this->defaultCharset, $session_mode );
+                       $this->mConn = oci_new_connect(
+                               $this->mUser,
+                               $this->mPassword,
+                               $this->mServer,
+                               $this->defaultCharset,
+                               $session_mode
+                       );
                } else {
-                       $this->mConn = oci_connect( $this->mUser, $this->mPassword, $this->mServer, $this->defaultCharset, $session_mode );
+                       $this->mConn = oci_connect(
+                               $this->mUser,
+                               $this->mPassword,
+                               $this->mServer,
+                               $this->defaultCharset,
+                               $session_mode
+                       );
                }
                wfRestoreWarnings();
 
@@ -323,6 +354,7 @@ class DatabaseOracle extends DatabaseBase {
                $this->doQuery( 'ALTER SESSION SET NLS_TIMESTAMP_FORMAT=\'DD-MM-YYYY HH24:MI:SS.FF6\'' );
                $this->doQuery( 'ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT=\'DD-MM-YYYY HH24:MI:SS.FF6\'' );
                $this->doQuery( 'ALTER SESSION SET NLS_NUMERIC_CHARACTERS=\'.,\'' );
+
                return $this->mConn;
        }
 
@@ -358,13 +390,20 @@ class DatabaseOracle extends DatabaseBase {
                // you have to select data from plan table after explain
                $explain_id = MWTimestamp::getLocalInstance()->format( 'dmYHis' );
 
-               $sql = preg_replace( '/^EXPLAIN /', 'EXPLAIN PLAN SET STATEMENT_ID = \'' . $explain_id . '\' FOR', $sql, 1, $explain_count );
+               $sql = preg_replace(
+                       '/^EXPLAIN /',
+                       'EXPLAIN PLAN SET STATEMENT_ID = \'' . $explain_id . '\' FOR',
+                       $sql,
+                       1,
+                       $explain_count
+               );
 
                wfSuppressWarnings();
 
                if ( ( $this->mLastResult = $stmt = oci_parse( $this->mConn, $sql ) ) === false ) {
                        $e = oci_error( $this->mConn );
                        $this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
+
                        return false;
                }
 
@@ -372,6 +411,7 @@ class DatabaseOracle extends DatabaseBase {
                        $e = oci_error( $stmt );
                        if ( !$this->ignore_DUP_VAL_ON_INDEX || $e['code'] != '1' ) {
                                $this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
+
                                return false;
                        }
                }
@@ -379,11 +419,13 @@ class DatabaseOracle extends DatabaseBase {
                wfRestoreWarnings();
 
                if ( $explain_count > 0 ) {
-                       return $this->doQuery( 'SELECT id, cardinality "ROWS" FROM plan_table WHERE statement_id = \'' . $explain_id . '\'' );
+                       return $this->doQuery( 'SELECT id, cardinality "ROWS" FROM plan_table ' .
+                               'WHERE statement_id = \'' . $explain_id . '\'' );
                } elseif ( oci_statement_type( $stmt ) == 'SELECT' ) {
                        return new ORAResult( $this, $stmt, $union_unique );
                } else {
                        $this->mAffectedRows = oci_num_rows( $stmt );
+
                        return true;
                }
        }
@@ -458,6 +500,7 @@ class DatabaseOracle extends DatabaseBase {
                } else {
                        $e = oci_error( $this->mConn );
                }
+
                return $e['message'];
        }
 
@@ -467,6 +510,7 @@ class DatabaseOracle extends DatabaseBase {
                } else {
                        $e = oci_error( $this->mConn );
                }
+
                return $e['code'];
        }
 
@@ -524,6 +568,7 @@ class DatabaseOracle extends DatabaseBase {
                if ( is_numeric( $col ) ) {
                        $bind = $val;
                        $val = null;
+
                        return $bind;
                } elseif ( $includeCol ) {
                        $bind = "$col = ";
@@ -574,6 +619,7 @@ class DatabaseOracle extends DatabaseBase {
                if ( ( $this->mLastResult = $stmt = oci_parse( $this->mConn, $sql ) ) === false ) {
                        $e = oci_error( $this->mConn );
                        $this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
+
                        return false;
                }
                foreach ( $row as $col => &$val ) {
@@ -596,6 +642,7 @@ class DatabaseOracle extends DatabaseBase {
                                if ( oci_bind_by_name( $stmt, ":$col", $val, -1, SQLT_CHR ) === false ) {
                                        $e = oci_error( $stmt );
                                        $this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
+
                                        return false;
                                }
                        } else {
@@ -610,10 +657,10 @@ class DatabaseOracle extends DatabaseBase {
 
                                if ( $col_type == 'BLOB' ) {
                                        $lob[$col]->writeTemporary( $val, OCI_TEMP_BLOB );
-                                       oci_bind_by_name( $stmt, ":$col", $lob[$col], - 1, OCI_B_BLOB );
+                                       oci_bind_by_name( $stmt, ":$col", $lob[$col], -1, OCI_B_BLOB );
                                } else {
                                        $lob[$col]->writeTemporary( $val, OCI_TEMP_CLOB );
-                                       oci_bind_by_name( $stmt, ":$col", $lob[$col], - 1, OCI_B_CLOB );
+                                       oci_bind_by_name( $stmt, ":$col", $lob[$col], -1, OCI_B_CLOB );
                                }
                        }
                }
@@ -624,6 +671,7 @@ class DatabaseOracle extends DatabaseBase {
                        $e = oci_error( $stmt );
                        if ( !$this->ignore_DUP_VAL_ON_INDEX || $e['code'] != '1' ) {
                                $this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
+
                                return false;
                        } else {
                                $this->mAffectedRows = oci_num_rows( $stmt );
@@ -648,8 +696,8 @@ class DatabaseOracle extends DatabaseBase {
        }
 
        function insertSelect( $destTable, $srcTable, $varMap, $conds, $fname = __METHOD__,
-               $insertOptions = array(), $selectOptions = array() )
-       {
+               $insertOptions = array(), $selectOptions = array()
+       {
                $destTable = $this->tableName( $destTable );
                if ( !is_array( $selectOptions ) ) {
                        $selectOptions = array( $selectOptions );
@@ -662,8 +710,8 @@ class DatabaseOracle extends DatabaseBase {
                }
 
                if ( ( $sequenceData = $this->getSequenceData( $destTable ) ) !== false &&
-                               !isset( $varMap[$sequenceData['column']] ) )
-               {
+                       !isset( $varMap[$sequenceData['column']] )
+               {
                        $varMap[$sequenceData['column']] = 'GET_SEQUENCE_VALUE(\'' . $sequenceData['sequence'] . '\')';
                }
 
@@ -714,8 +762,10 @@ class DatabaseOracle extends DatabaseBase {
 
        function tableNameInternal( $name ) {
                $name = $this->tableName( $name );
+
                return preg_replace( '/.*\.(.*)/', '$1', $name );
        }
+
        /**
         * Return the next in a sequence, save the value for retrieval via insertId()
         * @return null
@@ -724,6 +774,7 @@ class DatabaseOracle extends DatabaseBase {
                $res = $this->query( "SELECT $seqName.nextval FROM dual" );
                $row = $this->fetchRow( $res );
                $this->mInsertId = $row[0];
+
                return $this->mInsertId;
        }
 
@@ -734,13 +785,18 @@ class DatabaseOracle extends DatabaseBase {
        private function getSequenceData( $table ) {
                if ( $this->sequenceData == null ) {
                        $result = $this->doQuery( "SELECT lower(asq.sequence_name),
-                                  lower(atc.table_name),
-                                  lower(atc.column_name)
-                         FROM all_sequences asq, all_tab_columns atc
-                        WHERE decode(atc.table_name, '{$this->mTablePrefix}MWUSER', '{$this->mTablePrefix}USER', atc.table_name) || '_' ||
-                                  atc.column_name || '_SEQ' = '{$this->mTablePrefix}' || asq.sequence_name
-                          AND asq.sequence_owner = upper('{$this->mDBname}')
-                          AND atc.owner = upper('{$this->mDBname}')" );
+                               lower(atc.table_name),
+                               lower(atc.column_name)
+                       FROM all_sequences asq, all_tab_columns atc
+                       WHERE decode(
+                                       atc.table_name,
+                                       '{$this->mTablePrefix}MWUSER',
+                                       '{$this->mTablePrefix}USER',
+                                       atc.table_name
+                               ) || '_' ||
+                               atc.column_name || '_SEQ' = '{$this->mTablePrefix}' || asq.sequence_name
+                               AND asq.sequence_owner = upper('{$this->mDBname}')
+                               AND atc.owner = upper('{$this->mDBname}')" );
 
                        while ( ( $row = $result->fetchRow() ) !== false ) {
                                $this->sequenceData[$row[1]] = array(
@@ -750,12 +806,14 @@ class DatabaseOracle extends DatabaseBase {
                        }
                }
                $table = strtolower( $this->removeIdentifierQuotes( $this->tableName( $table ) ) );
+
                return ( isset( $this->sequenceData[$table] ) ) ? $this->sequenceData[$table] : false;
        }
 
        # Returns the size of a text field, or -1 for "unlimited"
        function textFieldSize( $table, $field ) {
                $fieldInfoData = $this->fieldInfo( $table, $field );
+
                return $fieldInfoData->maxLength();
        }
 
@@ -763,6 +821,7 @@ class DatabaseOracle extends DatabaseBase {
                if ( $offset === false ) {
                        $offset = 0;
                }
+
                return "SELECT * FROM ($sql) WHERE rownum >= (1 + $offset) AND rownum < (1 + $limit + $offset)";
        }
 
@@ -774,19 +833,24 @@ class DatabaseOracle extends DatabaseBase {
                if ( $b instanceof Blob ) {
                        $b = $b->fetch();
                }
+
                return $b;
        }
 
        function unionQueries( $sqls, $all ) {
                $glue = ' UNION ALL ';
-               return 'SELECT * ' . ( $all ? '' : '/* UNION_UNIQUE */ ' ) . 'FROM (' . implode( $glue, $sqls ) . ')';
+
+               return 'SELECT * ' . ( $all ? '' : '/* UNION_UNIQUE */ ' ) .
+                       'FROM (' . implode( $glue, $sqls ) . ')';
        }
 
        function wasDeadlock() {
                return $this->lastErrno() == 'OCI-00060';
        }
 
-       function duplicateTableStructure( $oldName, $newName, $temporary = false, $fname = __METHOD__ ) {
+       function duplicateTableStructure( $oldName, $newName, $temporary = false,
+               $fname = __METHOD__
+       ) {
                $temporary = $temporary ? 'TRUE' : 'FALSE';
 
                $newName = strtoupper( $newName );
@@ -796,7 +860,8 @@ class DatabaseOracle extends DatabaseBase {
                $oldPrefix = substr( $oldName, 0, strlen( $oldName ) - strlen( $tabName ) );
                $newPrefix = strtoupper( $this->mTablePrefix );
 
-               return $this->doQuery( "BEGIN DUPLICATE_TABLE( '$tabName', '$oldPrefix', '$newPrefix', $temporary ); END;" );
+               return $this->doQuery( "BEGIN DUPLICATE_TABLE( '$tabName', " .
+                       "'$oldPrefix', '$newPrefix', $temporary ); END;" );
        }
 
        function listTables( $prefix = null, $fname = __METHOD__ ) {
@@ -806,7 +871,8 @@ class DatabaseOracle extends DatabaseBase {
                }
 
                $owner = strtoupper( $this->mDBname );
-               $result = $this->doQuery( "SELECT table_name FROM all_tables WHERE owner='$owner' AND table_name NOT LIKE '%!_IDX\$_' ESCAPE '!' $listWhere" );
+               $result = $this->doQuery( "SELECT table_name FROM all_tables " .
+                       "WHERE owner='$owner' AND table_name NOT LIKE '%!_IDX\$_' ESCAPE '!' $listWhere" );
 
                // dirty code ... i know
                $endArray = array();
@@ -869,10 +935,14 @@ class DatabaseOracle extends DatabaseBase {
         */
        function getServerVersion() {
                //better version number, fallback on driver
-               $rset = $this->doQuery( 'SELECT version FROM product_component_version WHERE UPPER(product) LIKE \'ORACLE DATABASE%\'' );
+               $rset = $this->doQuery(
+                       'SELECT version FROM product_component_version ' .
+                               'WHERE UPPER(product) LIKE \'ORACLE DATABASE%\''
+               );
                if ( !( $row = $rset->fetchRow() ) ) {
                        return oci_server_version( $this->mConn );
                }
+
                return $row['version'];
        }
 
@@ -893,6 +963,7 @@ class DatabaseOracle extends DatabaseBase {
                } else {
                        $count = 0;
                }
+
                return $count != 0;
        }
 
@@ -913,6 +984,7 @@ class DatabaseOracle extends DatabaseBase {
                }
 
                $res->free();
+
                return $exists;
        }
 
@@ -947,10 +1019,15 @@ class DatabaseOracle extends DatabaseBase {
                        $tableWhere = '= \'' . $table . '\'';
                }
 
-               $fieldInfoStmt = oci_parse( $this->mConn, 'SELECT * FROM wiki_field_info_full WHERE table_name ' . $tableWhere . ' and column_name = \'' . $field . '\'' );
+               $fieldInfoStmt = oci_parse(
+                       $this->mConn,
+                       'SELECT * FROM wiki_field_info_full WHERE table_name ' .
+                               $tableWhere . ' and column_name = \'' . $field . '\''
+               );
                if ( oci_execute( $fieldInfoStmt, $this->execFlags() ) === false ) {
                        $e = oci_error( $fieldInfoStmt );
                        $this->reportQueryError( $e['message'], $e['code'], 'fieldInfo QUERY', __METHOD__ );
+
                        return false;
                }
                $res = new ORAResult( $this, $fieldInfoStmt );
@@ -969,6 +1046,7 @@ class DatabaseOracle extends DatabaseBase {
                        $this->mFieldInfoCache["$table.$field"] = $fieldInfoTemp;
                }
                $res->free();
+
                return $fieldInfoTemp;
        }
 
@@ -982,6 +1060,7 @@ class DatabaseOracle extends DatabaseBase {
                if ( is_array( $table ) ) {
                        throw new DBUnexpectedError( $this, 'DatabaseOracle::fieldInfo called with table array!' );
                }
+
                return $this->fieldInfoMulti( $table, $field );
        }
 
@@ -1018,7 +1097,7 @@ class DatabaseOracle extends DatabaseBase {
 
                $replacements = array();
 
-               while ( ! feof( $fp ) ) {
+               while ( !feof( $fp ) ) {
                        if ( $lineCallback ) {
                                call_user_func( $lineCallback );
                        }
@@ -1028,7 +1107,7 @@ class DatabaseOracle extends DatabaseBase {
                        if ( $sl < 0 ) {
                                continue;
                        }
-                       if ( '-' == $line { 0 } && '-' == $line { 1 } ) {
+                       if ( '-' == $line[0] && '-' == $line[1] ) {
                                continue;
                        }
 
@@ -1042,7 +1121,7 @@ class DatabaseOracle extends DatabaseBase {
                                        $dollarquote = true;
                                }
                        } elseif ( !$dollarquote ) {
-                               if ( ';' == $line { $sl } && ( $sl < 2 || ';' != $line { $sl - 1 } ) ) {
+                               if ( ';' == $line[$sl] && ( $sl < 2 || ';' != $line[$sl - 1] ) ) {
                                        $done = true;
                                        $line = substr( $line, 0, $sl );
                                }
@@ -1075,6 +1154,7 @@ class DatabaseOracle extends DatabaseBase {
 
                                        if ( false === $res ) {
                                                $err = $this->lastError();
+
                                                return "Query \"{$cmd}\" failed with error code \"$err\".\n";
                                        }
                                }
@@ -1083,6 +1163,7 @@ class DatabaseOracle extends DatabaseBase {
                                $done = false;
                        }
                }
+
                return true;
        }
 
@@ -1101,8 +1182,10 @@ class DatabaseOracle extends DatabaseBase {
                        if ( $e['code'] != '1435' ) {
                                $this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
                        }
+
                        return false;
                }
+
                return true;
        }
 
@@ -1115,6 +1198,7 @@ class DatabaseOracle extends DatabaseBase {
                if ( isset( $wgContLang->mLoaded ) && $wgContLang->mLoaded ) {
                        $s = $wgContLang->checkTitleEncoding( $s );
                }
+
                return "'" . $this->strencode( $s ) . "'";
        }
 
@@ -1122,6 +1206,7 @@ class DatabaseOracle extends DatabaseBase {
                if ( !$this->getFlag( DBO_DDLMODE ) ) {
                        $s = '/*Q*/' . $s;
                }
+
                return $s;
        }
 
@@ -1160,13 +1245,17 @@ class DatabaseOracle extends DatabaseBase {
                                $conds2[$col] = $val;
                        }
                }
+
                return $conds2;
        }
 
-       function selectRow( $table, $vars, $conds, $fname = __METHOD__, $options = array(), $join_conds = array() ) {
+       function selectRow( $table, $vars, $conds, $fname = __METHOD__,
+               $options = array(), $join_conds = array()
+       ) {
                if ( is_array( $conds ) ) {
                        $conds = $this->wrapConditionsForWhere( $table, $conds );
                }
+
                return parent::selectRow( $table, $vars, $conds, $fname, $options, $join_conds );
        }
 
@@ -1203,7 +1292,7 @@ class DatabaseOracle extends DatabaseBase {
                        $startOpts .= 'DISTINCT';
                }
 
-               if ( isset( $options['USE INDEX'] ) && ! is_array( $options['USE INDEX'] ) ) {
+               if ( isset( $options['USE INDEX'] ) && !is_array( $options['USE INDEX'] ) ) {
                        $useIndex = $this->useIndexClause( $options['USE INDEX'] );
                } else {
                        $useIndex = '';
@@ -1220,18 +1309,29 @@ class DatabaseOracle extends DatabaseBase {
                // all deletions on these tables have transactions so final failure rollbacks these updates
                $table = $this->tableName( $table );
                if ( $table == $this->tableName( 'user' ) ) {
-                               $this->update( 'archive', array( 'ar_user' => 0 ), array( 'ar_user' => $conds['user_id'] ), $fname );
-                               $this->update( 'ipblocks', array( 'ipb_user' => 0 ), array( 'ipb_user' => $conds['user_id'] ), $fname );
-                               $this->update( 'image', array( 'img_user' => 0 ), array( 'img_user' => $conds['user_id'] ), $fname );
-                               $this->update( 'oldimage', array( 'oi_user' => 0 ), array( 'oi_user' => $conds['user_id'] ), $fname );
-                               $this->update( 'filearchive', array( 'fa_deleted_user' => 0 ), array( 'fa_deleted_user' => $conds['user_id'] ), $fname );
-                               $this->update( 'filearchive', array( 'fa_user' => 0 ), array( 'fa_user' => $conds['user_id'] ), $fname );
-                               $this->update( 'uploadstash', array( 'us_user' => 0 ), array( 'us_user' => $conds['user_id'] ), $fname );
-                               $this->update( 'recentchanges', array( 'rc_user' => 0 ), array( 'rc_user' => $conds['user_id'] ), $fname );
-                               $this->update( 'logging', array( 'log_user' => 0 ), array( 'log_user' => $conds['user_id'] ), $fname );
+                       $this->update( 'archive', array( 'ar_user' => 0 ),
+                               array( 'ar_user' => $conds['user_id'] ), $fname );
+                       $this->update( 'ipblocks', array( 'ipb_user' => 0 ),
+                               array( 'ipb_user' => $conds['user_id'] ), $fname );
+                       $this->update( 'image', array( 'img_user' => 0 ),
+                               array( 'img_user' => $conds['user_id'] ), $fname );
+                       $this->update( 'oldimage', array( 'oi_user' => 0 ),
+                               array( 'oi_user' => $conds['user_id'] ), $fname );
+                       $this->update( 'filearchive', array( 'fa_deleted_user' => 0 ),
+                               array( 'fa_deleted_user' => $conds['user_id'] ), $fname );
+                       $this->update( 'filearchive', array( 'fa_user' => 0 ),
+                               array( 'fa_user' => $conds['user_id'] ), $fname );
+                       $this->update( 'uploadstash', array( 'us_user' => 0 ),
+                               array( 'us_user' => $conds['user_id'] ), $fname );
+                       $this->update( 'recentchanges', array( 'rc_user' => 0 ),
+                               array( 'rc_user' => $conds['user_id'] ), $fname );
+                       $this->update( 'logging', array( 'log_user' => 0 ),
+                               array( 'log_user' => $conds['user_id'] ), $fname );
                } elseif ( $table == $this->tableName( 'image' ) ) {
-                               $this->update( 'oldimage', array( 'oi_name' => 0 ), array( 'oi_name' => $conds['img_name'] ), $fname );
+                       $this->update( 'oldimage', array( 'oi_name' => 0 ),
+                               array( 'oi_name' => $conds['img_name'] ), $fname );
                }
+
                return parent::delete( $table, $conds, $fname );
        }
 
@@ -1262,6 +1362,7 @@ class DatabaseOracle extends DatabaseBase {
                if ( ( $this->mLastResult = $stmt = oci_parse( $this->mConn, $sql ) ) === false ) {
                        $e = oci_error( $this->mConn );
                        $this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
+
                        return false;
                }
                foreach ( $values as $col => &$val ) {
@@ -1283,6 +1384,7 @@ class DatabaseOracle extends DatabaseBase {
                                if ( oci_bind_by_name( $stmt, ":$col", $val ) === false ) {
                                        $e = oci_error( $stmt );
                                        $this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
+
                                        return false;
                                }
                        } else {
@@ -1293,10 +1395,10 @@ class DatabaseOracle extends DatabaseBase {
 
                                if ( $col_type == 'BLOB' ) {
                                        $lob[$col]->writeTemporary( $val );
-                                       oci_bind_by_name( $stmt, ":$col", $lob[$col], - 1, SQLT_BLOB );
+                                       oci_bind_by_name( $stmt, ":$col", $lob[$col], -1, SQLT_BLOB );
                                } else {
                                        $lob[$col]->writeTemporary( $val );
-                                       oci_bind_by_name( $stmt, ":$col", $lob[$col], - 1, OCI_B_CLOB );
+                                       oci_bind_by_name( $stmt, ":$col", $lob[$col], -1, OCI_B_CLOB );
                                }
                        }
                }
@@ -1307,6 +1409,7 @@ class DatabaseOracle extends DatabaseBase {
                        $e = oci_error( $stmt );
                        if ( !$this->ignore_DUP_VAL_ON_INDEX || $e['code'] != '1' ) {
                                $this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
+
                                return false;
                        } else {
                                $this->mAffectedRows = oci_num_rows( $stmt );
@@ -1354,6 +1457,14 @@ class DatabaseOracle extends DatabaseBase {
                return $this->mServer;
        }
 
+       public function buildGroupConcatField(
+               $delim, $table, $field, $conds = '', $join_conds = array()
+       ) {
+               $fld = "LISTAGG($field," . $this->addQuotes( $delim ) . ") WITHIN GROUP (ORDER BY $field)";
+
+               return '(' . $this->selectSQLText( $table, $fld, $conds, null, array(), $join_conds ) . ')';
+       }
+
        public function getSearchEngine() {
                return 'SearchOracle';
        }
@@ -1361,5 +1472,4 @@ class DatabaseOracle extends DatabaseBase {
        public function getInfinity() {
                return '31-12-2030 12:00:00.000000';
        }
-
 } // end DatabaseOracle class
index e564a16..cfa2074 100644 (file)
@@ -79,6 +79,7 @@ SQL;
                $n->conname = $row->conname;
                $n->has_default = ( $row->atthasdef === 't' );
                $n->default = $row->adsrc;
+
                return $n;
        }
 
@@ -113,6 +114,7 @@ SQL;
        function conname() {
                return $this->conname;
        }
+
        /**
         * @since 1.19
         */
@@ -123,7 +125,6 @@ SQL;
                        return false;
                }
        }
-
 }
 
 /**
@@ -181,7 +182,6 @@ class PostgresTransactionState {
                                        }
                                        $old = next( $this->mCurrentState );
                                        $new = next( $this->mNewState );
-
                                }
                        }
                }
@@ -224,8 +224,8 @@ class SavepointPostgres {
                $this->didbegin = false;
                /* If we are not in a transaction, we need to be for savepoint trickery */
                if ( !$dbw->trxLevel() ) {
-                               $dbw->begin( "FOR SAVEPOINT" );
-                               $this->didbegin = true;
+                       $dbw->begin( "FOR SAVEPOINT" );
+                       $this->didbegin = true;
                }
        }
 
@@ -247,10 +247,10 @@ class SavepointPostgres {
                global $wgDebugDBTransactions;
                if ( $this->dbw->doQuery( $keyword . " " . $this->id ) !== false ) {
                        if ( $wgDebugDBTransactions ) {
-                               wfDebug( sprintf ( $msg_ok, $this->id ) );
+                               wfDebug( sprintf( $msg_ok, $this->id ) );
                        }
                } else {
-                       wfDebug( sprintf ( $msg_failed, $this->id ) );
+                       wfDebug( sprintf( $msg_failed, $this->id ) );
                }
        }
 
@@ -296,32 +296,42 @@ class DatabasePostgres extends DatabaseBase {
        function cascadingDeletes() {
                return true;
        }
+
        function cleanupTriggers() {
                return true;
        }
+
        function strictIPs() {
                return true;
        }
+
        function realTimestamps() {
                return true;
        }
+
        function implicitGroupby() {
                return false;
        }
+
        function implicitOrderby() {
                return false;
        }
+
        function searchableIPs() {
                return true;
        }
+
        function functionalIndexes() {
                return true;
        }
 
        function hasConstraint( $name ) {
-               $SQL = "SELECT 1 FROM pg_catalog.pg_constraint c, pg_catalog.pg_namespace n WHERE c.connamespace = n.oid AND conname = '" .
-                               pg_escape_string( $this->mConn, $name ) . "' AND n.nspname = '" . pg_escape_string( $this->mConn, $this->getCoreSchema() ) . "'";
+               $SQL = "SELECT 1 FROM pg_catalog.pg_constraint c, pg_catalog.pg_namespace n " .
+                       "WHERE c.connamespace = n.oid AND conname = '" .
+                       pg_escape_string( $this->mConn, $name ) . "' AND n.nspname = '" .
+                       pg_escape_string( $this->mConn, $this->getCoreSchema() ) . "'";
                $res = $this->doQuery( $SQL );
+
                return $this->numRows( $res );
        }
 
@@ -337,7 +347,12 @@ class DatabasePostgres extends DatabaseBase {
        function open( $server, $user, $password, $dbName ) {
                # Test for Postgres support, to avoid suppressed fatal error
                if ( !function_exists( 'pg_connect' ) ) {
-                       throw new DBConnectionError( $this, "Postgres functions missing, have you compiled PHP with the --with-pgsql option?\n (Note: if you recently installed PHP, you may need to restart your webserver and database)\n" );
+                       throw new DBConnectionError(
+                               $this,
+                               "Postgres functions missing, have you compiled PHP with the --with-pgsql\n" .
+                               "option? (Note: if you recently installed PHP, you may need to restart your\n" .
+                               "webserver and database)\n"
+                       );
                }
 
                global $wgDBport;
@@ -370,12 +385,20 @@ class DatabasePostgres extends DatabaseBase {
                $this->connectString = $this->makeConnectionString( $connectVars, PGSQL_CONNECT_FORCE_NEW );
                $this->close();
                $this->installErrorHandler();
-               $this->mConn = pg_connect( $this->connectString );
+
+               try {
+                       $this->mConn = pg_connect( $this->connectString );
+               } catch ( Exception $ex ) {
+                       $this->restoreErrorHandler();
+                       throw $ex;
+               }
+
                $phpError = $this->restoreErrorHandler();
 
                if ( !$this->mConn ) {
                        wfDebug( "DB connection error\n" );
-                       wfDebug( "Server: $server, Database: $dbName, User: $user, Password: " . substr( $password, 0, 3 ) . "...\n" );
+                       wfDebug( "Server: $server, Database: $dbName, User: $user, Password: " .
+                               substr( $password, 0, 3 ) . "...\n" );
                        wfDebug( $this->lastError() . "\n" );
                        throw new DBConnectionError( $this, str_replace( "\n", ' ', $phpError ) );
                }
@@ -421,6 +444,7 @@ class DatabasePostgres extends DatabaseBase {
                foreach ( $vars as $name => $value ) {
                        $s .= "$name='" . str_replace( "'", "\\'", $value ) . "' ";
                }
+
                return $s;
        }
 
@@ -447,24 +471,28 @@ class DatabasePostgres extends DatabaseBase {
                if ( pg_result_error( $this->mLastResult ) ) {
                        return false;
                }
+
                return $this->mLastResult;
        }
 
        protected function dumpError() {
-               $diags = array( PGSQL_DIAG_SEVERITY,
-                               PGSQL_DIAG_SQLSTATE,
-                               PGSQL_DIAG_MESSAGE_PRIMARY,
-                               PGSQL_DIAG_MESSAGE_DETAIL,
-                               PGSQL_DIAG_MESSAGE_HINT,
-                               PGSQL_DIAG_STATEMENT_POSITION,
-                               PGSQL_DIAG_INTERNAL_POSITION,
-                               PGSQL_DIAG_INTERNAL_QUERY,
-                               PGSQL_DIAG_CONTEXT,
-                               PGSQL_DIAG_SOURCE_FILE,
-                               PGSQL_DIAG_SOURCE_LINE,
-                               PGSQL_DIAG_SOURCE_FUNCTION );
+               $diags = array(
+                       PGSQL_DIAG_SEVERITY,
+                       PGSQL_DIAG_SQLSTATE,
+                       PGSQL_DIAG_MESSAGE_PRIMARY,
+                       PGSQL_DIAG_MESSAGE_DETAIL,
+                       PGSQL_DIAG_MESSAGE_HINT,
+                       PGSQL_DIAG_STATEMENT_POSITION,
+                       PGSQL_DIAG_INTERNAL_POSITION,
+                       PGSQL_DIAG_INTERNAL_QUERY,
+                       PGSQL_DIAG_CONTEXT,
+                       PGSQL_DIAG_SOURCE_FILE,
+                       PGSQL_DIAG_SOURCE_LINE,
+                       PGSQL_DIAG_SOURCE_FUNCTION
+               );
                foreach ( $diags as $d ) {
-                       wfDebug( sprintf( "PgSQL ERROR(%d): %s\n", $d, pg_result_error_field( $this->mLastResult, $d ) ) );
+                       wfDebug( sprintf( "PgSQL ERROR(%d): %s\n",
+                               $d, pg_result_error_field( $this->mLastResult, $d ) ) );
                }
        }
 
@@ -474,6 +502,7 @@ class DatabasePostgres extends DatabaseBase {
                        /* Check for constraint violation */
                        if ( $errno === '23505' ) {
                                parent::reportQueryError( $error, $errno, $sql, $fname, $tempIgnore );
+
                                return;
                        }
                }
@@ -510,8 +539,12 @@ class DatabasePostgres extends DatabaseBase {
                # @todo hashar: not sure if the following test really trigger if the object
                #          fetching failed.
                if ( pg_last_error( $this->mConn ) ) {
-                       throw new DBUnexpectedError( $this, 'SQL error: ' . htmlspecialchars( pg_last_error( $this->mConn ) ) );
+                       throw new DBUnexpectedError(
+                               $this,
+                               'SQL error: ' . htmlspecialchars( pg_last_error( $this->mConn ) )
+                       );
                }
+
                return $row;
        }
 
@@ -523,8 +556,12 @@ class DatabasePostgres extends DatabaseBase {
                $row = pg_fetch_array( $res );
                wfRestoreWarnings();
                if ( pg_last_error( $this->mConn ) ) {
-                       throw new DBUnexpectedError( $this, 'SQL error: ' . htmlspecialchars( pg_last_error( $this->mConn ) ) );
+                       throw new DBUnexpectedError(
+                               $this,
+                               'SQL error: ' . htmlspecialchars( pg_last_error( $this->mConn ) )
+                       );
                }
+
                return $row;
        }
 
@@ -536,8 +573,12 @@ class DatabasePostgres extends DatabaseBase {
                $n = pg_num_rows( $res );
                wfRestoreWarnings();
                if ( pg_last_error( $this->mConn ) ) {
-                       throw new DBUnexpectedError( $this, 'SQL error: ' . htmlspecialchars( pg_last_error( $this->mConn ) ) );
+                       throw new DBUnexpectedError(
+                               $this,
+                               'SQL error: ' . htmlspecialchars( pg_last_error( $this->mConn ) )
+                       );
                }
+
                return $n;
        }
 
@@ -545,6 +586,7 @@ class DatabasePostgres extends DatabaseBase {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
+
                return pg_num_fields( $res );
        }
 
@@ -552,6 +594,7 @@ class DatabasePostgres extends DatabaseBase {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
+
                return pg_field_name( $res, $n );
        }
 
@@ -569,6 +612,7 @@ class DatabasePostgres extends DatabaseBase {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
+
                return pg_result_seek( $res, $row );
        }
 
@@ -583,6 +627,7 @@ class DatabasePostgres extends DatabaseBase {
                        return 'No database connection';
                }
        }
+
        function lastErrno() {
                if ( $this->mLastResult ) {
                        return pg_result_error_field( $this->mLastResult, PGSQL_DIAG_SQLSTATE );
@@ -599,6 +644,7 @@ class DatabasePostgres extends DatabaseBase {
                if ( empty( $this->mLastResult ) ) {
                        return 0;
                }
+
                return pg_affected_rows( $this->mLastResult );
        }
 
@@ -610,7 +656,9 @@ class DatabasePostgres extends DatabaseBase {
         * Takes same arguments as Database::select()
         * @return int
         */
-       function estimateRowCount( $table, $vars = '*', $conds = '', $fname = __METHOD__, $options = array() ) {
+       function estimateRowCount( $table, $vars = '*', $conds = '',
+               $fname = __METHOD__, $options = array()
+       ) {
                $options['EXPLAIN'] = true;
                $res = $this->select( $table, $vars, $conds, $fname, $options );
                $rows = -1;
@@ -621,6 +669,7 @@ class DatabasePostgres extends DatabaseBase {
                                $rows = $count[1];
                        }
                }
+
                return $rows;
        }
 
@@ -640,6 +689,7 @@ class DatabasePostgres extends DatabaseBase {
                                return $row;
                        }
                }
+
                return false;
        }
 
@@ -702,6 +752,7 @@ __INDEXATTR__;
                } else {
                        return null;
                }
+
                return $a;
        }
 
@@ -717,6 +768,7 @@ __INDEXATTR__;
                foreach ( $res as $row ) {
                        return true;
                }
+
                return false;
        }
 
@@ -844,15 +896,15 @@ __INDEXATTR__;
        /**
         * INSERT SELECT wrapper
         * $varMap must be an associative array of the form array( 'dest1' => 'source1', ...)
-        * Source items may be literals rather then field names, but strings should be quoted with Database::addQuotes()
+        * Source items may be literals rather then field names, but strings should
+        * be quoted with Database::addQuotes()
         * $conds may be "*" to copy the whole table
         * srcTable may be an array of tables.
         * @todo FIXME: Implement this a little better (seperate select/insert)?
         * @return bool
         */
        function insertSelect( $destTable, $srcTable, $varMap, $conds, $fname = __METHOD__,
-               $insertOptions = array(), $selectOptions = array() )
-       {
+               $insertOptions = array(), $selectOptions = array() ) {
                $destTable = $this->tableName( $destTable );
 
                if ( !is_array( $insertOptions ) ) {
@@ -882,8 +934,8 @@ __INDEXATTR__;
                }
 
                $sql = "INSERT INTO $destTable (" . implode( ',', array_keys( $varMap ) ) . ')' .
-                               " SELECT $startOpts " . implode( ',', $varMap ) .
-                               " FROM $srcTable $useIndex";
+                       " SELECT $startOpts " . implode( ',', $varMap ) .
+                       " FROM $srcTable $useIndex";
 
                if ( $conds != '*' ) {
                        $sql .= ' WHERE ' . $this->makeList( $conds, LIST_AND );
@@ -939,6 +991,7 @@ __INDEXATTR__;
                $res = $this->query( "SELECT nextval('$safeseq')" );
                $row = $this->fetchRow( $res );
                $this->mInsertId = $row[0];
+
                return $this->mInsertId;
        }
 
@@ -951,6 +1004,7 @@ __INDEXATTR__;
                $res = $this->query( "SELECT currval('$safeseq')" );
                $row = $this->fetchRow( $res );
                $currval = $row[0];
+
                return $currval;
        }
 
@@ -968,6 +1022,7 @@ __INDEXATTR__;
                } else {
                        $size = $row->size;
                }
+
                return $size;
        }
 
@@ -982,7 +1037,9 @@ __INDEXATTR__;
        function duplicateTableStructure( $oldName, $newName, $temporary = false, $fname = __METHOD__ ) {
                $newName = $this->addIdentifierQuotes( $newName );
                $oldName = $this->addIdentifierQuotes( $oldName );
-               return $this->query( 'CREATE ' . ( $temporary ? 'TEMPORARY ' : '' ) . " TABLE $newName (LIKE $oldName INCLUDING DEFAULTS)", $fname );
+
+               return $this->query( 'CREATE ' . ( $temporary ? 'TEMPORARY ' : '' ) . " TABLE $newName " .
+                       "(LIKE $oldName INCLUDING DEFAULTS)", $fname );
        }
 
        function listTables( $prefix = null, $fname = __METHOD__ ) {
@@ -1037,8 +1094,8 @@ __INDEXATTR__;
                                        $text, $match, 0, $offset );
                                $offset += strlen( $match[0] );
                                $output[] = ( '"' != $match[1][0]
-                                               ? $match[1]
-                                               : stripcslashes( substr( $match[1], 1, -1 ) ) );
+                                       ? $match[1]
+                                       : stripcslashes( substr( $match[1], 1, -1 ) ) );
                                if ( '},' == $match[3] ) {
                                        return $output;
                                }
@@ -1046,6 +1103,7 @@ __INDEXATTR__;
                                $offset = $this->pg_array_parse( $text, $output, $limit, $offset + 1 );
                        }
                } while ( $limit > $offset );
+
                return $output;
        }
 
@@ -1073,6 +1131,7 @@ __INDEXATTR__;
        function getCurrentSchema() {
                $res = $this->query( "SELECT current_schema()", __METHOD__ );
                $row = $this->fetchRow( $res );
+
                return $row[0];
        }
 
@@ -1090,7 +1149,9 @@ __INDEXATTR__;
                $res = $this->query( "SELECT current_schemas(false)", __METHOD__ );
                $row = $this->fetchRow( $res );
                $schemas = array();
+
                /* PHP pgsql support does not support array type, "{a,b}" string is returned */
+
                return $this->pg_array_parse( $row[0], $schemas );
        }
 
@@ -1106,7 +1167,9 @@ __INDEXATTR__;
        function getSearchPath() {
                $res = $this->query( "SHOW search_path", __METHOD__ );
                $row = $this->fetchRow( $res );
+
                /* PostgreSQL returns SHOW values as strings */
+
                return explode( ",", $row[0] );
        }
 
@@ -1148,14 +1211,15 @@ __INDEXATTR__;
                                 */
                                $search_path = $this->getSearchPath();
                                array_unshift( $search_path,
-                                       $this->addIdentifierQuotes( $desired_schema ));
+                                       $this->addIdentifierQuotes( $desired_schema ) );
                                $this->setSearchPath( $search_path );
                                $this->mCoreSchema = $desired_schema;
                                wfDebug( "Schema \"" . $desired_schema . "\" added to the search path\n" );
                        }
                } else {
                        $this->mCoreSchema = $this->getCurrentSchema();
-                       wfDebug( "Schema \"" . $desired_schema . "\" not found, using current \"" . $this->mCoreSchema . "\"\n" );
+                       wfDebug( "Schema \"" . $desired_schema . "\" not found, using current \"" .
+                               $this->mCoreSchema . "\"\n" );
                }
                /* Commit SET otherwise it will be rollbacked on error or IGNORE SELECT */
                $this->commit( __METHOD__ );
@@ -1188,6 +1252,7 @@ __INDEXATTR__;
                                $this->numeric_version = pg_parameter_status( $this->mConn, 'server_version' );
                        }
                }
+
                return $this->numeric_version;
        }
 
@@ -1211,6 +1276,7 @@ __INDEXATTR__;
                        . "AND c.relkind IN ('" . implode( "','", $types ) . "')";
                $res = $this->query( $SQL );
                $count = $res ? $res->numRows() : 0;
+
                return (bool)$count;
        }
 
@@ -1246,6 +1312,7 @@ SQL;
                        return null;
                }
                $rows = $res->numRows();
+
                return $rows;
        }
 
@@ -1257,12 +1324,13 @@ SQL;
                                'schemaname' => $this->getCoreSchema()
                        )
                );
+
                return $exists === $rule;
        }
 
        function constraintExists( $table, $constraint ) {
                $SQL = sprintf( "SELECT 1 FROM information_schema.table_constraints " .
-                               "WHERE constraint_schema = %s AND table_name = %s AND constraint_name = %s",
+                       "WHERE constraint_schema = %s AND table_name = %s AND constraint_name = %s",
                        $this->addQuotes( $this->getCoreSchema() ),
                        $this->addQuotes( $table ),
                        $this->addQuotes( $constraint )
@@ -1272,6 +1340,7 @@ SQL;
                        return null;
                }
                $rows = $res->numRows();
+
                return $rows;
        }
 
@@ -1282,6 +1351,7 @@ SQL;
        function schemaExists( $schema ) {
                $exists = $this->selectField( '"pg_catalog"."pg_namespace"', 1,
                        array( 'nspname' => $schema ), __METHOD__ );
+
                return (bool)$exists;
        }
 
@@ -1292,6 +1362,7 @@ SQL;
        function roleExists( $roleName ) {
                $exists = $this->selectField( '"pg_catalog"."pg_roles"', 1,
                        array( 'rolname' => $roleName ), __METHOD__ );
+
                return (bool)$exists;
        }
 
@@ -1307,6 +1378,7 @@ SQL;
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
+
                return pg_field_type( $res, $index );
        }
 
@@ -1322,6 +1394,7 @@ SQL;
                if ( $b instanceof Blob ) {
                        $b = $b->fetch();
                }
+
                return pg_unescape_bytea( $b );
        }
 
@@ -1341,6 +1414,7 @@ SQL;
                } elseif ( $s instanceof Blob ) {
                        return "'" . $s->fetch( $s ) . "'";
                }
+
                return "'" . pg_escape_string( $this->mConn, $s ) . "'";
        }
 
@@ -1424,6 +1498,14 @@ SQL;
                return implode( ' || ', $stringList );
        }
 
+       public function buildGroupConcatField(
+               $delimiter, $table, $field, $conds = '', $options = array(), $join_conds = array()
+       ) {
+               $fld = "array_to_string(array_agg($field)," . $this->addQuotes( $delimiter ) . ')';
+
+               return '(' . $this->selectSQLText( $table, $fld, $conds, null, array(), $join_conds ) . ')';
+       }
+
        public function getSearchEngine() {
                return 'SearchPostgres';
        }
@@ -1433,11 +1515,11 @@ SQL;
                if ( substr( $newLine, 0, 4 ) == '$mw$' ) {
                        if ( $this->delimiter ) {
                                $this->delimiter = false;
-                       }
-                       else {
+                       } else {
                                $this->delimiter = ';';
                        }
                }
+
                return parent::streamStatementEnd( $sql, $newLine );
        }
 
@@ -1455,6 +1537,7 @@ SQL;
                $result = $this->query( "SELECT (CASE(pg_try_advisory_lock($key))
                        WHEN 'f' THEN 'f' ELSE pg_advisory_unlock($key) END) AS lockstatus", $method );
                $row = $this->fetchObject( $result );
+
                return ( $row->lockstatus === 't' );
        }
 
@@ -1478,11 +1561,13 @@ SQL;
                        }
                }
                wfDebug( __METHOD__ . " failed to acquire lock\n" );
+
                return false;
        }
 
        /**
-        * See http://www.postgresql.org/docs/8.2/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKSFROM PG DOCS: http://www.postgresql.org/docs/8.2/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS
+        * See http://www.postgresql.org/docs/8.2/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKSFROM
+        * PG DOCS: http://www.postgresql.org/docs/8.2/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS
         * @param $lockName string
         * @param $method string
         * @return bool
@@ -1491,6 +1576,7 @@ SQL;
                $key = $this->addQuotes( $this->bigintFromLockName( $lockName ) );
                $result = $this->query( "SELECT pg_advisory_unlock($key) as lockstatus", $method );
                $row = $this->fetchObject( $result );
+
                return ( $row->lockstatus === 't' );
        }
 
index 79a3b1e..89f0818 100644 (file)
@@ -26,7 +26,6 @@
  * @ingroup Database
  */
 class DatabaseSqlite extends DatabaseBase {
-
        private static $fulltextEnabled = null;
 
        var $mAffectedRows;
@@ -104,6 +103,7 @@ class DatabaseSqlite extends DatabaseBase {
                        throw new DBConnectionError( $this, "SQLite database not accessible" );
                }
                $this->openFile( $fileName );
+
                return $this->mConn;
        }
 
@@ -137,6 +137,7 @@ class DatabaseSqlite extends DatabaseBase {
                        $this->mConn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT );
                        # Enforce LIKE to be case sensitive, just like MySQL
                        $this->query( 'PRAGMA case_sensitive_like = 1' );
+
                        return true;
                }
        }
@@ -147,6 +148,7 @@ class DatabaseSqlite extends DatabaseBase {
         */
        protected function closeConnection() {
                $this->mConn = null;
+
                return true;
        }
 
@@ -174,6 +176,7 @@ class DatabaseSqlite extends DatabaseBase {
                                self::$fulltextEnabled = stristr( $row['sql'], 'fts' ) !== false;
                        }
                }
+
                return self::$fulltextEnabled;
        }
 
@@ -195,6 +198,7 @@ class DatabaseSqlite extends DatabaseBase {
                        $cachedResult = 'FTS3';
                }
                $db->close();
+
                return $cachedResult;
        }
 
@@ -202,8 +206,10 @@ class DatabaseSqlite extends DatabaseBase {
         * Attaches external database to our connection, see http://sqlite.org/lang_attach.html
         * for details.
         *
-        * @param string $name database name to be used in queries like SELECT foo FROM dbname.table
-        * @param string $file database file name. If omitted, will be generated using $name and $wgSQLiteDataDir
+        * @param string $name database name to be used in queries like
+        *   SELECT foo FROM dbname.table
+        * @param string $file database file name. If omitted, will be generated
+        *   using $name and $wgSQLiteDataDir
         * @param string $fname calling function name
         *
         * @return ResultWrapper
@@ -214,6 +220,7 @@ class DatabaseSqlite extends DatabaseBase {
                        $file = self::generateFileName( $wgSQLiteDataDir, $name );
                }
                $file = $this->addQuotes( $file );
+
                return $this->query( "ATTACH DATABASE $file AS $name", $fname );
        }
 
@@ -244,6 +251,7 @@ class DatabaseSqlite extends DatabaseBase {
                        $this->mAffectedRows = $r->rowCount();
                        $res = new ResultWrapper( $this, $r->fetchAll() );
                }
+
                return $res;
        }
 
@@ -281,6 +289,7 @@ class DatabaseSqlite extends DatabaseBase {
 
                        return $obj;
                }
+
                return false;
        }
 
@@ -297,8 +306,10 @@ class DatabaseSqlite extends DatabaseBase {
                $cur = current( $r );
                if ( is_array( $cur ) ) {
                        next( $r );
+
                        return $cur;
                }
+
                return false;
        }
 
@@ -311,6 +322,7 @@ class DatabaseSqlite extends DatabaseBase {
         */
        function numRows( $res ) {
                $r = $res instanceof ResultWrapper ? $res->result : $res;
+
                return count( $r );
        }
 
@@ -320,6 +332,7 @@ class DatabaseSqlite extends DatabaseBase {
         */
        function numFields( $res ) {
                $r = $res instanceof ResultWrapper ? $res->result : $res;
+
                return is_array( $r ) ? count( $r[0] ) : 0;
        }
 
@@ -332,8 +345,10 @@ class DatabaseSqlite extends DatabaseBase {
                $r = $res instanceof ResultWrapper ? $res->result : $res;
                if ( is_array( $r ) ) {
                        $keys = array_keys( $r[0] );
+
                        return $keys[$n];
                }
+
                return false;
        }
 
@@ -349,6 +364,7 @@ class DatabaseSqlite extends DatabaseBase {
                if ( strpos( $name, 'sqlite_' ) === 0 ) {
                        return $name;
                }
+
                return str_replace( '"', '', parent::tableName( $name, $format ) );
        }
 
@@ -399,6 +415,7 @@ class DatabaseSqlite extends DatabaseBase {
                        return "Cannot return last error, no db connection";
                }
                $e = $this->mConn->errorInfo();
+
                return isset( $e[2] ) ? $e[2] : '';
        }
 
@@ -410,6 +427,7 @@ class DatabaseSqlite extends DatabaseBase {
                        return "Cannot return last error, no db connection";
                } else {
                        $info = $this->mConn->errorInfo();
+
                        return $info[1];
                }
        }
@@ -441,6 +459,7 @@ class DatabaseSqlite extends DatabaseBase {
                foreach ( $res as $row ) {
                        $info[] = $row->name;
                }
+
                return $info;
        }
 
@@ -467,6 +486,7 @@ class DatabaseSqlite extends DatabaseBase {
                }
                $firstPart = substr( $row->sql, 0, $indexPos );
                $options = explode( ' ', $firstPart );
+
                return in_array( 'UNIQUE', $options );
        }
 
@@ -483,6 +503,7 @@ class DatabaseSqlite extends DatabaseBase {
                                $options[$k] = '';
                        }
                }
+
                return parent::makeSelectOptions( $options );
        }
 
@@ -492,6 +513,7 @@ class DatabaseSqlite extends DatabaseBase {
         */
        function makeUpdateOptions( $options ) {
                $options = self::fixIgnore( $options );
+
                return parent::makeUpdateOptions( $options );
        }
 
@@ -506,6 +528,7 @@ class DatabaseSqlite extends DatabaseBase {
                                $options[$k] = 'OR IGNORE';
                        }
                }
+
                return $options;
        }
 
@@ -515,6 +538,7 @@ class DatabaseSqlite extends DatabaseBase {
         */
        function makeInsertOptions( $options ) {
                $options = self::fixIgnore( $options );
+
                return parent::makeInsertOptions( $options );
        }
 
@@ -593,6 +617,7 @@ class DatabaseSqlite extends DatabaseBase {
         */
        function unionQueries( $sqls, $all ) {
                $glue = $all ? ' UNION ALL ' : ' UNION ';
+
                return implode( $glue, $sqls );
        }
 
@@ -629,6 +654,7 @@ class DatabaseSqlite extends DatabaseBase {
         */
        function getServerVersion() {
                $ver = $this->mConn->getAttribute( PDO::ATTR_SERVER_VERSION );
+
                return $ver;
        }
 
@@ -636,7 +662,9 @@ class DatabaseSqlite extends DatabaseBase {
         * @return string User-friendly database information
         */
        public function getServerInfo() {
-               return wfMessage( self::getFulltextSearchModule() ? 'sqlite-has-fts' : 'sqlite-no-fts', $this->getServerVersion() )->text();
+               return wfMessage( self::getFulltextSearchModule()
+                       ? 'sqlite-has-fts'
+                       : 'sqlite-no-fts', $this->getServerVersion() )->text();
        }
 
        /**
@@ -656,6 +684,7 @@ class DatabaseSqlite extends DatabaseBase {
                                return new SQLiteField( $row, $tableName );
                        }
                }
+
                return false;
        }
 
@@ -696,7 +725,7 @@ class DatabaseSqlite extends DatabaseBase {
         * @return string
         */
        function strencode( $s ) {
-               return substr( $this->addQuotes( $s ), 1, - 1 );
+               return substr( $this->addQuotes( $s ), 1, -1 );
        }
 
        /**
@@ -715,6 +744,7 @@ class DatabaseSqlite extends DatabaseBase {
                if ( $b instanceof Blob ) {
                        $b = $b->fetch();
                }
+
                return $b;
        }
 
@@ -748,6 +778,7 @@ class DatabaseSqlite extends DatabaseBase {
                if ( count( $params ) > 0 && is_array( $params[0] ) ) {
                        $params = $params[0];
                }
+
                return parent::buildLike( $params ) . "ESCAPE '\' ";
        }
 
@@ -765,6 +796,7 @@ class DatabaseSqlite extends DatabaseBase {
        public function deadlockLoop( /*...*/ ) {
                $args = func_get_args();
                $function = array_shift( $args );
+
                return call_user_func_array( $function, $args );
        }
 
@@ -784,7 +816,11 @@ class DatabaseSqlite extends DatabaseBase {
                        // INT -> INTEGER
                        $s = preg_replace( '/\b(tiny|small|medium|big|)int(\s*\(\s*\d+\s*\)|\b)/i', 'INTEGER', $s );
                        // floating point types -> REAL
-                       $s = preg_replace( '/\b(float|double(\s+precision)?)(\s*\(\s*\d+\s*(,\s*\d+\s*)?\)|\b)/i', 'REAL', $s );
+                       $s = preg_replace(
+                               '/\b(float|double(\s+precision)?)(\s*\(\s*\d+\s*(,\s*\d+\s*)?\)|\b)/i',
+                               'REAL',
+                               $s
+                       );
                        // varchar -> TEXT
                        $s = preg_replace( '/\b(var)?char\s*\(.*?\)/i', 'TEXT', $s );
                        // TEXT normalization
@@ -814,6 +850,7 @@ class DatabaseSqlite extends DatabaseBase {
                        // DROP INDEX is database-wide, not table-specific, so no ON <table> clause.
                        $s = preg_replace( '/\sON\s+[^\s]*/i', '', $s );
                }
+
                return $s;
        }
 
@@ -828,6 +865,14 @@ class DatabaseSqlite extends DatabaseBase {
                return '(' . implode( ') || (', $stringList ) . ')';
        }
 
+       public function buildGroupConcatField(
+               $delim, $table, $field, $conds = '', $join_conds = array()
+       ) {
+               $fld = "group_concat($field," . $this->addQuotes( $delim ) . ')';
+
+               return '(' . $this->selectSQLText( $table, $fld, $conds, null, array(), $join_conds ) . ')';
+       }
+
        /**
         * @throws MWException
         * @param $oldName
@@ -837,13 +882,19 @@ class DatabaseSqlite extends DatabaseBase {
         * @return bool|ResultWrapper
         */
        function duplicateTableStructure( $oldName, $newName, $temporary = false, $fname = __METHOD__ ) {
-               $res = $this->query( "SELECT sql FROM sqlite_master WHERE tbl_name=" . $this->addQuotes( $oldName ) . " AND type='table'", $fname );
+               $res = $this->query( "SELECT sql FROM sqlite_master WHERE tbl_name=" .
+                       $this->addQuotes( $oldName ) . " AND type='table'", $fname );
                $obj = $this->fetchObject( $res );
                if ( !$obj ) {
                        throw new MWException( "Couldn't retrieve structure for table $oldName" );
                }
                $sql = $obj->sql;
-               $sql = preg_replace( '/(?<=\W)"?' . preg_quote( trim( $this->addIdentifierQuotes( $oldName ), '"' ) ) . '"?(?=\W)/', $this->addIdentifierQuotes( $newName ), $sql, 1 );
+               $sql = preg_replace(
+                       '/(?<=\W)"?' . preg_quote( trim( $this->addIdentifierQuotes( $oldName ), '"' ) ) . '"?(?=\W)/',
+                       $this->addIdentifierQuotes( $newName ),
+                       $sql,
+                       1
+               );
                if ( $temporary ) {
                        if ( preg_match( '/^\\s*CREATE\\s+VIRTUAL\\s+TABLE\b/i', $sql ) ) {
                                wfDebug( "Table $oldName is virtual, can't create a temporary duplicate.\n" );
@@ -851,6 +902,7 @@ class DatabaseSqlite extends DatabaseBase {
                                $sql = str_replace( 'CREATE TABLE', 'CREATE TEMPORARY TABLE', $sql );
                        }
                }
+
                return $this->query( $sql, $fname );
        }
 
@@ -879,13 +931,11 @@ class DatabaseSqlite extends DatabaseBase {
                                if ( strpos( $table, 'sqlite_' ) !== 0 ) {
                                        $endArray[] = $table;
                                }
-
                        }
                }
 
                return $endArray;
        }
-
 } // end DatabaseSqlite class
 
 /**
@@ -905,6 +955,7 @@ class DatabaseSqliteStandalone extends DatabaseSqlite {
  */
 class SQLiteField implements Field {
        private $info, $tableName;
+
        function __construct( $info, $tableName ) {
                $this->info = $info;
                $this->tableName = $tableName;
@@ -925,6 +976,7 @@ class SQLiteField implements Field {
                                return str_replace( "''", "'", $this->info->dflt_value );
                        }
                }
+
                return $this->info->dflt_value;
        }
 
@@ -938,5 +990,4 @@ class SQLiteField implements Field {
        function type() {
                return $this->info->type;
        }
-
 } // end SQLiteField
index de58bab..de5be08 100644 (file)
@@ -187,6 +187,7 @@ class ResultWrapper implements Iterator {
                if ( is_null( $this->currentRow ) ) {
                        $this->next();
                }
+
                return $this->currentRow;
        }
 
@@ -203,6 +204,7 @@ class ResultWrapper implements Iterator {
        function next() {
                $this->pos++;
                $this->currentRow = $this->fetchObject();
+
                return $this->currentRow;
        }
 
@@ -277,8 +279,9 @@ class FakeResultWrapper extends ResultWrapper {
 }
 
 /**
- * Used by DatabaseBase::buildLike() to represent characters that have special meaning in SQL LIKE clauses
- * and thus need no escaping. Don't instantiate it manually, use DatabaseBase::anyChar() and anyString() instead.
+ * Used by DatabaseBase::buildLike() to represent characters that have special
+ * meaning in SQL LIKE clauses and thus need no escaping. Don't instantiate it
+ * manually, use DatabaseBase::anyChar() and anyString() instead.
  */
 class LikeMatch {
        private $str;
index 3941179..21ae808 100644 (file)
@@ -32,7 +32,6 @@
  */
 
 interface IORMRow {
-
        /**
         * Load the specified fields from the database.
         *
@@ -268,5 +267,4 @@ interface IORMRow {
         * @return IORMTable
         */
        public function getTable();
-
 }
index 3686565..9e9c526 100644 (file)
@@ -28,7 +28,6 @@
  */
 
 interface IORMTable {
-
        /**
         * Returns the name of the database table objects of this type are stored in.
         *
@@ -63,8 +62,9 @@ interface IORMTable {
         * * array
         * * blob
         *
-        * TODO: get rid of the id field. Every row instance needs to have
-        * one so this is just causing hassle at various locations by requiring an extra check for field name.
+        * @todo Get rid of the id field. Every row instance needs to have one so
+        *   this is just causing hassle at various locations by requiring an extra
+        *   check for field name.
         *
         * @since 1.20
         *
@@ -110,7 +110,7 @@ interface IORMTable {
         * @throws DBQueryError if the query failed (even if the database was in ignoreErrors mode)
         */
        public function select( $fields = null, array $conditions = array(),
-                                                       array $options = array(), $functionName = null );
+               array $options = array(), $functionName = null );
 
        /**
         * Selects the the specified fields of the records matching the provided
@@ -126,7 +126,7 @@ interface IORMTable {
         * @return array of self
         */
        public function selectObjects( $fields = null, array $conditions = array(),
-                                                                  array $options = array(), $functionName = null );
+               array $options = array(), $functionName = null );
 
        /**
         * Do the actual select.
@@ -142,7 +142,7 @@ interface IORMTable {
         * @throws DBQueryError if the query failed (even if the database was in ignoreErrors mode)
         */
        public function rawSelect( $fields = null, array $conditions = array(),
-                                                          array $options = array(), $functionName = null );
+               array $options = array(), $functionName = null );
 
        /**
         * Selects the the specified fields of the records matching the provided
@@ -167,7 +167,7 @@ interface IORMTable {
         * @return array of array
         */
        public function selectFields( $fields = null, array $conditions = array(),
-                                                                 array $options = array(), $collapse = true, $functionName = null );
+               array $options = array(), $collapse = true, $functionName = null );
 
        /**
         * Selects the the specified fields of the first matching record.
@@ -183,7 +183,7 @@ interface IORMTable {
         * @return IORMRow|bool False on failure
         */
        public function selectRow( $fields = null, array $conditions = array(),
-                                                          array $options = array(), $functionName = null );
+               array $options = array(), $functionName = null );
 
        /**
         * Selects the the specified fields of the records matching the provided
@@ -199,7 +199,7 @@ interface IORMTable {
         * @return ResultWrapper
         */
        public function rawSelectRow( array $fields, array $conditions = array(),
-                                                                 array $options = array(), $functionName = null );
+               array $options = array(), $functionName = null );
 
        /**
         * Selects the the specified fields of the first record matching the provided
@@ -219,7 +219,7 @@ interface IORMTable {
         * @return mixed|array|bool False on failure
         */
        public function selectFieldsRow( $fields = null, array $conditions = array(),
-                                                                        array $options = array(), $collapse = true, $functionName = null );
+               array $options = array(), $collapse = true, $functionName = null );
 
        /**
         * Returns if there is at least one record matching the provided conditions.
@@ -316,14 +316,16 @@ interface IORMTable {
         *
         * @since 1.20
         *
-        * @return String|bool The target wiki, in a form that  LBFactory understands (or false if the local wiki is used)
+        * @return String|bool The target wiki, in a form that LBFactory
+        *   understands (or false if the local wiki is used)
         */
        public function getTargetWiki();
 
        /**
         * Set the ID of the any foreign wiki to use as a target for database operations
         *
-        * @param string|bool $wiki The target wiki, in a form that  LBFactory understands (or false if the local wiki shall be used)
+        * @param string|bool $wiki The target wiki, in a form that LBFactory
+        *   understands (or false if the local wiki shall be used)
         *
         * @since 1.20
         */
@@ -513,5 +515,4 @@ interface IORMTable {
         * @return boolean
         */
        public function canHaveField( $name );
-
 }
index 16c43a0..6e377ff 100644 (file)
@@ -26,7 +26,6 @@
  * @ingroup Database
  */
 abstract class LBFactory {
-
        /**
         * @var LBFactory
         */
@@ -52,6 +51,7 @@ abstract class LBFactory {
                        $class = $wgLBFactoryConf['class'];
                        self::$instance = new $class( $wgLBFactoryConf );
                }
+
                return self::$instance;
        }
 
@@ -210,13 +210,13 @@ class LBFactory_Simple extends LBFactory {
                                'type' => $wgDBtype,
                                'load' => 1,
                                'flags' => $flags
-                       ));
+                       ) );
                }
 
                return new LoadBalancer( array(
                        'servers' => $servers,
                        'masterWaitTimeout' => $wgMasterWaitTimeout
-               ));
+               ) );
        }
 
        /**
@@ -229,6 +229,7 @@ class LBFactory_Simple extends LBFactory {
                        $this->mainLB->parentInfo( array( 'id' => 'main' ) );
                        $this->chronProt->initLB( $this->mainLB );
                }
+
                return $this->mainLB;
        }
 
@@ -243,9 +244,10 @@ class LBFactory_Simple extends LBFactory {
                if ( !isset( $wgExternalServers[$cluster] ) ) {
                        throw new MWException( __METHOD__ . ": Unknown cluster \"$cluster\"" );
                }
+
                return new LoadBalancer( array(
                        'servers' => $wgExternalServers[$cluster]
-               ));
+               ) );
        }
 
        /**
@@ -259,6 +261,7 @@ class LBFactory_Simple extends LBFactory {
                        $this->extLBs[$cluster]->parentInfo( array( 'id' => "ext-$cluster" ) );
                        $this->chronProt->initLB( $this->extLBs[$cluster] );
                }
+
                return $this->extLBs[$cluster];
        }
 
@@ -325,6 +328,7 @@ class LBFactory_Fake extends LBFactory {
  */
 class DBAccessError extends MWException {
        function __construct() {
-               parent::__construct( "Mediawiki tried to access the database via wfGetDB(). This is not allowed." );
+               parent::__construct( "Mediawiki tried to access the database via wfGetDB(). " .
+                       "This is not allowed." );
        }
 }
index 3043946..a37a560 100644 (file)
  * Configuration:
  *     sectionsByDB                A map of database names to section names
  *
- *     sectionLoads                A 2-d map. For each section, gives a map of server names to load ratios.
- *                                 For example: array( 'section1' => array( 'db1' => 100, 'db2' => 100 ) )
+ *     sectionLoads                A 2-d map. For each section, gives a map of server names to
+ *                                 load ratios. For example:
+ *                                 array(
+ *                                     'section1' => array(
+ *                                         'db1' => 100,
+ *                                         'db2' => 100
+ *                                     )
+ *                                 )
  *
- *     serverTemplate              A server info associative array as documented for $wgDBservers. The host,
- *                                 hostName and load entries will be overridden.
+ *     serverTemplate              A server info associative array as documented for $wgDBservers.
+ *                                 The host, hostName and load entries will be overridden.
  *
- *     groupLoadsBySection         A 3-d map giving server load ratios for each section and group. For example:
- *                                 array( 'section1' => array( 'group1' => array( 'db1' => 100, 'db2' => 100 ) ) )
+ *     groupLoadsBySection         A 3-d map giving server load ratios for each section and group.
+ *                                 For example:
+ *                                 array(
+ *                                     'section1' => array(
+ *                                         'group1' => array(
+ *                                             'db1' => 100,
+ *                                             'db2' => 100
+ *                                         )
+ *                                     )
+ *                                 )
  *
  *     groupLoadsByDB              A 3-d map giving server load ratios by DB name.
  *
  *
  *     externalLoads               A map of external storage cluster name to server load map
  *
- *     externalTemplateOverrides   A set of server info keys overriding serverTemplate for external storage
+ *     externalTemplateOverrides   A set of server info keys overriding serverTemplate for external
+ *                                 storage
  *
- *     templateOverridesByServer   A 2-d map overriding serverTemplate and externalTemplateOverrides on a
- *                                 server-by-server basis. Applies to both core and external storage.
+ *     templateOverridesByServer   A 2-d map overriding serverTemplate and
+ *                                 externalTemplateOverrides on a server-by-server basis. Applies
+ *                                 to both core and external storage.
  *
  *     templateOverridesByCluster  A 2-d map overriding the server info by external storage cluster
  *
  *     masterTemplateOverrides     An override array for all master servers.
  *
- *     readOnlyBySection           A map of section name to read-only message. Missing or false for read/write.
+ *     readOnlyBySection           A map of section name to read-only message.
+ *                                 Missing or false for read/write.
  *
  * @ingroup Database
  */
@@ -117,6 +134,7 @@ class LBFactory_Multi extends LBFactory {
                }
                $this->lastSection = $section;
                $this->lastWiki = $wiki;
+
                return $section;
        }
 
@@ -131,10 +149,16 @@ class LBFactory_Multi extends LBFactory {
                if ( isset( $this->groupLoadsByDB[$dbName] ) ) {
                        $groupLoads = $this->groupLoadsByDB[$dbName];
                }
+
                if ( isset( $this->groupLoadsBySection[$section] ) ) {
                        $groupLoads = array_merge_recursive( $groupLoads, $this->groupLoadsBySection[$section] );
                }
-               return $this->newLoadBalancer( $this->serverTemplate, $this->sectionLoads[$section], $groupLoads );
+
+               return $this->newLoadBalancer(
+                       $this->serverTemplate,
+                       $this->sectionLoads[$section],
+                       $groupLoads
+               );
        }
 
        /**
@@ -149,6 +173,7 @@ class LBFactory_Multi extends LBFactory {
                        $this->chronProt->initLB( $lb );
                        $this->mainLBs[$section] = $lb;
                }
+
                return $this->mainLBs[$section];
        }
 
@@ -169,6 +194,7 @@ class LBFactory_Multi extends LBFactory {
                if ( isset( $this->templateOverridesByCluster[$cluster] ) ) {
                        $template = $this->templateOverridesByCluster[$cluster] + $template;
                }
+
                return $this->newLoadBalancer( $template, $this->externalLoads[$cluster], array() );
        }
 
@@ -183,6 +209,7 @@ class LBFactory_Multi extends LBFactory {
                        $this->extLBs[$cluster]->parentInfo( array( 'id' => "ext-$cluster" ) );
                        $this->chronProt->initLB( $this->extLBs[$cluster] );
                }
+
                return $this->extLBs[$cluster];
        }
 
@@ -200,7 +227,8 @@ class LBFactory_Multi extends LBFactory {
                $lb = new LoadBalancer( array(
                        'servers' => $servers,
                        'masterWaitTimeout' => $wgMasterWaitTimeout
-               ));
+               ) );
+
                return $lb;
        }
 
@@ -245,6 +273,7 @@ class LBFactory_Multi extends LBFactory {
                        $serverInfo['load'] = $load;
                        $servers[] = $serverInfo;
                }
+
                return $servers;
        }
 
@@ -260,6 +289,7 @@ class LBFactory_Multi extends LBFactory {
                                $reindexed[$server][$group] = $load;
                        }
                }
+
                return $reindexed;
        }
 
@@ -271,6 +301,7 @@ class LBFactory_Multi extends LBFactory {
        function getDBNameAndPrefix( $wiki = false ) {
                if ( $wiki === false ) {
                        global $wgDBname, $wgDBprefix;
+
                        return array( $wgDBname, $wgDBprefix );
                } else {
                        return wfSplitWikiID( $wiki );
index 857109d..9967cc0 100644 (file)
@@ -101,6 +101,7 @@ class LoadBalancer {
                        $class = $this->mLoadMonitorClass;
                        $this->mLoadMonitor = new $class( $this );
                }
+
                return $this->mLoadMonitor;
        }
 
@@ -212,6 +213,7 @@ class LoadBalancer {
                                # No loads for this group, return false and the caller can use some other group
                                wfDebug( __METHOD__ . ": no loads for group $group\n" );
                                wfProfileOut( __METHOD__ );
+
                                return false;
                        }
                } else {
@@ -255,6 +257,7 @@ class LoadBalancer {
                                        # wants us to return false.
                                        wfDebugLog( 'connect', __METHOD__ . ": pickRandom() returned false\n" );
                                        wfProfileOut( __METHOD__ );
+
                                        return false;
                                }
 
@@ -329,6 +332,7 @@ class LoadBalancer {
                        }
                }
                wfProfileOut( __METHOD__ );
+
                return $i;
        }
 
@@ -342,6 +346,7 @@ class LoadBalancer {
                wfDebug( __METHOD__ . ": waiting $t us\n" );
                usleep( $t );
                wfProfileOut( __METHOD__ );
+
                return $t;
        }
 
@@ -372,8 +377,11 @@ class LoadBalancer {
        public function waitForAll( $pos ) {
                wfProfileIn( __METHOD__ );
                $this->mWaitForPos = $pos;
-               for ( $i = 1; $i < count( $this->mServers ); $i++ ) {
-                       $this->doWait( $i, true );
+               $serverCount = count( $this->mServers );
+               for ( $i = 1; $i < $serverCount; $i++ ) {
+                       if ( $this->mLoads[$i] > 0 ) {
+                               $this->doWait( $i, true );
+                       }
                }
                wfProfileOut( __METHOD__ );
        }
@@ -391,6 +399,7 @@ class LoadBalancer {
                                return reset( $conns[$i] );
                        }
                }
+
                return false;
        }
 
@@ -406,11 +415,13 @@ class LoadBalancer {
                if ( !$conn ) {
                        if ( !$open ) {
                                wfDebug( __METHOD__ . ": no connection open\n" );
+
                                return false;
                        } else {
                                $conn = $this->openConnection( $index, '' );
                                if ( !$conn ) {
                                        wfDebug( __METHOD__ . ": failed to open connection\n" );
+
                                        return false;
                                }
                        }
@@ -422,9 +433,11 @@ class LoadBalancer {
                if ( $result == -1 || is_null( $result ) ) {
                        # Timed out waiting for slave, use master instead
                        wfDebug( __METHOD__ . ": Timed out waiting for slave #$index pos {$this->mWaitForPos}\n" );
+
                        return false;
                } else {
                        wfDebug( __METHOD__ . ": Done\n" );
+
                        return true;
                }
        }
@@ -445,10 +458,12 @@ class LoadBalancer {
 
                if ( $i == DB_LAST ) {
                        wfProfileOut( __METHOD__ );
-                       throw new MWException( 'Attempt to call ' . __METHOD__ . ' with deprecated server index DB_LAST' );
+                       throw new MWException( 'Attempt to call ' . __METHOD__ .
+                               ' with deprecated server index DB_LAST' );
                } elseif ( $i === null || $i === false ) {
                        wfProfileOut( __METHOD__ );
-                       throw new MWException( 'Attempt to call ' . __METHOD__ . ' with invalid server index' );
+                       throw new MWException( 'Attempt to call ' . __METHOD__ .
+                               ' with invalid server index' );
                }
 
                if ( $wiki === wfWikiID() ) {
@@ -485,6 +500,7 @@ class LoadBalancer {
                        if ( $i === false ) {
                                $this->mLastError = 'No working slave server: ' . $this->mLastError;
                                wfProfileOut( __METHOD__ );
+
                                return $this->reportConnectionError();
                        }
                }
@@ -493,10 +509,12 @@ class LoadBalancer {
                $conn = $this->openConnection( $i, $wiki );
                if ( !$conn ) {
                        wfProfileOut( __METHOD__ );
+
                        return $this->reportConnectionError();
                }
 
                wfProfileOut( __METHOD__ );
+
                return $conn;
        }
 
@@ -520,6 +538,7 @@ class LoadBalancer {
                }
                if ( $serverIndex === null || $refCount === null ) {
                        wfDebug( __METHOD__ . ": this connection was not opened as a foreign connection\n" );
+
                        /**
                         * This can happen in code like:
                         *   foreach ( $dbs as $db ) {
@@ -530,10 +549,12 @@ class LoadBalancer {
                         * When a connection to the local DB is opened in this way, reuseConnection()
                         * should be ignored
                         */
+
                        return;
                }
                if ( $this->mConns['foreignUsed'][$serverIndex][$wiki] !== $conn ) {
-                       throw new MWException( __METHOD__ . ": connection not found, has the connection been freed already?" );
+                       throw new MWException( __METHOD__ . ": connection not found, has " .
+                               "the connection been freed already?" );
                }
                $conn->setLBInfo( 'foreignPoolRefCount', --$refCount );
                if ( $refCount <= 0 ) {
@@ -596,6 +617,7 @@ class LoadBalancer {
                if ( $wiki !== false ) {
                        $conn = $this->openForeignConnection( $i, $wiki );
                        wfProfileOut( __METHOD__ );
+
                        return $conn;
                }
                if ( isset( $this->mConns['local'][$i][0] ) ) {
@@ -614,6 +636,7 @@ class LoadBalancer {
                        }
                }
                wfProfileOut( __METHOD__ );
+
                return $conn;
        }
 
@@ -688,6 +711,7 @@ class LoadBalancer {
                        $conn->setLBInfo( 'foreignPoolRefCount', $refCount + 1 );
                }
                wfProfileOut( __METHOD__ );
+
                return $conn;
        }
 
@@ -702,6 +726,7 @@ class LoadBalancer {
                if ( !is_integer( $index ) ) {
                        return false;
                }
+
                return (bool)$this->getAnyOpenConnection( $index );
        }
 
@@ -741,6 +766,7 @@ class LoadBalancer {
                if ( isset( $server['fakeMaster'] ) ) {
                        $db->setFakeMaster( true );
                }
+
                return $db;
        }
 
@@ -762,6 +788,7 @@ class LoadBalancer {
                        wfLogDBError( "Connection error: {$this->mLastError} ({$server})\n" );
                        $conn->reportConnectionError( "{$this->mLastError} ({$server})" ); // throws DBConnectionError
                }
+
                return false; /* not reached */
        }
 
@@ -831,7 +858,8 @@ class LoadBalancer {
        }
 
        /**
-        * Sets the server info structure for the given index. Entry at index $i is created if it doesn't exist
+        * Sets the server info structure for the given index. Entry at index $i
+        * is created if it doesn't exist
         * @param $i
         * @param $serverInfo
         */
@@ -848,17 +876,21 @@ class LoadBalancer {
                # master (however unlikely that may be), then we can fetch the position from the slave.
                $masterConn = $this->getAnyOpenConnection( 0 );
                if ( !$masterConn ) {
-                       for ( $i = 1; $i < count( $this->mServers ); $i++ ) {
+                       $serverCount = count( $this->mServers );
+                       for ( $i = 1; $i < $serverCount; $i++ ) {
                                $conn = $this->getAnyOpenConnection( $i );
                                if ( $conn ) {
                                        wfDebug( "Master pos fetched from slave\n" );
+
                                        return $conn->getSlavePos();
                                }
                        }
                } else {
                        wfDebug( "Master pos fetched from master\n" );
+
                        return $masterConn->getMasterPos();
                }
+
                return false;
        }
 
@@ -974,6 +1006,7 @@ class LoadBalancer {
                        return $this->mAllowLagged;
                }
                $this->mAllowLagged = $mode;
+
                return $this->mAllowLagged;
        }
 
@@ -991,6 +1024,7 @@ class LoadBalancer {
                                }
                        }
                }
+
                return $success;
        }
 
@@ -1044,6 +1078,7 @@ class LoadBalancer {
                                }
                        }
                }
+
                return array( $host, $maxLag, $maxIndex );
        }
 
@@ -1068,6 +1103,7 @@ class LoadBalancer {
                        $this->mLagTimes = $this->getLoadMonitor()->getLagTimes(
                                array_keys( $this->mServers ), $wiki );
                }
+
                return $this->mLagTimes;
        }
 
@@ -1135,6 +1171,7 @@ class DBConnRef implements IDatabase {
                        list( $db, $groups, $wiki ) = $this->params;
                        $this->conn = $this->lb->getConnection( $db, $groups, $wiki );
                }
+
                return call_user_func_array( array( $this->conn, $name ), $arguments );
        }
 
index f10d07f..b293531 100644 (file)
@@ -154,6 +154,7 @@ class LoadMonitor_MySQL implements LoadMonitor {
                        if ( mt_rand( 0, $chance ) != 0 ) {
                                unset( $times['timestamp'] ); // hide from caller
                                wfProfileOut( __METHOD__ );
+
                                return $times;
                        }
                        wfIncrStats( 'lag_cache_miss_expired' );
@@ -164,13 +165,14 @@ class LoadMonitor_MySQL implements LoadMonitor {
                # Cache key missing or expired
                if ( $wgMemc->add( "$memcKey:lock", 1, 10 ) ) {
                        # Let this process alone update the cache value
-                       $unlocker = new ScopedCallback( function() use ( $wgMemc, $memcKey ) {
+                       $unlocker = new ScopedCallback( function () use ( $wgMemc, $memcKey ) {
                                $wgMemc->delete( $memcKey );
                        } );
                } elseif ( is_array( $times ) ) {
                        # Could not acquire lock but an old cache exists, so use it
                        unset( $times['timestamp'] ); // hide from caller
                        wfProfileOut( __METHOD__ );
+
                        return $times;
                }
 
@@ -191,6 +193,7 @@ class LoadMonitor_MySQL implements LoadMonitor {
                unset( $times['timestamp'] ); // hide from caller
 
                wfProfileOut( __METHOD__ );
+
                return $times;
        }
 
@@ -207,6 +210,7 @@ class LoadMonitor_MySQL implements LoadMonitor {
                if ( $status['Threads_running'] > $threshold ) {
                        $server = $conn->getProperty( 'mServer' );
                        wfLogDBError( "LB backoff from $server - Threads_running = {$status['Threads_running']}\n" );
+
                        return $status['Threads_connected'];
                } else {
                        return 0;
index 077eab0..e8104b6 100644 (file)
@@ -27,5 +27,4 @@
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 interface ORMIterator extends Iterator {
-
 }
index 160033c..e4efc01 100644 (file)
@@ -30,7 +30,6 @@
  */
 
 class ORMResult implements ORMIterator {
-
        /**
         * @var ResultWrapper
         */
@@ -119,5 +118,4 @@ class ORMResult implements ORMIterator {
        public function valid() {
                return $this->current !== false;
        }
-
 }
index 5ce3794..1d11202 100644 (file)
@@ -32,7 +32,6 @@
  */
 
 class ORMRow implements IORMRow {
-
        /**
         * The fields of the object.
         * field name (w/o prefix) => value
@@ -130,8 +129,10 @@ class ORMRow implements IORMRow {
 
                        if ( $result !== false ) {
                                $this->setFields( $this->table->getFieldsFromDBResult( $result ), $override );
+
                                return true;
                        }
+
                        return false;
                }
 
@@ -232,8 +233,7 @@ class ORMRow implements IORMRow {
         * @return boolean
         */
        public function hasIdField() {
-               return $this->hasField( 'id' )
-                       && !is_null( $this->getField( 'id' ) );
+               return $this->hasField( 'id' ) && !is_null( $this->getField( 'id' ) );
        }
 
        /**
@@ -252,7 +252,7 @@ class ORMRow implements IORMRow {
                                $value = $this->fields[$name];
 
                                // Skip null id fields so that the DBMS can set the default.
-                               if ( $name === 'id' && is_null ( $value ) ) {
+                               if ( $name === 'id' && is_null( $value ) ) {
                                        continue;
                                }
 
@@ -456,8 +456,9 @@ class ORMRow implements IORMRow {
 
        /**
         * Before removal of an object happens, @see beforeRemove gets called.
-        * This method loads the fields of which the names have been returned by this one (or all fields if null is returned).
-        * This allows for loading info needed after removal to get rid of linked data and the like.
+        * This method loads the fields of which the names have been returned by
+        * this one (or all fields if null is returned). This allows for loading
+        * info needed after removal to get rid of linked data and the like.
         *
         * @since 1.20
         *
@@ -552,7 +553,6 @@ class ORMRow implements IORMRow {
         * @param array|string|null $summaryFields
         */
        public function loadSummaryFields( $summaryFields = null ) {
-
        }
 
        /**
@@ -590,5 +590,4 @@ class ORMRow implements IORMRow {
        public function getTable() {
                return $this->table;
        }
-
 }
index 5f6723b..e47bc67 100644 (file)
@@ -29,7 +29,6 @@
  */
 
 class ORMTable extends DBAccessBase implements IORMTable {
-
        /**
         * Cache for instances, used by the singleton method.
         *
@@ -96,7 +95,9 @@ class ORMTable extends DBAccessBase implements IORMTable {
         * @param string|null $rowClass
         * @param string $fieldPrefix
         */
-       public function __construct( $tableName = '', array $fields = array(), array $defaults = array(), $rowClass = null, $fieldPrefix = '' ) {
+       public function __construct( $tableName = '', array $fields = array(),
+               array $defaults = array(), $rowClass = null, $fieldPrefix = ''
+       ) {
                $this->tableName = $tableName;
                $this->fields = $fields;
                $this->defaults = $defaults;
@@ -201,8 +202,10 @@ class ORMTable extends DBAccessBase implements IORMTable {
         * @return ORMResult
         */
        public function select( $fields = null, array $conditions = array(),
-                                                       array $options = array(), $functionName = null ) {
+               array $options = array(), $functionName = null
+       ) {
                $res = $this->rawSelect( $fields, $conditions, $options, $functionName );
+
                return new ORMResult( $this, $res );
        }
 
@@ -221,7 +224,8 @@ class ORMTable extends DBAccessBase implements IORMTable {
         * @throws DBQueryError if the query failed (even if the database was in ignoreErrors mode).
         */
        public function selectObjects( $fields = null, array $conditions = array(),
-                                                                  array $options = array(), $functionName = null ) {
+               array $options = array(), $functionName = null
+       ) {
                $result = $this->selectFields( $fields, $conditions, $options, false, $functionName );
 
                $objects = array();
@@ -239,19 +243,19 @@ class ORMTable extends DBAccessBase implements IORMTable {
         * @since 1.20
         *
         * @param null|string|array $fields
-        * @param array             $conditions
-        * @param array             $options
-        * @param null|string       $functionName
+        * @param array $conditions
+        * @param array $options
+        * @param null|string $functionName
         *
         * @return ResultWrapper
         * @throws DBQueryError if the quey failed (even if the database was in ignoreErrors mode).
         */
        public function rawSelect( $fields = null, array $conditions = array(),
-                                                          array $options = array(), $functionName = null ) {
+               array $options = array(), $functionName = null
+       ) {
                if ( is_null( $fields ) ) {
                        $fields = array_keys( $this->getFields() );
-               }
-               else {
+               } else {
                        $fields = (array)$fields;
                }
 
@@ -313,7 +317,8 @@ class ORMTable extends DBAccessBase implements IORMTable {
         * @return array of array
         */
        public function selectFields( $fields = null, array $conditions = array(),
-                                                                 array $options = array(), $collapse = true, $functionName = null ) {
+               array $options = array(), $collapse = true, $functionName = null
+       ) {
                $objects = array();
 
                $result = $this->rawSelect( $fields, $conditions, $options, $functionName );
@@ -325,8 +330,7 @@ class ORMTable extends DBAccessBase implements IORMTable {
                if ( $collapse ) {
                        if ( count( $fields ) === 1 ) {
                                $objects = array_map( 'array_shift', $objects );
-                       }
-                       elseif ( count( $fields ) === 2 ) {
+                       } elseif ( count( $fields ) === 2 ) {
                                $o = array();
 
                                foreach ( $objects as $object ) {
@@ -354,7 +358,8 @@ class ORMTable extends DBAccessBase implements IORMTable {
         * @return IORMRow|bool False on failure
         */
        public function selectRow( $fields = null, array $conditions = array(),
-                                                          array $options = array(), $functionName = null ) {
+               array $options = array(), $functionName = null
+       ) {
                $options['LIMIT'] = 1;
 
                $objects = $this->select( $fields, $conditions, $options, $functionName );
@@ -376,7 +381,8 @@ class ORMTable extends DBAccessBase implements IORMTable {
         * @return ResultWrapper
         */
        public function rawSelectRow( array $fields, array $conditions = array(),
-                                                                 array $options = array(), $functionName = null ) {
+               array $options = array(), $functionName = null
+       ) {
                $dbr = $this->getReadDbConnection();
 
                $result = $dbr->selectRow(
@@ -388,6 +394,7 @@ class ORMTable extends DBAccessBase implements IORMTable {
                );
 
                $this->releaseConnection( $dbr );
+
                return $result;
        }
 
@@ -409,7 +416,8 @@ class ORMTable extends DBAccessBase implements IORMTable {
         * @return mixed|array|bool False on failure
         */
        public function selectFieldsRow( $fields = null, array $conditions = array(),
-                                                                        array $options = array(), $collapse = true, $functionName = null ) {
+               array $options = array(), $collapse = true, $functionName = null
+       ) {
                $options['LIMIT'] = 1;
 
                $objects = $this->selectFields( $fields, $conditions, $options, $collapse, $functionName );
@@ -491,6 +499,7 @@ class ORMTable extends DBAccessBase implements IORMTable {
                ) !== false; // DatabaseBase::delete does not always return true for success as documented...
 
                $this->releaseConnection( $dbw );
+
                return $result;
        }
 
@@ -535,7 +544,9 @@ class ORMTable extends DBAccessBase implements IORMTable {
                        }
 
                        if ( $setDefaults && $hasDefault ) {
-                               $default = is_array( $defaults[$field] ) ? implode( '|', $defaults[$field] ) : $defaults[$field];
+                               $default = is_array( $defaults[$field] )
+                                       ? implode( '|', $defaults[$field] )
+                                       : $defaults[$field];
                                $params[$field][ApiBase::PARAM_DFLT] = $default;
                        }
                }
@@ -568,7 +579,8 @@ class ORMTable extends DBAccessBase implements IORMTable {
        }
 
        /**
-        * Set the database ID to use for read operations, use DB_XXX constants or an index to the load balancer setup.
+        * Set the database ID to use for read operations, use DB_XXX constants or
+        *   an index to the load balancer setup.
         *
         * @param integer $db
         *
@@ -583,7 +595,8 @@ class ORMTable extends DBAccessBase implements IORMTable {
         *
         * @since 1.20
         *
-        * @return String|bool The target wiki, in a form that  LBFactory understands (or false if the local wiki is used)
+        * @return String|bool The target wiki, in a form that LBFactory understands
+        *   (or false if the local wiki is used)
         */
        public function getTargetWiki() {
                return $this->wiki;
@@ -592,7 +605,8 @@ class ORMTable extends DBAccessBase implements IORMTable {
        /**
         * Set the ID of the any foreign wiki to use as a target for database operations
         *
-        * @param string|bool $wiki The target wiki, in a form that  LBFactory understands (or false if the local wiki shall be used)
+        * @param string|bool $wiki The target wiki, in a form that  LBFactory
+        *   understands (or false if the local wiki shall be used)
         *
         * @since 1.20
         */
@@ -638,9 +652,11 @@ class ORMTable extends DBAccessBase implements IORMTable {
         *
         * @since 1.20
         */
+       // @codingStandardsIgnoreStart Suppress "useless method overriding" sniffer warning
        public function releaseConnection( DatabaseBase $db ) {
                parent::releaseConnection( $db ); // just make it public
        }
+       // @codingStandardsIgnoreEnd
 
        /**
         * Update the records matching the provided conditions by
@@ -665,6 +681,7 @@ class ORMTable extends DBAccessBase implements IORMTable {
                ) !== false; // DatabaseBase::update does not always return true for success as documented...
 
                $this->releaseConnection( $dbw );
+
                return $result;
        }
 
@@ -711,8 +728,7 @@ class ORMTable extends DBAccessBase implements IORMTable {
                                if ( is_array( $value ) ) {
                                        $field = $value[0];
                                        $value = $value[1];
-                               }
-                               else {
+                               } else {
                                        $value = explode( ' ', $value, 2 );
                                        $value[0] = $this->getPrefixedField( $value[0] );
                                        $prefixedValues[] = implode( ' ', $value );
@@ -1103,5 +1119,4 @@ class ORMTable extends DBAccessBase implements IORMTable {
 
                return $success;
        }
-
 }
index 6e9ccc4..d0f8916 100644 (file)
@@ -31,7 +31,6 @@
  * @since 1.19
  */
 class MWDebug {
-
        /**
         * Log lines
         *
@@ -185,7 +184,9 @@ class MWDebug {
         *    MWDebug::deprecated() (Added in 1.20).
         * @return mixed
         */
-       public static function deprecated( $function, $version = false, $component = false, $callerOffset = 2 ) {
+       public static function deprecated( $function, $version = false,
+               $component = false, $callerOffset = 2
+       ) {
                $callerDescription = self::getCallerDescription( $callerOffset );
                $callerFunc = $callerDescription['func'];
 
@@ -227,7 +228,11 @@ class MWDebug {
 
                if ( $sendToLog ) {
                        global $wgDevelopmentWarnings; // we could have a more specific $wgDeprecationWarnings setting.
-                       self::sendWarning( $msg, $callerDescription, $wgDevelopmentWarnings ? E_USER_DEPRECATED : false );
+                       self::sendWarning(
+                               $msg,
+                               $callerDescription,
+                               $wgDevelopmentWarnings ? E_USER_DEPRECATED : false
+                       );
                }
 
                if ( self::$enabled ) {
@@ -445,10 +450,15 @@ class MWDebug {
                                $display = "\xc2\xa0";
                        }
 
-                       if ( !$ident && $diff < 0 && substr( $display, 0, 9 ) != 'Entering ' && substr( $display, 0, 8 ) != 'Exiting ' ) {
+                       if ( !$ident
+                               && $diff < 0
+                               && substr( $display, 0, 9 ) != 'Entering '
+                               && substr( $display, 0, 8 ) != 'Exiting '
+                       ) {
                                $ident = $curIdent;
                                $diff = 0;
-                               $display = '<span style="background:yellow;">' . nl2br( htmlspecialchars( $display ) ) . '</span>';
+                               $display = '<span style="background:yellow;">' .
+                                       nl2br( htmlspecialchars( $display ) ) . '</span>';
                        } else {
                                $display = nl2br( htmlspecialchars( $display ) );
                        }
@@ -460,7 +470,7 @@ class MWDebug {
                        } else {
                                $ret .= str_repeat( "<ul><li>\n", $diff );
                        }
-                       $ret .= "<tt>$display</tt>\n";
+                       $ret .= "<code>$display</code>\n";
 
                        $curIdent = $ident;
                }
@@ -517,6 +527,7 @@ class MWDebug {
 
                global $wgVersion, $wgRequestTime;
                $request = $context->getRequest();
+
                return array(
                        'mwVersion' => $wgVersion,
                        'phpVersion' => PHP_VERSION,
index 6eb5541..f0569dd 100644 (file)
@@ -4,14 +4,14 @@
  * Deferrable Update for closure/callback
  */
 class MWCallableUpdate implements DeferrableUpdate {
-
        /**
-        * @var closure/callabck
+        * @var closure/callback
         */
        private $callback;
 
        /**
         * @param callable $callback
+        * @throws MWException
         */
        public function __construct( $callback ) {
                if ( !is_callable( $callback ) ) {
@@ -26,5 +26,4 @@ class MWCallableUpdate implements DeferrableUpdate {
        public function doUpdate() {
                call_user_func( $this->callback );
        }
-
 }
index 7b9ac28..986a1f7 100644 (file)
@@ -30,7 +30,6 @@
  *        subclasses can override the beginTransaction() and commitTransaction() methods.
  */
 abstract class DataUpdate implements DeferrableUpdate {
-
        /**
         * Constructor
         */
@@ -122,5 +121,4 @@ abstract class DataUpdate implements DeferrableUpdate {
                        throw $exception; // rethrow after cleanup
                }
        }
-
 }
index c385f13..5cf0d2b 100644 (file)
@@ -46,7 +46,7 @@ class DeferredUpdates {
 
        /**
         * Add an update to the deferred list
-        * @param $update DeferrableUpdate Some object that implements doUpdate()
+        * @param DeferrableUpdate $update Some object that implements doUpdate()
         */
        public static function addUpdate( DeferrableUpdate $update ) {
                array_push( self::$updates, $update );
@@ -56,8 +56,8 @@ class DeferredUpdates {
         * HTMLCacheUpdates are the most common deferred update people use. This
         * is a shortcut method for that.
         * @see HTMLCacheUpdate::__construct()
-        * @param $title
-        * @param $table
+        * @param Title $title
+        * @param string $table
         */
        public static function addHTMLCacheUpdate( $title, $table ) {
                self::addUpdate( new HTMLCacheUpdate( $title, $table ) );
@@ -77,7 +77,7 @@ class DeferredUpdates {
         * Do any deferred updates and clear the list
         *
         * @param string $commit set to 'commit' to commit after every update to
-        *                prevent lock contention
+        *   prevent lock contention
         */
        public static function doUpdates( $commit = '' ) {
                global $wgDeferredUpdateList;
@@ -89,14 +89,17 @@ class DeferredUpdates {
                // No need to get master connections in case of empty updates array
                if ( !count( $updates ) ) {
                        wfProfileOut( __METHOD__ );
+
                        return;
                }
 
+               $dbw = false;
                $doCommit = $commit == 'commit';
                if ( $doCommit ) {
                        $dbw = wfGetDB( DB_MASTER );
                }
 
+               /** @var DeferrableUpdate $update */
                foreach ( $updates as $update ) {
                        try {
                                $update->doUpdate();
index 4147424..0713a05 100644 (file)
  * @ingroup Cache
  */
 class HTMLCacheUpdate implements DeferrableUpdate {
-       /**
-        * @var Title
-        */
+       /** @var Title */
        public $mTitle;
 
+       /** @var string */
        public $mTable;
 
        /**
-        * @param $titleTo
-        * @param $table
+        * @param Title $titleTo
+        * @param string $table
         */
        function __construct( Title $titleTo, $table ) {
                $this->mTitle = $titleTo;
@@ -61,7 +60,7 @@ class HTMLCacheUpdate implements DeferrableUpdate {
                        JobQueueGroup::singleton()->deduplicateRootJob( $job );
                } else { // few backlinks ($count might be off even if 0)
                        $dbw = wfGetDB( DB_MASTER );
-                       $dbw->onTransactionIdle( function() use ( $job ) {
+                       $dbw->onTransactionIdle( function () use ( $job ) {
                                $job->run(); // just do the purge query now
                        } );
                }
index fdd0e3c..a3f180c 100644 (file)
  * @todo document (e.g. one-sentence top-level class description).
  */
 class LinksUpdate extends SqlDataUpdate {
-
        // @todo make members protected, but make sure extensions don't break
 
-       public $mId,         //!< Page ID of the article linked from
-               $mTitle,         //!< Title object of the article linked from
-               $mParserOutput,  //!< Parser output
-               $mLinks,         //!< Map of title strings to IDs for the links in the document
-               $mImages,        //!< DB keys of the images used, in the array key only
-               $mTemplates,     //!< Map of title strings to IDs for the template references, including broken ones
-               $mExternals,     //!< URLs of external links, array key only
-               $mCategories,    //!< Map of category names to sort keys
-               $mInterlangs,    //!< Map of language codes to titles
-               $mProperties,    //!< Map of arbitrary name to value
-               $mDb,            //!< Database connection reference
-               $mOptions,       //!< SELECT options to be used (array)
-               $mRecursive;     //!< Whether to queue jobs for recursive updates
+       /** @var int Page ID of the article linked from */
+       public $mId;
+
+       /** @var Title object of the article linked from */
+       public $mTitle;
+
+       /** @var ParserOutput */
+       public $mParserOutput;
+
+       /** @var array Map of title strings to IDs for the links in the document */
+       public $mLinks;
+
+       /** @var array DB keys of the images used, in the array key only */
+       public $mImages;
+
+       /** @var array Map of title strings to IDs for the template references, including broken ones */
+       public $mTemplates;
+
+       /** @var array URLs of external links, array key only */
+       public $mExternals;
+
+       /** @var array Map of category names to sort keys */
+       public $mCategories;
+
+       /** @var array ap of language codes to titles */
+       public $mInterlangs;
+
+       /** @var array Map of arbitrary name to value */
+       public $mProperties;
+
+       /** @var DatabaseBase Database connection reference */
+       public $mDb;
+
+       /** @var array SELECT options to be used */
+       public $mOptions;
+
+       /** @var bool Whether to queue jobs for recursive updates */
+       public $mRecursive;
 
        /**
         * @var null|array Added links if calculated.
@@ -56,9 +80,9 @@ class LinksUpdate extends SqlDataUpdate {
        /**
         * Constructor
         *
-        * @param $title Title of the page we're updating
-        * @param $parserOutput ParserOutput: output from a full parse of this page
-        * @param $recursive Boolean: queue jobs for recursive updates?
+        * @param Title $title Title of the page we're updating
+        * @param ParserOutput $parserOutput Output from a full parse of this page
+        * @param bool $recursive Queue jobs for recursive updates?
         * @throws MWException
         */
        function __construct( $title, $parserOutput, $recursive = true ) {
@@ -78,7 +102,8 @@ class LinksUpdate extends SqlDataUpdate {
                $this->mId = $title->getArticleID();
 
                if ( !$this->mId ) {
-                       throw new MWException( "The Title object did not provide an article ID. Perhaps the page doesn't exist?" );
+                       throw new MWException( "The Title object did not provide an article " .
+                               "ID. Perhaps the page doesn't exist?" );
                }
 
                $this->mParserOutput = $parserOutput;
@@ -216,7 +241,7 @@ class LinksUpdate extends SqlDataUpdate {
         * Queue a RefreshLinks job for any table.
         *
         * @param Title $title Title to do job for
-        * @param String $table Table to use (e.g. 'templatelinks')
+        * @param string $table Table to use (e.g. 'templatelinks')
         */
        public static function queueRecursiveJobsForTable( Title $title, $table ) {
                wfProfileIn( __METHOD__ );
@@ -244,8 +269,8 @@ class LinksUpdate extends SqlDataUpdate {
 
        /**
         * Update all the appropriate counts in the category table.
-        * @param array $added associative array of category name => sort key
-        * @param array $deleted associative array of category name => sort key
+        * @param array $added Associative array of category name => sort key
+        * @param array $deleted Associative array of category name => sort key
         */
        function updateCategoryCounts( $added, $deleted ) {
                $a = WikiPage::factory( $this->mTitle );
@@ -263,10 +288,10 @@ class LinksUpdate extends SqlDataUpdate {
 
        /**
         * Update a table by doing a delete query then an insert query
-        * @param $table
-        * @param $prefix
-        * @param $deletions
-        * @param $insertions
+        * @param string $table Table name
+        * @param string $prefix Field name prefix
+        * @param array $deletions
+        * @param array $insertions Rows to insert
         */
        function incrTableUpdate( $table, $prefix, $deletions, $insertions ) {
                if ( $table == 'page_props' ) {
@@ -313,7 +338,7 @@ class LinksUpdate extends SqlDataUpdate {
        /**
         * Get an array of pagelinks insertions for passing to the DB
         * Skips the titles specified by the 2-D array $existing
-        * @param $existing array
+        * @param array $existing
         * @return array
         */
        private function getLinkInsertions( $existing = array() ) {
@@ -330,12 +355,13 @@ class LinksUpdate extends SqlDataUpdate {
                                );
                        }
                }
+
                return $arr;
        }
 
        /**
         * Get an array of template insertions. Like getLinkInsertions()
-        * @param $existing array
+        * @param array $existing
         * @return array
         */
        private function getTemplateInsertions( $existing = array() ) {
@@ -350,13 +376,14 @@ class LinksUpdate extends SqlDataUpdate {
                                );
                        }
                }
+
                return $arr;
        }
 
        /**
         * Get an array of image insertions
         * Skips the names specified in $existing
-        * @param $existing array
+        * @param array $existing
         * @return array
         */
        private function getImageInsertions( $existing = array() ) {
@@ -368,12 +395,13 @@ class LinksUpdate extends SqlDataUpdate {
                                'il_to' => $iname
                        );
                }
+
                return $arr;
        }
 
        /**
         * Get an array of externallinks insertions. Skips the names specified in $existing
-        * @param $existing array
+        * @param array $existing
         * @return array
         */
        private function getExternalInsertions( $existing = array() ) {
@@ -388,6 +416,7 @@ class LinksUpdate extends SqlDataUpdate {
                                );
                        }
                }
+
                return $arr;
        }
 
@@ -432,6 +461,7 @@ class LinksUpdate extends SqlDataUpdate {
                                'cl_type' => $type,
                        );
                }
+
                return $arr;
        }
 
@@ -452,12 +482,13 @@ class LinksUpdate extends SqlDataUpdate {
                                'll_title' => $title
                        );
                }
+
                return $arr;
        }
 
        /**
         * Get an array of page property insertions
-        * @param $existing array
+        * @param array $existing
         * @return array
         */
        function getPropertyInsertions( $existing = array() ) {
@@ -470,19 +501,23 @@ class LinksUpdate extends SqlDataUpdate {
                                'pp_value' => $value,
                        );
                }
+
                return $arr;
        }
 
        /**
         * Get an array of interwiki insertions for passing to the DB
         * Skips the titles specified by the 2-D array $existing
-        * @param $existing array
+        * @param array $existing
         * @return array
         */
        private function getInterwikiInsertions( $existing = array() ) {
                $arr = array();
                foreach ( $this->mInterwikis as $prefix => $dbkeys ) {
-                       $diffs = isset( $existing[$prefix] ) ? array_diff_key( $dbkeys, $existing[$prefix] ) : $dbkeys;
+                       $diffs = isset( $existing[$prefix] )
+                               ? array_diff_key( $dbkeys, $existing[$prefix] )
+                               : $dbkeys;
+
                        foreach ( $diffs as $dbk => $id ) {
                                $arr[] = array(
                                        'iwl_from' => $this->mId,
@@ -491,13 +526,14 @@ class LinksUpdate extends SqlDataUpdate {
                                );
                        }
                }
+
                return $arr;
        }
 
        /**
         * Given an array of existing links, returns those links which are not in $this
         * and thus should be deleted.
-        * @param $existing array
+        * @param array $existing
         * @return array
         */
        private function getLinkDeletions( $existing ) {
@@ -509,13 +545,14 @@ class LinksUpdate extends SqlDataUpdate {
                                $del[$ns] = $existing[$ns];
                        }
                }
+
                return $del;
        }
 
        /**
         * Given an array of existing templates, returns those templates which are not in $this
         * and thus should be deleted.
-        * @param $existing array
+        * @param array $existing
         * @return array
         */
        private function getTemplateDeletions( $existing ) {
@@ -527,13 +564,14 @@ class LinksUpdate extends SqlDataUpdate {
                                $del[$ns] = $existing[$ns];
                        }
                }
+
                return $del;
        }
 
        /**
         * Given an array of existing images, returns those images which are not in $this
         * and thus should be deleted.
-        * @param $existing array
+        * @param array $existing
         * @return array
         */
        private function getImageDeletions( $existing ) {
@@ -543,7 +581,7 @@ class LinksUpdate extends SqlDataUpdate {
        /**
         * Given an array of existing external links, returns those links which are not
         * in $this and thus should be deleted.
-        * @param $existing array
+        * @param array $existing
         * @return array
         */
        private function getExternalDeletions( $existing ) {
@@ -553,7 +591,7 @@ class LinksUpdate extends SqlDataUpdate {
        /**
         * Given an array of existing categories, returns those categories which are not in $this
         * and thus should be deleted.
-        * @param $existing array
+        * @param array $existing
         * @return array
         */
        private function getCategoryDeletions( $existing ) {
@@ -563,7 +601,7 @@ class LinksUpdate extends SqlDataUpdate {
        /**
         * Given an array of existing interlanguage links, returns those links which are not
         * in $this and thus should be deleted.
-        * @param $existing array
+        * @param array $existing
         * @return array
         */
        private function getInterlangDeletions( $existing ) {
@@ -572,7 +610,7 @@ class LinksUpdate extends SqlDataUpdate {
 
        /**
         * Get array of properties which should be deleted.
-        * @param $existing array
+        * @param array $existing
         * @return array
         */
        function getPropertyDeletions( $existing ) {
@@ -582,7 +620,7 @@ class LinksUpdate extends SqlDataUpdate {
        /**
         * Given an array of existing interwiki links, returns those links which are not in $this
         * and thus should be deleted.
-        * @param $existing array
+        * @param array $existing
         * @return array
         */
        private function getInterwikiDeletions( $existing ) {
@@ -594,6 +632,7 @@ class LinksUpdate extends SqlDataUpdate {
                                $del[$prefix] = $existing[$prefix];
                        }
                }
+
                return $del;
        }
 
@@ -612,6 +651,7 @@ class LinksUpdate extends SqlDataUpdate {
                        }
                        $arr[$row->pl_namespace][$row->pl_title] = 1;
                }
+
                return $arr;
        }
 
@@ -630,6 +670,7 @@ class LinksUpdate extends SqlDataUpdate {
                        }
                        $arr[$row->tl_namespace][$row->tl_title] = 1;
                }
+
                return $arr;
        }
 
@@ -645,6 +686,7 @@ class LinksUpdate extends SqlDataUpdate {
                foreach ( $res as $row ) {
                        $arr[$row->il_to] = 1;
                }
+
                return $arr;
        }
 
@@ -660,6 +702,7 @@ class LinksUpdate extends SqlDataUpdate {
                foreach ( $res as $row ) {
                        $arr[$row->el_to] = 1;
                }
+
                return $arr;
        }
 
@@ -675,6 +718,7 @@ class LinksUpdate extends SqlDataUpdate {
                foreach ( $res as $row ) {
                        $arr[$row->cl_to] = $row->cl_sortkey_prefix;
                }
+
                return $arr;
        }
 
@@ -691,6 +735,7 @@ class LinksUpdate extends SqlDataUpdate {
                foreach ( $res as $row ) {
                        $arr[$row->ll_lang] = $row->ll_title;
                }
+
                return $arr;
        }
 
@@ -708,13 +753,14 @@ class LinksUpdate extends SqlDataUpdate {
                        }
                        $arr[$row->iwl_prefix][$row->iwl_title] = 1;
                }
+
                return $arr;
        }
 
        /**
         * Get an array of existing categories, with the name in the key and sort key in the value.
         *
-        * @return array
+        * @return array of property names and values
         */
        private function getExistingProperties() {
                $res = $this->mDb->select( 'page_props', array( 'pp_propname', 'pp_value' ),
@@ -723,6 +769,7 @@ class LinksUpdate extends SqlDataUpdate {
                foreach ( $res as $row ) {
                        $arr[$row->pp_propname] = $row->pp_value;
                }
+
                return $arr;
        }
 
@@ -753,7 +800,7 @@ class LinksUpdate extends SqlDataUpdate {
 
        /**
         * Invalidate any necessary link lists related to page property changes
-        * @param $changed
+        * @param array $changed
         */
        private function invalidateProperties( $changed ) {
                global $wgPagePropLinkInvalidations;
@@ -783,8 +830,9 @@ class LinksUpdate extends SqlDataUpdate {
                }
                $result = array();
                foreach ( $this->linkInsertions as $insertion ) {
-                       $result[] = Title::makeTitle( $insertion[ 'pl_namespace' ], $insertion[ 'pl_title' ] );
+                       $result[] = Title::makeTitle( $insertion['pl_namespace'], $insertion['pl_title'] );
                }
+
                return $result;
        }
 
@@ -803,6 +851,7 @@ class LinksUpdate extends SqlDataUpdate {
                                $result[] = Title::makeTitle( $ns, $title );
                        }
                }
+
                return $result;
        }
 }
@@ -811,13 +860,13 @@ class LinksUpdate extends SqlDataUpdate {
  * Update object handling the cleanup of links tables after a page was deleted.
  **/
 class LinksDeletionUpdate extends SqlDataUpdate {
-
-       protected $mPage;     //!< WikiPage the wikipage that was deleted
+       /** @var WikiPage The WikiPage that was deleted */
+       protected $mPage;
 
        /**
         * Constructor
         *
-        * @param $page WikiPage Page we are updating
+        * @param WikiPage $page Page we are updating
         * @throws MWException
         */
        function __construct( WikiPage $page ) {
@@ -880,8 +929,8 @@ class LinksDeletionUpdate extends SqlDataUpdate {
 
        /**
         * Update all the appropriate counts in the category table.
-        * @param array $added associative array of category name => sort key
-        * @param array $deleted associative array of category name => sort key
+        * @param array $added Associative array of category name => sort key
+        * @param array $deleted Associative array of category name => sort key
         */
        function updateCategoryCounts( $added, $deleted ) {
                $a = WikiPage::factory( $this->mTitle );
index 82a413e..7ca4158 100644 (file)
  * @ingroup Search
  */
 class SearchUpdate implements DeferrableUpdate {
-       /**
-        * Page id being updated
-        * @var int
-        */
+       /** @var int Page id being updated */
        private $id = 0;
 
-       /**
-        * Title we're updating
-        * @var Title
-        */
+       /** @var Title Title we're updating */
        private $title;
 
-       /**
-        * Content of the page (not text)
-        * @var Content|false
-        */
+       /** @var Content|false Content of the page (not text) */
        private $content;
 
        /**
@@ -52,7 +43,7 @@ class SearchUpdate implements DeferrableUpdate {
         *
         * @param int $id Page id to update
         * @param Title|string $title Title of page to update
-        * @param Content|string|false $c Content of the page to update.
+        * @param Content|string|bool $c Content of the page to update. Default: false.
         *  If a Content object, text will be gotten from it. String is for back-compat.
         *  Passing false tells the backend to just update the title, not the content
         */
@@ -180,6 +171,7 @@ class SearchUpdate implements DeferrableUpdate {
                # Strip wiki '' and '''
                $text = preg_replace( "/''[']*/", " ", $text );
                wfProfileOut( __METHOD__ . '-regexps' );
+
                return $text;
        }
 }
index 09ff87d..7bfafee 100644 (file)
  * Class for handling updates to the site_stats table
  */
 class SiteStatsUpdate implements DeferrableUpdate {
+       /** @var int */
        protected $views = 0;
+
+       /** @var int */
        protected $edits = 0;
+
+       /** @var int */
        protected $pages = 0;
+
+       /** @var int */
        protected $articles = 0;
+
+       /** @var int */
        protected $users = 0;
+
+       /** @var int */
        protected $images = 0;
 
        // @todo deprecate this constructor
@@ -39,7 +50,7 @@ class SiteStatsUpdate implements DeferrableUpdate {
        }
 
        /**
-        * @param $deltas Array
+        * @param array $deltas
         * @return SiteStatsUpdate
         */
        public static function factory( array $deltas ) {
@@ -71,20 +82,20 @@ class SiteStatsUpdate implements DeferrableUpdate {
 
        /**
         * Do not call this outside of SiteStatsUpdate
-        *
-        * @return void
         */
        public function tryDBUpdateInternal() {
                global $wgSiteStatsAsyncFactor;
 
                $dbw = wfGetDB( DB_MASTER );
                $lockKey = wfMemcKey( 'site_stats' ); // prepend wiki ID
+               $pd = array();
                if ( $wgSiteStatsAsyncFactor ) {
                        // Lock the table so we don't have double DB/memcached updates
                        if ( !$dbw->lockIsFree( $lockKey, __METHOD__ )
                                || !$dbw->lock( $lockKey, __METHOD__, 1 ) // 1 sec timeout
                        ) {
                                $this->doUpdatePendingDeltas();
+
                                return;
                        }
                        $pd = $this->getPendingDeltas();
@@ -118,7 +129,7 @@ class SiteStatsUpdate implements DeferrableUpdate {
        }
 
        /**
-        * @param $dbw DatabaseBase
+        * @param DatabaseBase $dbw
         * @return bool|mixed
         */
        public static function cacheUpdate( $dbw ) {
@@ -133,7 +144,8 @@ class SiteStatsUpdate implements DeferrableUpdate {
                                'rc_user != 0',
                                'rc_bot' => 0,
                                'rc_log_type != ' . $dbr->addQuotes( 'newusers' ) . ' OR rc_log_type IS NULL',
-                               'rc_timestamp >= ' . $dbr->addQuotes( $dbr->timestamp( wfTimestamp( TS_UNIX ) - $wgActiveUserDays * 24 * 3600 ) ),
+                               'rc_timestamp >= ' . $dbr->addQuotes( $dbr->timestamp( wfTimestamp( TS_UNIX )
+                                       - $wgActiveUserDays * 24 * 3600 ) ),
                        ),
                        __METHOD__
                );
@@ -143,6 +155,7 @@ class SiteStatsUpdate implements DeferrableUpdate {
                        array( 'ss_row_id' => 1 ),
                        __METHOD__
                );
+
                return $activeUsers;
        }
 
@@ -156,9 +169,9 @@ class SiteStatsUpdate implements DeferrableUpdate {
        }
 
        /**
-        * @param $sql string
-        * @param $field string
-        * @param $delta integer
+        * @param string $sql
+        * @param string $field
+        * @param int $delta
         */
        protected function appendUpdate( &$sql, $field, $delta ) {
                if ( $delta ) {
@@ -174,7 +187,7 @@ class SiteStatsUpdate implements DeferrableUpdate {
        }
 
        /**
-        * @param $type string
+        * @param string $type
         * @param string $sign ('+' or '-')
         * @return string
         */
@@ -185,9 +198,8 @@ class SiteStatsUpdate implements DeferrableUpdate {
        /**
         * Adjust the pending deltas for a stat type.
         * Each stat type has two pending counters, one for increments and decrements
-        * @param $type string
-        * @param $delta integer Delta (positive or negative)
-        * @return void
+        * @param string $type
+        * @param int $delta Delta (positive or negative)
         */
        protected function adjustPending( $type, $delta ) {
                global $wgMemc;
@@ -208,16 +220,15 @@ class SiteStatsUpdate implements DeferrableUpdate {
 
        /**
         * Get pending delta counters for each stat type
-        * @return Array Positive and negative deltas for each type
-        * @return void
+        * @return array Positive and negative deltas for each type
         */
        protected function getPendingDeltas() {
                global $wgMemc;
 
                $pending = array();
                foreach ( array( 'ss_total_views', 'ss_total_edits',
-                       'ss_good_articles', 'ss_total_pages', 'ss_users', 'ss_images' ) as $type )
-               {
+                       'ss_good_articles', 'ss_total_pages', 'ss_users', 'ss_images' ) as $type
+               {
                        // Get pending increments and pending decrements
                        $pending[$type]['+'] = (int)$wgMemc->get( $this->getTypeCacheKey( $type, '+' ) );
                        $pending[$type]['-'] = (int)$wgMemc->get( $this->getTypeCacheKey( $type, '-' ) );
@@ -229,7 +240,6 @@ class SiteStatsUpdate implements DeferrableUpdate {
        /**
         * Reduce pending delta counters after updates have been applied
         * @param array $pd Result of getPendingDeltas(), used for DB update
-        * @return void
         */
        protected function removePendingDeltas( array $pd ) {
                global $wgMemc;
@@ -242,4 +252,3 @@ class SiteStatsUpdate implements DeferrableUpdate {
                }
        }
 }
-
index 51188d8..09d18c4 100644 (file)
  *        the beginTransaction() and commitTransaction() methods.
  */
 abstract class SqlDataUpdate extends DataUpdate {
+       /** @var DatabaseBase Database connection reference */
+       protected $mDb;
 
-       protected $mDb;            //!< Database connection reference
-       protected $mOptions;       //!< SELECT options to be used (array)
+       /** @var array SELECT options to be used (array) */
+       protected $mOptions;
 
-       private   $mHasTransaction; //!< bool whether a transaction is open on this object (internal use only!)
-       protected $mUseTransaction; //!< bool whether this update should be wrapped in a transaction
+       /** @var bool Whether a transaction is open on this object (internal use only!) */
+       private $mHasTransaction;
+
+       /** @var  bool Whether this update should be wrapped in a transaction */
+       protected $mUseTransaction;
 
        /**
         * Constructor
         *
-        * @param bool $withTransaction whether this update should be wrapped in a transaction (default: true).
-        *             A transaction is only started if no transaction is already in progress,
-        *             see beginTransaction() for details.
-        **/
+        * @param bool $withTransaction whether this update should be wrapped in a
+        *   transaction (default: true). A transaction is only started if no
+        *   transaction is already in progress, see beginTransaction() for details.
+        */
        public function __construct( $withTransaction = true ) {
                global $wgAntiLockFlags;
 
@@ -56,7 +61,8 @@ abstract class SqlDataUpdate extends DataUpdate {
                        $this->mOptions = array( 'FOR UPDATE' );
                }
 
-               // @todo get connection only when it's needed? make sure that doesn't break anything, especially transactions!
+               // @todo Get connection only when it's needed? Make sure that doesn't
+               // break anything, especially transactions!
                $this->mDb = wfGetDB( DB_MASTER );
 
                $this->mWithTransaction = $withTransaction;
@@ -64,10 +70,12 @@ abstract class SqlDataUpdate extends DataUpdate {
        }
 
        /**
-        * Begin a database transaction, if $withTransaction was given as true in the constructor for this SqlDataUpdate.
+        * Begin a database transaction, if $withTransaction was given as true in
+        * the constructor for this SqlDataUpdate.
         *
-        * Because nested transactions are not supported by the Database class, this implementation
-        * checks Database::trxLevel() and only opens a transaction if none is already active.
+        * Because nested transactions are not supported by the Database class,
+        * this implementation checks Database::trxLevel() and only opens a
+        * transaction if none is already active.
         */
        public function beginTransaction() {
                if ( !$this->mWithTransaction ) {
@@ -105,8 +113,8 @@ abstract class SqlDataUpdate extends DataUpdate {
         * Invalidate the cache of a list of pages from a single namespace.
         * This is intended for use by subclasses.
         *
-        * @param $namespace Integer
-        * @param $dbkeys Array
+        * @param int $namespace Namespace number
+        * @param array $dbkeys
         */
        protected function invalidatePages( $namespace, array $dbkeys ) {
                if ( $dbkeys === array() ) {
@@ -148,5 +156,4 @@ abstract class SqlDataUpdate extends DataUpdate {
                        ), __METHOD__
                );
        }
-
 }
index 71afeba..bac9f10 100644 (file)
@@ -26,7 +26,6 @@
  * @ingroup Cache
  */
 class SquidUpdate {
-
        /**
         * Collection of URLs to purge.
         * @var array
@@ -83,6 +82,7 @@ class SquidUpdate {
                }
 
                wfProfileOut( __METHOD__ );
+
                return new SquidUpdate( $blurlArr );
        }
 
@@ -96,12 +96,14 @@ class SquidUpdate {
        public static function newFromTitles( $titles, $urlArr = array() ) {
                global $wgMaxSquidPurgeTitles;
                $i = 0;
+               /** @var Title $title */
                foreach ( $titles as $title ) {
                        $urlArr[] = $title->getInternalURL();
                        if ( $i++ > $wgMaxSquidPurgeTitles ) {
                                break;
                        }
                }
+
                return new SquidUpdate( $urlArr );
        }
 
@@ -111,6 +113,7 @@ class SquidUpdate {
         */
        public static function newSimplePurge( Title $title ) {
                $urlArr = $title->getSquidURLs();
+
                return new SquidUpdate( $urlArr );
        }
 
@@ -194,11 +197,12 @@ class SquidUpdate {
 
                // pfsockopen doesn't work because we need set_sock_opt
                $conn = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
-               if ( ! $conn ) {
+               if ( !$conn ) {
                        $errstr = socket_strerror( socket_last_error() );
                        wfDebugLog( 'squid', __METHOD__ .
                                ": Error opening UDP socket: $errstr\n" );
                        wfProfileOut( __METHOD__ );
+
                        return;
                }
 
@@ -295,6 +299,7 @@ class SquidUpdate {
                                return $routing;
                        }
                }
+
                return false;
        }
 }
index 22a4649..ddd2e09 100644 (file)
  * from that table to update the 'page_counter' field in a batch operation.
  */
 class ViewCountUpdate implements DeferrableUpdate {
+       /** @var int Page ID to increment the view count */
        protected $id;
 
        /**
         * Constructor
         *
-        * @param $id Integer: page ID to increment the view count
+        * @param int $id Page ID to increment the view count
         */
        public function __construct( $id ) {
                $this->id = intval( $id );
@@ -48,7 +49,12 @@ class ViewCountUpdate implements DeferrableUpdate {
                $dbw = wfGetDB( DB_MASTER );
 
                if ( $wgHitcounterUpdateFreq <= 1 || $dbw->getType() == 'sqlite' ) {
-                       $dbw->update( 'page', array( 'page_counter = page_counter + 1' ), array( 'page_id' => $this->id ), __METHOD__ );
+                       $dbw->update(
+                               'page', array( 'page_counter = page_counter + 1' ),
+                               array( 'page_id' => $this->id ),
+                               __METHOD__
+                       );
+
                        return;
                }
 
@@ -59,7 +65,8 @@ class ViewCountUpdate implements DeferrableUpdate {
                        if ( rand() % $checkfreq == 0 && $dbw->lastErrno() == 0 ) {
                                $this->collect();
                        }
-               } catch ( DBError $e ) {}
+               } catch ( DBError $e ) {
+               }
        }
 
        protected function collect() {
diff --git a/includes/diff/ArrayDiffFormatter.php b/includes/diff/ArrayDiffFormatter.php
new file mode 100644 (file)
index 0000000..331ce7d
--- /dev/null
@@ -0,0 +1,79 @@
+<?php
+/**
+ * Portions taken from phpwiki-1.3.3.
+ *
+ * Copyright © 2000, 2001 Geoffrey T. Dairiki <dairiki@dairiki.org>
+ * You may copy this code freely under the conditions of the GPL.
+ *
+ * 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 DifferenceEngine
+ */
+
+/**
+ * A pseudo-formatter that just passes along the Diff::$edits array
+ * @ingroup DifferenceEngine
+ */
+class ArrayDiffFormatter extends DiffFormatter {
+       /**
+        * @param $diff
+        * @return array
+        */
+       public function format( $diff ) {
+               $oldline = 1;
+               $newline = 1;
+               $retval = array();
+               foreach ( $diff->edits as $edit ) {
+                       switch ( $edit->type ) {
+                               case 'add':
+                                       foreach ( $edit->closing as $l ) {
+                                               $retval[] = array(
+                                                       'action' => 'add',
+                                                       'new' => $l,
+                                                       'newline' => $newline++
+                                               );
+                                       }
+                                       break;
+                               case 'delete':
+                                       foreach ( $edit->orig as $l ) {
+                                               $retval[] = array(
+                                                       'action' => 'delete',
+                                                       'old' => $l,
+                                                       'oldline' => $oldline++,
+                                               );
+                                       }
+                                       break;
+                               case 'change':
+                                       foreach ( $edit->orig as $i => $l ) {
+                                               $retval[] = array(
+                                                       'action' => 'change',
+                                                       'old' => $l,
+                                                       'new' => isset( $edit->closing[$i] ) ? $edit->closing[$i] : null,
+                                                       'oldline' => $oldline++,
+                                                       'newline' => $newline++,
+                                               );
+                                       }
+                                       break;
+                               case 'copy':
+                                       $oldline += count( $edit->orig );
+                                       $newline += count( $edit->orig );
+                       }
+               }
+
+               return $retval;
+       }
+}
index 298d724..f80a4ad 100644 (file)
  * @private
  * @ingroup DifferenceEngine
  */
-class _DiffOp {
-       var $type;
-       var $orig;
-       var $closing;
+abstract class DiffOp {
+       public $type;
+       public $orig;
+       public $closing;
 
-       function reverse() {
-               trigger_error( 'pure virtual', E_USER_ERROR );
-       }
+       abstract public function reverse();
 
        /**
         * @return int
@@ -59,8 +57,8 @@ class _DiffOp {
  * @private
  * @ingroup DifferenceEngine
  */
-class _DiffOp_Copy extends _DiffOp {
-       var $type = 'copy';
+class DiffOpCopy extends DiffOp {
+       public $type = 'copy';
 
        function __construct( $orig, $closing = false ) {
                if ( !is_array( $closing ) ) {
@@ -71,10 +69,10 @@ class _DiffOp_Copy extends _DiffOp {
        }
 
        /**
-        * @return _DiffOp_Copy
+        * @return DiffOpCopy
         */
        function reverse() {
-               return new _DiffOp_Copy( $this->closing, $this->orig );
+               return new DiffOpCopy( $this->closing, $this->orig );
        }
 }
 
@@ -83,8 +81,8 @@ class _DiffOp_Copy extends _DiffOp {
  * @private
  * @ingroup DifferenceEngine
  */
-class _DiffOp_Delete extends _DiffOp {
-       var $type = 'delete';
+class DiffOpDelete extends DiffOp {
+       public $type = 'delete';
 
        function __construct( $lines ) {
                $this->orig = $lines;
@@ -92,10 +90,10 @@ class _DiffOp_Delete extends _DiffOp {
        }
 
        /**
-        * @return _DiffOp_Add
+        * @return DiffOpAdd
         */
        function reverse() {
-               return new _DiffOp_Add( $this->orig );
+               return new DiffOpAdd( $this->orig );
        }
 }
 
@@ -104,8 +102,8 @@ class _DiffOp_Delete extends _DiffOp {
  * @private
  * @ingroup DifferenceEngine
  */
-class _DiffOp_Add extends _DiffOp {
-       var $type = 'add';
+class DiffOpAdd extends DiffOp {
+       public $type = 'add';
 
        function __construct( $lines ) {
                $this->closing = $lines;
@@ -113,10 +111,10 @@ class _DiffOp_Add extends _DiffOp {
        }
 
        /**
-        * @return _DiffOp_Delete
+        * @return DiffOpDelete
         */
        function reverse() {
-               return new _DiffOp_Delete( $this->closing );
+               return new DiffOpDelete( $this->closing );
        }
 }
 
@@ -125,8 +123,8 @@ class _DiffOp_Add extends _DiffOp {
  * @private
  * @ingroup DifferenceEngine
  */
-class _DiffOp_Change extends _DiffOp {
-       var $type = 'change';
+class DiffOpChange extends DiffOp {
+       public $type = 'change';
 
        function __construct( $orig, $closing ) {
                $this->orig = $orig;
@@ -134,10 +132,10 @@ class _DiffOp_Change extends _DiffOp {
        }
 
        /**
-        * @return _DiffOp_Change
+        * @return DiffOpChange
         */
        function reverse() {
-               return new _DiffOp_Change( $this->closing, $this->orig );
+               return new DiffOpChange( $this->closing, $this->orig );
        }
 }
 
@@ -146,14 +144,14 @@ class _DiffOp_Change extends _DiffOp {
  *
  * The algorithm used here is mostly lifted from the perl module
  * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
- *      http://www.perl.com/CPAN/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
+ *     http://www.perl.com/CPAN/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
  *
  * More ideas are taken from:
- *      http://www.ics.uci.edu/~eppstein/161/960229.html
+ *     http://www.ics.uci.edu/~eppstein/161/960229.html
  *
  * Some ideas are (and a bit of code) are from from analyze.c, from GNU
  * diffutils-2.7, which can be found at:
- *      ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
+ *     ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
  *
  * closingly, some ideas (subdivision by NCHUNKS > 2, and some optimizations)
  * are my own.
@@ -165,8 +163,7 @@ class _DiffOp_Change extends _DiffOp {
  * @private
  * @ingroup DifferenceEngine
  */
-class _DiffEngine {
-
+class DiffEngine {
        const MAX_XREF_LENGTH = 10000;
 
        protected $xchanged, $ychanged;
@@ -187,11 +184,11 @@ class _DiffEngine {
                wfProfileIn( __METHOD__ );
 
                // Diff and store locally
-               $this->diff_local( $from_lines, $to_lines );
+               $this->diffLocal( $from_lines, $to_lines );
 
                // Merge edits when possible
-               $this->_shift_boundaries( $from_lines, $this->xchanged, $this->ychanged );
-               $this->_shift_boundaries( $to_lines, $this->ychanged, $this->xchanged );
+               $this->shiftBoundaries( $from_lines, $this->xchanged, $this->ychanged );
+               $this->shiftBoundaries( $to_lines, $this->ychanged, $this->xchanged );
 
                // Compute the edit operations.
                $n_from = count( $from_lines );
@@ -206,12 +203,13 @@ class _DiffEngine {
                        // Skip matching "snake".
                        $copy = array();
                        while ( $xi < $n_from && $yi < $n_to
-                       && !$this->xchanged[$xi] && !$this->ychanged[$yi] ) {
+                               && !$this->xchanged[$xi] && !$this->ychanged[$yi]
+                       ) {
                                $copy[] = $from_lines[$xi++];
                                ++$yi;
                        }
                        if ( $copy ) {
-                               $edits[] = new _DiffOp_Copy( $copy );
+                               $edits[] = new DiffOpCopy( $copy );
                        }
 
                        // Find deletes & adds.
@@ -226,14 +224,15 @@ class _DiffEngine {
                        }
 
                        if ( $delete && $add ) {
-                               $edits[] = new _DiffOp_Change( $delete, $add );
+                               $edits[] = new DiffOpChange( $delete, $add );
                        } elseif ( $delete ) {
-                               $edits[] = new _DiffOp_Delete( $delete );
+                               $edits[] = new DiffOpDelete( $delete );
                        } elseif ( $add ) {
-                               $edits[] = new _DiffOp_Add( $add );
+                               $edits[] = new DiffOpAdd( $add );
                        }
                }
                wfProfileOut( __METHOD__ );
+
                return $edits;
        }
 
@@ -241,7 +240,7 @@ class _DiffEngine {
         * @param $from_lines
         * @param $to_lines
         */
-       function diff_local( $from_lines, $to_lines ) {
+       private function diffLocal( $from_lines, $to_lines ) {
                global $wgExternalDiffEngine;
                wfProfileIn( __METHOD__ );
 
@@ -282,21 +281,21 @@ class _DiffEngine {
 
                        // Ignore lines which do not exist in both files.
                        for ( $xi = $skip; $xi < $n_from - $endskip; $xi++ ) {
-                               $xhash[$this->_line_hash( $from_lines[$xi] )] = 1;
+                               $xhash[$this->lineHash( $from_lines[$xi] )] = 1;
                        }
 
                        for ( $yi = $skip; $yi < $n_to - $endskip; $yi++ ) {
                                $line = $to_lines[$yi];
-                               if ( ( $this->ychanged[$yi] = empty( $xhash[$this->_line_hash( $line )] ) ) ) {
+                               if ( ( $this->ychanged[$yi] = empty( $xhash[$this->lineHash( $line )] ) ) ) {
                                        continue;
                                }
-                               $yhash[$this->_line_hash( $line )] = 1;
+                               $yhash[$this->lineHash( $line )] = 1;
                                $this->yv[] = $line;
                                $this->yind[] = $yi;
                        }
                        for ( $xi = $skip; $xi < $n_from - $endskip; $xi++ ) {
                                $line = $from_lines[$xi];
-                               if ( ( $this->xchanged[$xi] = empty( $yhash[$this->_line_hash( $line )] ) ) ) {
+                               if ( ( $this->xchanged[$xi] = empty( $yhash[$this->lineHash( $line )] ) ) ) {
                                        continue;
                                }
                                $this->xv[] = $line;
@@ -304,7 +303,7 @@ class _DiffEngine {
                        }
 
                        // Find the LCS.
-                       $this->_compareseq( 0, count( $this->xv ), 0, count( $this->yv ) );
+                       $this->compareSeq( 0, count( $this->xv ), 0, count( $this->yv ) );
                }
                wfProfileOut( __METHOD__ );
        }
@@ -314,7 +313,7 @@ class _DiffEngine {
         * @param $line string
         * @return string
         */
-       function _line_hash( $line ) {
+       private function lineHash( $line ) {
                if ( strlen( $line ) > self::MAX_XREF_LENGTH ) {
                        return md5( $line );
                } else {
@@ -345,7 +344,7 @@ class _DiffEngine {
         * @param $nchunks
         * @return array
         */
-       function _diag( $xoff, $xlim, $yoff, $ylim, $nchunks ) {
+       private function diag( $xoff, $xlim, $yoff, $ylim, $nchunks ) {
                $flip = false;
 
                if ( $xlim - $xoff > $ylim - $yoff ) {
@@ -375,28 +374,31 @@ class _DiffEngine {
                for ( $chunk = 0; $chunk < $nchunks; $chunk++ ) {
                        if ( $chunk > 0 ) {
                                for ( $i = 0; $i <= $this->lcs; $i++ ) {
-                                       $ymids[$i][$chunk -1] = $this->seq[$i];
+                                       $ymids[$i][$chunk - 1] = $this->seq[$i];
                                }
                        }
 
-                       $x1 = $xoff + (int)( ( $numer + ( $xlim -$xoff ) * $chunk ) / $nchunks );
+                       $x1 = $xoff + (int)( ( $numer + ( $xlim - $xoff ) * $chunk ) / $nchunks );
                        for ( ; $x < $x1; $x++ ) {
                                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                                if ( empty( $ymatches[$line] ) ) {
                                        continue;
                                }
+
+                               $k = 0;
                                $matches = $ymatches[$line];
                                reset( $matches );
                                while ( list( , $y ) = each( $matches ) ) {
                                        if ( empty( $this->in_seq[$y] ) ) {
-                                               $k = $this->_lcs_pos( $y );
+                                               $k = $this->lcsPos( $y );
                                                assert( '$k > 0' );
-                                               $ymids[$k] = $ymids[$k -1];
+                                               $ymids[$k] = $ymids[$k - 1];
                                                break;
                                        }
                                }
+
                                while ( list( , $y ) = each( $matches ) ) {
-                                       if ( $y > $this->seq[$k -1] ) {
+                                       if ( $y > $this->seq[$k - 1] ) {
                                                assert( '$y < $this->seq[$k]' );
                                                // Optimization: this is a common case:
                                                //      next match is just replacing previous match.
@@ -404,9 +406,9 @@ class _DiffEngine {
                                                $this->seq[$k] = $y;
                                                $this->in_seq[$y] = 1;
                                        } elseif ( empty( $this->in_seq[$y] ) ) {
-                                               $k = $this->_lcs_pos( $y );
+                                               $k = $this->lcsPos( $y );
                                                assert( '$k > 0' );
-                                               $ymids[$k] = $ymids[$k -1];
+                                               $ymids[$k] = $ymids[$k - 1];
                                        }
                                }
                        }
@@ -428,11 +430,12 @@ class _DiffEngine {
         * @param $ypos
         * @return int
         */
-       function _lcs_pos( $ypos ) {
+       private function lcsPos( $ypos ) {
                $end = $this->lcs;
                if ( $end == 0 || $ypos > $this->seq[$end] ) {
                        $this->seq[++$this->lcs] = $ypos;
                        $this->in_seq[$ypos] = 1;
+
                        return $this->lcs;
                }
 
@@ -451,6 +454,7 @@ class _DiffEngine {
                $this->in_seq[$this->seq[$end]] = false;
                $this->seq[$end] = $ypos;
                $this->in_seq[$ypos] = 1;
+
                return $end;
        }
 
@@ -470,7 +474,7 @@ class _DiffEngine {
         * @param $yoff
         * @param $ylim
         */
-       function _compareseq( $xoff, $xlim, $yoff, $ylim ) {
+       private function compareSeq( $xoff, $xlim, $yoff, $ylim ) {
                // Slide down the bottom initial diagonal.
                while ( $xoff < $xlim && $yoff < $ylim && $this->xv[$xoff] == $this->yv[$yoff] ) {
                        ++$xoff;
@@ -479,7 +483,8 @@ class _DiffEngine {
 
                // Slide up the top initial diagonal.
                while ( $xlim > $xoff && $ylim > $yoff
-               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1] ) {
+                       && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]
+               ) {
                        --$xlim;
                        --$ylim;
                }
@@ -491,7 +496,7 @@ class _DiffEngine {
                        // $nchunks = sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5);
                        // $nchunks = max(2,min(8,(int)$nchunks));
                        $nchunks = min( 7, $xlim - $xoff, $ylim - $yoff ) + 1;
-                       list( $lcs, $seps ) = $this->_diag( $xoff, $xlim, $yoff, $ylim, $nchunks );
+                       list( $lcs, $seps ) = $this->diag( $xoff, $xlim, $yoff, $ylim, $nchunks );
                }
 
                if ( $lcs == 0 ) {
@@ -508,7 +513,7 @@ class _DiffEngine {
                        reset( $seps );
                        $pt1 = $seps[0];
                        while ( $pt2 = next( $seps ) ) {
-                               $this->_compareseq( $pt1[0], $pt2[0], $pt1[1], $pt2[1] );
+                               $this->compareSeq( $pt1[0], $pt2[0], $pt1[1], $pt2[1] );
                                $pt1 = $pt2;
                        }
                }
@@ -527,7 +532,7 @@ class _DiffEngine {
         *
         * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
         */
-       function _shift_boundaries( $lines, &$changed, $other_changed ) {
+       private function shiftBoundaries( $lines, &$changed, $other_changed ) {
                wfProfileIn( __METHOD__ );
                $i = 0;
                $j = 0;
@@ -552,7 +557,7 @@ class _DiffEngine {
                                $j++;
                        }
 
-                       while ( $i < $len && ! $changed[$i] ) {
+                       while ( $i < $len && !$changed[$i] ) {
                                assert( '$j < $other_len && ! $other_changed[$j]' );
                                $i++;
                                $j++;
@@ -654,20 +659,19 @@ class _DiffEngine {
  * @ingroup DifferenceEngine
  */
 class Diff {
-       var $edits;
+       public $edits;
 
        /**
         * Constructor.
         * Computes diff between sequences of strings.
         *
         * @param $from_lines array An array of strings.
-        *                (Typically these are lines from a file.)
+        *   Typically these are lines from a file.
         * @param $to_lines array An array of strings.
         */
        function __construct( $from_lines, $to_lines ) {
-               $eng = new _DiffEngine;
+               $eng = new DiffEngine;
                $this->edits = $eng->diff( $from_lines, $to_lines );
-               // $this->_check($from_lines, $to_lines);
        }
 
        /**
@@ -675,17 +679,19 @@ class Diff {
         *
         * SYNOPSIS:
         *
-        *      $diff = new Diff($lines1, $lines2);
-        *      $rev = $diff->reverse();
+        *    $diff = new Diff($lines1, $lines2);
+        *    $rev = $diff->reverse();
         * @return Object A Diff object representing the inverse of the
-        *                                original diff.
+        *   original diff.
         */
        function reverse() {
                $rev = $this;
                $rev->edits = array();
+               /** @var DiffOp $edit */
                foreach ( $this->edits as $edit ) {
                        $rev->edits[] = $edit->reverse();
                }
+
                return $rev;
        }
 
@@ -700,6 +706,7 @@ class Diff {
                                return false;
                        }
                }
+
                return true;
        }
 
@@ -717,6 +724,7 @@ class Diff {
                                $lcs += count( $edit->orig );
                        }
                }
+
                return $lcs;
        }
 
@@ -736,6 +744,7 @@ class Diff {
                                array_splice( $lines, count( $lines ), 0, $edit->orig );
                        }
                }
+
                return $lines;
        }
 
@@ -755,44 +764,8 @@ class Diff {
                                array_splice( $lines, count( $lines ), 0, $edit->closing );
                        }
                }
-               return $lines;
-       }
 
-       /**
-        * Check a Diff for validity.
-        *
-        * This is here only for debugging purposes.
-        * @param $from_lines
-        * @param $to_lines
-        */
-       function _check( $from_lines, $to_lines ) {
-               wfProfileIn( __METHOD__ );
-               if ( serialize( $from_lines ) != serialize( $this->orig() ) ) {
-                       trigger_error( "Reconstructed original doesn't match", E_USER_ERROR );
-               }
-               if ( serialize( $to_lines ) != serialize( $this->closing() ) ) {
-                       trigger_error( "Reconstructed closing doesn't match", E_USER_ERROR );
-               }
-
-               $rev = $this->reverse();
-               if ( serialize( $to_lines ) != serialize( $rev->orig() ) ) {
-                       trigger_error( "Reversed original doesn't match", E_USER_ERROR );
-               }
-               if ( serialize( $from_lines ) != serialize( $rev->closing() ) ) {
-                       trigger_error( "Reversed closing doesn't match", E_USER_ERROR );
-               }
-
-               $prevtype = 'none';
-               foreach ( $this->edits as $edit ) {
-                       if ( $prevtype == $edit->type ) {
-                               trigger_error( 'Edit sequence is non-optimal', E_USER_ERROR );
-                       }
-                       $prevtype = $edit->type;
-               }
-
-               $lcs = $this->lcs();
-               trigger_error( 'Diff okay: LCS = ' . $lcs, E_USER_NOTICE );
-               wfProfileOut( __METHOD__ );
+               return $lines;
        }
 }
 
@@ -812,18 +785,18 @@ class MappedDiff extends Diff {
         * changes in white-space.
         *
         * @param $from_lines array An array of strings.
-        *      (Typically these are lines from a file.)
+        *   Typically these are lines from a file.
         *
         * @param $to_lines array An array of strings.
         *
         * @param $mapped_from_lines array This array should
-        *      have the same size number of elements as $from_lines.
-        *      The elements in $mapped_from_lines and
-        *      $mapped_to_lines are what is actually compared
-        *      when computing the diff.
+        *   have the same size number of elements as $from_lines.
+        *   The elements in $mapped_from_lines and
+        *   $mapped_to_lines are what is actually compared
+        *   when computing the diff.
         *
         * @param $mapped_to_lines array This array should
-        *      have the same number of elements as $to_lines.
+        *   have the same number of elements as $to_lines.
         */
        function __construct( $from_lines, $to_lines,
                $mapped_from_lines, $mapped_to_lines ) {
@@ -835,7 +808,8 @@ class MappedDiff extends Diff {
                parent::__construct( $mapped_from_lines, $mapped_to_lines );
 
                $xi = $yi = 0;
-               for ( $i = 0; $i < count( $this->edits ); $i++ ) {
+               $editCount = count( $this->edits );
+               for ( $i = 0; $i < $editCount; $i++ ) {
                        $orig = &$this->edits[$i]->orig;
                        if ( is_array( $orig ) ) {
                                $orig = array_slice( $from_lines, $xi, count( $orig ) );
@@ -852,363 +826,61 @@ class MappedDiff extends Diff {
        }
 }
 
-/**
- * A class to format Diffs
- *
- * This class formats the diff in classic diff format.
- * It is intended that this class be customized via inheritance,
- * to obtain fancier outputs.
- * @todo document
- * @private
- * @ingroup DifferenceEngine
- */
-class DiffFormatter {
-       /**
-        * Number of leading context "lines" to preserve.
-        *
-        * This should be left at zero for this class, but subclasses
-        * may want to set this to other values.
-        */
-       var $leading_context_lines = 0;
-
-       /**
-        * Number of trailing context "lines" to preserve.
-        *
-        * This should be left at zero for this class, but subclasses
-        * may want to set this to other values.
-        */
-       var $trailing_context_lines = 0;
-
-       /**
-        * Format a diff.
-        *
-        * @param $diff Diff A Diff object.
-        * @return string The formatted output.
-        */
-       function format( $diff ) {
-               wfProfileIn( __METHOD__ );
-
-               $xi = $yi = 1;
-               $block = false;
-               $context = array();
-
-               $nlead = $this->leading_context_lines;
-               $ntrail = $this->trailing_context_lines;
-
-               $this->_start_diff();
-
-               foreach ( $diff->edits as $edit ) {
-                       if ( $edit->type == 'copy' ) {
-                               if ( is_array( $block ) ) {
-                                       if ( count( $edit->orig ) <= $nlead + $ntrail ) {
-                                               $block[] = $edit;
-                                       } else {
-                                               if ( $ntrail ) {
-                                                       $context = array_slice( $edit->orig, 0, $ntrail );
-                                                       $block[] = new _DiffOp_Copy( $context );
-                                               }
-                                               $this->_block( $x0, $ntrail + $xi - $x0,
-                                                       $y0, $ntrail + $yi - $y0,
-                                                       $block );
-                                               $block = false;
-                                       }
-                               }
-                               $context = $edit->orig;
-                       } else {
-                               if ( !is_array( $block ) ) {
-                                       $context = array_slice( $context, count( $context ) - $nlead );
-                                       $x0 = $xi - count( $context );
-                                       $y0 = $yi - count( $context );
-                                       $block = array();
-                                       if ( $context ) {
-                                               $block[] = new _DiffOp_Copy( $context );
-                                       }
-                               }
-                               $block[] = $edit;
-                       }
-
-                       if ( $edit->orig ) {
-                               $xi += count( $edit->orig );
-                       }
-                       if ( $edit->closing ) {
-                               $yi += count( $edit->closing );
-                       }
-               }
-
-               if ( is_array( $block ) ) {
-                       $this->_block( $x0, $xi - $x0,
-                               $y0, $yi - $y0,
-                               $block );
-               }
-
-               $end = $this->_end_diff();
-               wfProfileOut( __METHOD__ );
-               return $end;
-       }
-
-       /**
-        * @param $xbeg
-        * @param $xlen
-        * @param $ybeg
-        * @param $ylen
-        * @param $edits
-        */
-       function _block( $xbeg, $xlen, $ybeg, $ylen, &$edits ) {
-               wfProfileIn( __METHOD__ );
-               $this->_start_block( $this->_block_header( $xbeg, $xlen, $ybeg, $ylen ) );
-               foreach ( $edits as $edit ) {
-                       if ( $edit->type == 'copy' ) {
-                               $this->_context( $edit->orig );
-                       } elseif ( $edit->type == 'add' ) {
-                               $this->_added( $edit->closing );
-                       } elseif ( $edit->type == 'delete' ) {
-                               $this->_deleted( $edit->orig );
-                       } elseif ( $edit->type == 'change' ) {
-                               $this->_changed( $edit->orig, $edit->closing );
-                       } else {
-                               trigger_error( 'Unknown edit type', E_USER_ERROR );
-                       }
-               }
-               $this->_end_block();
-               wfProfileOut( __METHOD__ );
-       }
-
-       function _start_diff() {
-               ob_start();
-       }
-
-       /**
-        * @return string
-        */
-       function _end_diff() {
-               $val = ob_get_contents();
-               ob_end_clean();
-               return $val;
-       }
-
-       /**
-        * @param $xbeg
-        * @param $xlen
-        * @param $ybeg
-        * @param $ylen
-        * @return string
-        */
-       function _block_header( $xbeg, $xlen, $ybeg, $ylen ) {
-               if ( $xlen > 1 ) {
-                       $xbeg .= ',' . ( $xbeg + $xlen - 1 );
-               }
-               if ( $ylen > 1 ) {
-                       $ybeg .= ',' . ( $ybeg + $ylen - 1 );
-               }
-
-               return $xbeg . ( $xlen ? ( $ylen ? 'c' : 'd' ) : 'a' ) . $ybeg;
-       }
-
-       function _start_block( $header ) {
-               echo $header . "\n";
-       }
-
-       function _end_block() {
-       }
-
-       /**
-        * @param $lines
-        * @param $prefix string
-        */
-       function _lines( $lines, $prefix = ' ' ) {
-               foreach ( $lines as $line ) {
-                       echo "$prefix $line\n";
-               }
-       }
-
-       /**
-        * @param $lines
-        */
-       function _context( $lines ) {
-               $this->_lines( $lines );
-       }
-
-       /**
-        * @param $lines
-        */
-       function _added( $lines ) {
-               $this->_lines( $lines, '>' );
-       }
-
-       /**
-        * @param $lines
-        */
-       function _deleted( $lines ) {
-               $this->_lines( $lines, '<' );
-       }
-
-       /**
-        * @param $orig
-        * @param $closing
-        */
-       function _changed( $orig, $closing ) {
-               $this->_deleted( $orig );
-               echo "---\n";
-               $this->_added( $closing );
-       }
-}
-
-/**
- * A formatter that outputs unified diffs
- * @ingroup DifferenceEngine
- */
-class UnifiedDiffFormatter extends DiffFormatter {
-       var $leading_context_lines = 2;
-       var $trailing_context_lines = 2;
-
-       /**
-        * @param $lines
-        */
-       function _added( $lines ) {
-               $this->_lines( $lines, '+' );
-       }
-
-       /**
-        * @param $lines
-        */
-       function _deleted( $lines ) {
-               $this->_lines( $lines, '-' );
-       }
-
-       /**
-        * @param $orig
-        * @param $closing
-        */
-       function _changed( $orig, $closing ) {
-               $this->_deleted( $orig );
-               $this->_added( $closing );
-       }
-
-       /**
-        * @param $xbeg
-        * @param $xlen
-        * @param $ybeg
-        * @param $ylen
-        * @return string
-        */
-       function _block_header( $xbeg, $xlen, $ybeg, $ylen ) {
-               return "@@ -$xbeg,$xlen +$ybeg,$ylen @@";
-       }
-}
-
-/**
- * A pseudo-formatter that just passes along the Diff::$edits array
- * @ingroup DifferenceEngine
- */
-class ArrayDiffFormatter extends DiffFormatter {
-
-       /**
-        * @param $diff
-        * @return array
-        */
-       function format( $diff ) {
-               $oldline = 1;
-               $newline = 1;
-               $retval = array();
-               foreach ( $diff->edits as $edit ) {
-                       switch ( $edit->type ) {
-                               case 'add':
-                                       foreach ( $edit->closing as $l ) {
-                                               $retval[] = array(
-                                                       'action' => 'add',
-                                                       'new' => $l,
-                                                       'newline' => $newline++
-                                               );
-                                       }
-                                       break;
-                               case 'delete':
-                                       foreach ( $edit->orig as $l ) {
-                                               $retval[] = array(
-                                                       'action' => 'delete',
-                                                       'old' => $l,
-                                                       'oldline' => $oldline++,
-                                               );
-                                       }
-                                       break;
-                               case 'change':
-                                       foreach ( $edit->orig as $i => $l ) {
-                                               $retval[] = array(
-                                                       'action' => 'change',
-                                                       'old' => $l,
-                                                       'new' => isset( $edit->closing[$i] ) ? $edit->closing[$i] : null,
-                                                       'oldline' => $oldline++,
-                                                       'newline' => $newline++,
-                                               );
-                                       }
-                                       break;
-                               case 'copy':
-                                       $oldline += count( $edit->orig );
-                                       $newline += count( $edit->orig );
-                       }
-               }
-               return $retval;
-       }
-}
-
 /**
  * Additions by Axel Boldt follow, partly taken from diff.php, phpwiki-1.3.3
  */
 
-define( 'NBSP', '&#160;' ); // iso-8859-x non-breaking space.
-
 /**
  * @todo document
  * @private
  * @ingroup DifferenceEngine
  */
-class _HWLDF_WordAccumulator {
-       function __construct() {
-               $this->_lines = array();
-               $this->_line = '';
-               $this->_group = '';
-               $this->_tag = '';
-       }
+class HWLDFWordAccumulator {
+       private $lines = array();
+       private $line = '';
+       private $group = '';
+       private $tag = '';
 
        /**
         * @param $new_tag
         */
-       function _flushGroup( $new_tag ) {
-               if ( $this->_group !== '' ) {
-                       if ( $this->_tag == 'ins' ) {
-                               $this->_line .= '<ins class="diffchange diffchange-inline">' .
-                                               htmlspecialchars( $this->_group ) . '</ins>';
-                       } elseif ( $this->_tag == 'del' ) {
-                               $this->_line .= '<del class="diffchange diffchange-inline">' .
-                                               htmlspecialchars( $this->_group ) . '</del>';
+       private function flushGroup( $new_tag ) {
+               if ( $this->group !== '' ) {
+                       if ( $this->tag == 'ins' ) {
+                               $this->line .= '<ins class="diffchange diffchange-inline">' .
+                                       htmlspecialchars( $this->group ) . '</ins>';
+                       } elseif ( $this->tag == 'del' ) {
+                               $this->line .= '<del class="diffchange diffchange-inline">' .
+                                       htmlspecialchars( $this->group ) . '</del>';
                        } else {
-                               $this->_line .= htmlspecialchars( $this->_group );
+                               $this->line .= htmlspecialchars( $this->group );
                        }
                }
-               $this->_group = '';
-               $this->_tag = $new_tag;
+               $this->group = '';
+               $this->tag = $new_tag;
        }
 
        /**
         * @param $new_tag
         */
-       function _flushLine( $new_tag ) {
-               $this->_flushGroup( $new_tag );
-               if ( $this->_line != '' ) {
-                       array_push( $this->_lines, $this->_line );
+       private function flushLine( $new_tag ) {
+               $this->flushGroup( $new_tag );
+               if ( $this->line != '' ) {
+                       array_push( $this->lines, $this->line );
                } else {
                        # make empty lines visible by inserting an NBSP
-                       array_push( $this->_lines, NBSP );
+                       array_push( $this->lines, '&#160;' );
                }
-               $this->_line = '';
+               $this->line = '';
        }
 
        /**
         * @param $words
         * @param $tag string
         */
-       function addWords( $words, $tag = '' ) {
-               if ( $tag != $this->_tag ) {
-                       $this->_flushGroup( $tag );
+       public function addWords( $words, $tag = '' ) {
+               if ( $tag != $this->tag ) {
+                       $this->flushGroup( $tag );
                }
 
                foreach ( $words as $word ) {
@@ -1217,20 +889,21 @@ class _HWLDF_WordAccumulator {
                                continue;
                        }
                        if ( $word[0] == "\n" ) {
-                               $this->_flushLine( $tag );
+                               $this->flushLine( $tag );
                                $word = substr( $word, 1 );
                        }
                        assert( '!strstr( $word, "\n" )' );
-                       $this->_group .= $word;
+                       $this->group .= $word;
                }
        }
 
        /**
         * @return array
         */
-       function getLines() {
-               $this->_flushLine( '~done' );
-               return $this->_lines;
+       public function getLines() {
+               $this->flushLine( '~done' );
+
+               return $this->lines;
        }
 }
 
@@ -1249,11 +922,11 @@ class WordLevelDiff extends MappedDiff {
        function __construct( $orig_lines, $closing_lines ) {
                wfProfileIn( __METHOD__ );
 
-               list( $orig_words, $orig_stripped ) = $this->_split( $orig_lines );
-               list( $closing_words, $closing_stripped ) = $this->_split( $closing_lines );
+               list( $orig_words, $orig_stripped ) = $this->split( $orig_lines );
+               list( $closing_words, $closing_stripped ) = $this->split( $closing_lines );
 
                parent::__construct( $orig_words, $closing_words,
-               $orig_stripped, $closing_stripped );
+                       $orig_stripped, $closing_stripped );
                wfProfileOut( __METHOD__ );
        }
 
@@ -1261,7 +934,7 @@ class WordLevelDiff extends MappedDiff {
         * @param $lines
         * @return array
         */
-       function _split( $lines ) {
+       private function split( $lines ) {
                wfProfileIn( __METHOD__ );
 
                $words = array();
@@ -1282,8 +955,8 @@ class WordLevelDiff extends MappedDiff {
                        } else {
                                $m = array();
                                if ( preg_match_all( '/ ( [^\S\n]+ | [0-9_A-Za-z\x80-\xff]+ | . ) (?: (?!< \n) [^\S\n])? /xs',
-                                       $line, $m ) )
-                               {
+                                       $line, $m )
+                               {
                                        foreach ( $m[0] as $word ) {
                                                $words[] = $word;
                                        }
@@ -1294,15 +967,16 @@ class WordLevelDiff extends MappedDiff {
                        }
                }
                wfProfileOut( __METHOD__ );
+
                return array( $words, $stripped );
        }
 
        /**
         * @return array
         */
-       function orig() {
+       public function orig() {
                wfProfileIn( __METHOD__ );
-               $orig = new _HWLDF_WordAccumulator;
+               $orig = new HWLDFWordAccumulator;
 
                foreach ( $this->edits as $edit ) {
                        if ( $edit->type == 'copy' ) {
@@ -1313,15 +987,16 @@ class WordLevelDiff extends MappedDiff {
                }
                $lines = $orig->getLines();
                wfProfileOut( __METHOD__ );
+
                return $lines;
        }
 
        /**
         * @return array
         */
-       function closing() {
+       public function closing() {
                wfProfileIn( __METHOD__ );
-               $closing = new _HWLDF_WordAccumulator;
+               $closing = new HWLDFWordAccumulator;
 
                foreach ( $this->edits as $edit ) {
                        if ( $edit->type == 'copy' ) {
@@ -1332,164 +1007,7 @@ class WordLevelDiff extends MappedDiff {
                }
                $lines = $closing->getLines();
                wfProfileOut( __METHOD__ );
-               return $lines;
-       }
-}
-
-/**
- * Wikipedia Table style diff formatter.
- * @todo document
- * @private
- * @ingroup DifferenceEngine
- */
-class TableDiffFormatter extends DiffFormatter {
-       function __construct() {
-               $this->leading_context_lines = 2;
-               $this->trailing_context_lines = 2;
-       }
 
-       /**
-        * @static
-        * @param $msg
-        * @return mixed
-        */
-       public static function escapeWhiteSpace( $msg ) {
-               $msg = preg_replace( '/^ /m', '&#160; ', $msg );
-               $msg = preg_replace( '/ $/m', ' &#160;', $msg );
-               $msg = preg_replace( '/  /', '&#160; ', $msg );
-               return $msg;
-       }
-
-       /**
-        * @param $xbeg
-        * @param $xlen
-        * @param $ybeg
-        * @param $ylen
-        * @return string
-        */
-       function _block_header( $xbeg, $xlen, $ybeg, $ylen ) {
-               $r = '<tr><td colspan="2" class="diff-lineno"><!--LINE ' . $xbeg . "--></td>\n" .
-                       '<td colspan="2" class="diff-lineno"><!--LINE ' . $ybeg . "--></td></tr>\n";
-               return $r;
-       }
-
-       /**
-        * @param $header
-        */
-       function _start_block( $header ) {
-               echo $header;
-       }
-
-       function _end_block() {
-       }
-
-       function _lines( $lines, $prefix = ' ', $color = 'white' ) {
-       }
-
-       /**
-        * HTML-escape parameter before calling this
-        * @param $line
-        * @return string
-        */
-       function addedLine( $line ) {
-               return $this->wrapLine( '+', 'diff-addedline', $line );
-       }
-
-       /**
-        * HTML-escape parameter before calling this
-        * @param $line
-        * @return string
-        */
-       function deletedLine( $line ) {
-               return $this->wrapLine( '−', 'diff-deletedline', $line );
-       }
-
-       /**
-        * HTML-escape parameter before calling this
-        * @param $line
-        * @return string
-        */
-       function contextLine( $line ) {
-               return $this->wrapLine( '&#160;', 'diff-context', $line );
-       }
-
-       /**
-        * @param $marker
-        * @param $class
-        * @param $line
-        * @return string
-        */
-       private function wrapLine( $marker, $class, $line ) {
-               if ( $line !== '' ) {
-                       // The <div> wrapper is needed for 'overflow: auto' style to scroll properly
-                       $line = Xml::tags( 'div', null, $this->escapeWhiteSpace( $line ) );
-               }
-               return "<td class='diff-marker'>$marker</td><td class='$class'>$line</td>";
-       }
-
-       /**
-        * @return string
-        */
-       function emptyLine() {
-               return '<td colspan="2">&#160;</td>';
-       }
-
-       /**
-        * @param $lines array
-        */
-       function _added( $lines ) {
-               foreach ( $lines as $line ) {
-                       echo '<tr>' . $this->emptyLine() .
-                       $this->addedLine( '<ins class="diffchange">' .
-                       htmlspecialchars( $line ) . '</ins>' ) . "</tr>\n";
-               }
-       }
-
-       /**
-        * @param $lines
-        */
-       function _deleted( $lines ) {
-               foreach ( $lines as $line ) {
-                       echo '<tr>' . $this->deletedLine( '<del class="diffchange">' .
-                       htmlspecialchars( $line ) . '</del>' ) .
-                       $this->emptyLine() . "</tr>\n";
-               }
-       }
-
-       /**
-        * @param $lines
-        */
-       function _context( $lines ) {
-               foreach ( $lines as $line ) {
-                       echo '<tr>' .
-                       $this->contextLine( htmlspecialchars( $line ) ) .
-                       $this->contextLine( htmlspecialchars( $line ) ) . "</tr>\n";
-               }
-       }
-
-       /**
-        * @param $orig
-        * @param $closing
-        */
-       function _changed( $orig, $closing ) {
-               wfProfileIn( __METHOD__ );
-
-               $diff = new WordLevelDiff( $orig, $closing );
-               $del = $diff->orig();
-               $add = $diff->closing();
-
-               # Notice that WordLevelDiff returns HTML-escaped output.
-               # Hence, we will be calling addedLine/deletedLine without HTML-escaping.
-
-               while ( $line = array_shift( $del ) ) {
-                       $aline = array_shift( $add );
-                       echo '<tr>' . $this->deletedLine( $line ) .
-                       $this->addedLine( $aline ) . "</tr>\n";
-               }
-               foreach ( $add as $line ) {     # If any leftovers
-                       echo '<tr>' . $this->emptyLine() .
-                       $this->addedLine( $line ) . "</tr>\n";
-               }
-               wfProfileOut( __METHOD__ );
+               return $lines;
        }
 }
diff --git a/includes/diff/DiffFormatter.php b/includes/diff/DiffFormatter.php
new file mode 100644 (file)
index 0000000..d9e1c95
--- /dev/null
@@ -0,0 +1,228 @@
+<?php
+/**
+ * Base for diff rendering classes. Portions taken from phpwiki-1.3.3.
+ *
+ * Copyright © 2000, 2001 Geoffrey T. Dairiki <dairiki@dairiki.org>
+ * You may copy this code freely under the conditions of the GPL.
+ *
+ * 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 DifferenceEngine
+ */
+
+/**
+ * Base class for diff formatters
+ *
+ * This class formats the diff in classic diff format.
+ * It is intended that this class be customized via inheritance,
+ * to obtain fancier outputs.
+ * @todo document
+ * @ingroup DifferenceEngine
+ */
+abstract class DiffFormatter {
+       /** @var int Number of leading context "lines" to preserve.
+        *
+        * This should be left at zero for this class, but subclasses
+        * may want to set this to other values.
+        */
+       protected $leadingContextLines = 0;
+
+       /** @var int Number of trailing context "lines" to preserve.
+        *
+        * This should be left at zero for this class, but subclasses
+        * may want to set this to other values.
+        */
+       protected $trailingContextLines = 0;
+
+       /**
+        * Format a diff.
+        *
+        * @param $diff Diff A Diff object.
+        * @return string The formatted output.
+        */
+       public function format( $diff ) {
+               wfProfileIn( __METHOD__ );
+
+               $xi = $yi = 1;
+               $block = false;
+               $context = array();
+
+               $nlead = $this->leadingContextLines;
+               $ntrail = $this->trailingContextLines;
+
+               $this->startDiff();
+
+               // Initialize $x0 and $y0 to prevent IDEs from getting confused.
+               $x0 = $y0 = 0;
+               foreach ( $diff->edits as $edit ) {
+                       if ( $edit->type == 'copy' ) {
+                               if ( is_array( $block ) ) {
+                                       if ( count( $edit->orig ) <= $nlead + $ntrail ) {
+                                               $block[] = $edit;
+                                       } else {
+                                               if ( $ntrail ) {
+                                                       $context = array_slice( $edit->orig, 0, $ntrail );
+                                                       $block[] = new DiffOpCopy( $context );
+                                               }
+                                               $this->block( $x0, $ntrail + $xi - $x0,
+                                                       $y0, $ntrail + $yi - $y0,
+                                                       $block );
+                                               $block = false;
+                                       }
+                               }
+                               $context = $edit->orig;
+                       } else {
+                               if ( !is_array( $block ) ) {
+                                       $context = array_slice( $context, count( $context ) - $nlead );
+                                       $x0 = $xi - count( $context );
+                                       $y0 = $yi - count( $context );
+                                       $block = array();
+                                       if ( $context ) {
+                                               $block[] = new DiffOpCopy( $context );
+                                       }
+                               }
+                               $block[] = $edit;
+                       }
+
+                       if ( $edit->orig ) {
+                               $xi += count( $edit->orig );
+                       }
+                       if ( $edit->closing ) {
+                               $yi += count( $edit->closing );
+                       }
+               }
+
+               if ( is_array( $block ) ) {
+                       $this->block( $x0, $xi - $x0,
+                               $y0, $yi - $y0,
+                               $block );
+               }
+
+               $end = $this->endDiff();
+               wfProfileOut( __METHOD__ );
+
+               return $end;
+       }
+
+       /**
+        * @param int $xbeg
+        * @param int $xlen
+        * @param int $ybeg
+        * @param int $ylen
+        * @param $edits
+        * @throws MWException
+        */
+       protected function block( $xbeg, $xlen, $ybeg, $ylen, &$edits ) {
+               wfProfileIn( __METHOD__ );
+               $this->startBlock( $this->blockHeader( $xbeg, $xlen, $ybeg, $ylen ) );
+               foreach ( $edits as $edit ) {
+                       if ( $edit->type == 'copy' ) {
+                               $this->context( $edit->orig );
+                       } elseif ( $edit->type == 'add' ) {
+                               $this->added( $edit->closing );
+                       } elseif ( $edit->type == 'delete' ) {
+                               $this->deleted( $edit->orig );
+                       } elseif ( $edit->type == 'change' ) {
+                               $this->changed( $edit->orig, $edit->closing );
+                       } else {
+                               throw new MWException( "Unknown edit type: {$edit->type}" );
+                       }
+               }
+               $this->endBlock();
+               wfProfileOut( __METHOD__ );
+       }
+
+       protected function startDiff() {
+               ob_start();
+       }
+
+       /**
+        * @return string
+        */
+       protected function endDiff() {
+               $val = ob_get_contents();
+               ob_end_clean();
+
+               return $val;
+       }
+
+       /**
+        * @param $xbeg
+        * @param $xlen
+        * @param $ybeg
+        * @param $ylen
+        * @return string
+        */
+       protected function blockHeader( $xbeg, $xlen, $ybeg, $ylen ) {
+               if ( $xlen > 1 ) {
+                       $xbeg .= ',' . ( $xbeg + $xlen - 1 );
+               }
+               if ( $ylen > 1 ) {
+                       $ybeg .= ',' . ( $ybeg + $ylen - 1 );
+               }
+
+               return $xbeg . ( $xlen ? ( $ylen ? 'c' : 'd' ) : 'a' ) . $ybeg;
+       }
+
+       protected function startBlock( $header ) {
+               echo $header . "\n";
+       }
+
+       protected function endBlock() {
+       }
+
+       /**
+        * @param $lines
+        * @param $prefix string
+        */
+       protected function lines( $lines, $prefix = ' ' ) {
+               foreach ( $lines as $line ) {
+                       echo "$prefix $line\n";
+               }
+       }
+
+       /**
+        * @param $lines
+        */
+       protected function context( $lines ) {
+               $this->lines( $lines );
+       }
+
+       /**
+        * @param $lines
+        */
+       protected function added( $lines ) {
+               $this->lines( $lines, '>' );
+       }
+
+       /**
+        * @param $lines
+        */
+       protected function deleted( $lines ) {
+               $this->lines( $lines, '<' );
+       }
+
+       /**
+        * @param $orig
+        * @param $closing
+        */
+       protected function changed( $orig, $closing ) {
+               $this->deleted( $orig );
+               echo "---\n";
+               $this->added( $closing );
+       }
+}
index 39f8a47..6e74f2c 100644 (file)
@@ -34,33 +34,47 @@ define( 'MW_DIFF_VERSION', '1.11a' );
  * @ingroup DifferenceEngine
  */
 class DifferenceEngine extends ContextSource {
+       /** @var int */
        public $mOldid;
+
+       /** @var int */
        public $mNewid;
+
        private $mOldTags;
        private $mNewTags;
 
-       /**
-        * @var Content
-        */
+       /** @var Content */
        public $mOldContent;
+
+       /** @var Content */
        public $mNewContent;
+
+       /** @var Language */
        protected $mDiffLang;
 
-       /**
-        * @var Title
-        */
+       /** @var  Title */
        public $mOldPage;
+
+       /** @var  Title */
        public $mNewPage;
 
-       /**
-        * @var Revision
-        */
+       /** @var Revision */
        public $mOldRev;
+
+       /** @var  Revision */
        public $mNewRev;
-       private $mRevisionsIdsLoaded = false; // Have the revisions IDs been loaded
-       public $mRevisionsLoaded = false; // Have the revisions been loaded
-       public $mTextLoaded = 0; // How many text blobs have been loaded, 0, 1 or 2?
-       public $mCacheHit = false; // Was the diff fetched from cache?
+
+       /** @var bool Have the revisions IDs been loaded */
+       private $mRevisionsIdsLoaded = false;
+
+       /** @var bool Have the revisions been loaded */
+       public $mRevisionsLoaded = false;
+
+       /** @var int How many text blobs have been loaded, 0, 1 or 2? */
+       public $mTextLoaded = 0;
+
+       /** @var bool Was the diff fetched from cache? */
+       public $mCacheHit = false;
 
        /**
         * Set this to true to add debug info to the HTML output.
@@ -69,21 +83,23 @@ class DifferenceEngine extends ContextSource {
         */
        public $enableDebugComment = false;
 
-       // If true, line X is not displayed when X is 1, for example to increase
-       // readability and conserve space with many small diffs.
+       /** @var bool  If true, line X is not displayed when X is 1, for example
+        *    to increase readability and conserve space with many small diffs.
+        */
        protected $mReducedLineNumbers = false;
 
-       // Link to action=markpatrolled
+       /** @var string Link to action=markpatrolled  */
        protected $mMarkPatrolledLink = null;
 
-       protected $unhide = false; # show rev_deleted content if allowed
+       /** @var bool Show rev_deleted content if allowed */
+       protected $unhide = false;
        /**#@-*/
 
        /**
         * Constructor
         * @param $context IContextSource context to use, anything else will be ignored
         * @param $old Integer old ID we want to show and diff with.
-        * @param $new String|int either 'prev' or 'next'. Default: 0.
+        * @param $new String|int either revision ID or 'prev' or 'next'. Default: 0.
         * @param $rcid Integer Deprecated, no longer used!
         * @param $refreshCache boolean If set, refreshes the diff cache
         * @param $unhide boolean If set, allow viewing deleted revs
@@ -118,6 +134,7 @@ class DifferenceEngine extends ContextSource {
                        # Default language in which the diff text is written.
                        $this->mDiffLang = $this->getTitle()->getPageLanguage();
                }
+
                return $this->mDiffLang;
        }
 
@@ -133,6 +150,7 @@ class DifferenceEngine extends ContextSource {
         */
        function getOldid() {
                $this->loadRevisionIds();
+
                return $this->mOldid;
        }
 
@@ -141,6 +159,7 @@ class DifferenceEngine extends ContextSource {
         */
        function getNewid() {
                $this->loadRevisionIds();
+
                return $this->mNewid;
        }
 
@@ -160,12 +179,14 @@ class DifferenceEngine extends ContextSource {
                        if ( $row ) {
                                $rev = Revision::newFromArchiveRow( $row );
                                $title = Title::makeTitleSafe( $row->ar_namespace, $row->ar_title );
+
                                return SpecialPage::getTitleFor( 'Undelete' )->getFullURL( array(
                                        'target' => $title->getPrefixedText(),
                                        'timestamp' => $rev->getTimestamp()
-                               ));
+                               ) );
                        }
                }
+
                return false;
        }
 
@@ -215,6 +236,7 @@ class DifferenceEngine extends ContextSource {
                if ( !$this->loadRevisionData() ) {
                        $this->showMissingRevision();
                        wfProfileOut( __METHOD__ );
+
                        return;
                }
 
@@ -230,7 +252,6 @@ class DifferenceEngine extends ContextSource {
                }
 
                $rollback = '';
-               $undoLink = '';
 
                $query = array();
                # Carry over 'diffonly' param via navigation links
@@ -284,7 +305,8 @@ class DifferenceEngine extends ContextSource {
                                                        'href' => $this->mNewPage->getLocalURL( array(
                                                                'action' => 'edit',
                                                                'undoafter' => $this->mOldid,
-                                                               'undo' => $this->mNewid ) ),
+                                                               'undo' => $this->mNewid
+                                                       ) ),
                                                        'title' => Linker::titleAttrib( 'undo' )
                                                ),
                                                $this->msg( 'editundo' )->text()
@@ -317,9 +339,9 @@ class DifferenceEngine extends ContextSource {
 
                        $oldHeader = '<div id="mw-diff-otitle1"><strong>' . $oldRevisionHeader . '</strong></div>' .
                                '<div id="mw-diff-otitle2">' .
-                                       Linker::revUserTools( $this->mOldRev, !$this->unhide ) . '</div>' .
+                               Linker::revUserTools( $this->mOldRev, !$this->unhide ) . '</div>' .
                                '<div id="mw-diff-otitle3">' . $oldminor .
-                                       Linker::revComment( $this->mOldRev, !$diffOnly, !$this->unhide ) . $ldel . '</div>' .
+                               Linker::revComment( $this->mOldRev, !$diffOnly, !$this->unhide ) . $ldel . '</div>' .
                                '<div id="mw-diff-otitle5">' . $oldChangeTags[0] . '</div>' .
                                '<div id="mw-diff-otitle4">' . $prevlink . '</div>';
 
@@ -371,9 +393,9 @@ class DifferenceEngine extends ContextSource {
 
                $newHeader = '<div id="mw-diff-ntitle1"><strong>' . $newRevisionHeader . '</strong></div>' .
                        '<div id="mw-diff-ntitle2">' . Linker::revUserTools( $this->mNewRev, !$this->unhide ) .
-                               " $rollback</div>" .
+                       " $rollback</div>" .
                        '<div id="mw-diff-ntitle3">' . $newminor .
-                               Linker::revComment( $this->mNewRev, !$diffOnly, !$this->unhide ) . $rdel . '</div>' .
+                       Linker::revComment( $this->mNewRev, !$diffOnly, !$this->unhide ) . $rdel . '</div>' .
                        '<div id="mw-diff-ntitle5">' . $newChangeTags[0] . '</div>' .
                        '<div id="mw-diff-ntitle4">' . $nextlink . $this->markPatrolledLink() . '</div>';
 
@@ -504,6 +526,7 @@ class DifferenceEngine extends ContextSource {
                if ( $link !== '' ) {
                        $link = '&#160;&#160;&#160;' . $link . ' ';
                }
+
                return $link;
        }
 
@@ -590,6 +613,7 @@ class DifferenceEngine extends ContextSource {
                }
 
                $parserOutput = $page->getParserOutput( $parserOptions, $rev->getId() );
+
                return $parserOutput;
        }
 
@@ -599,17 +623,20 @@ class DifferenceEngine extends ContextSource {
         *
         * @param string|bool $otitle Header for old text or false
         * @param string|bool $ntitle Header for new text or false
-        * @param string $notice
+        * @param string $notice HTML between diff header and body
+        *
         * @return bool
         */
        function showDiff( $otitle, $ntitle, $notice = '' ) {
                $diff = $this->getDiff( $otitle, $ntitle, $notice );
                if ( $diff === false ) {
                        $this->showMissingRevision();
+
                        return false;
                } else {
                        $this->showDiffStyle();
                        $this->getOutput()->addHTML( $diff );
+
                        return true;
                }
        }
@@ -658,23 +685,27 @@ class DifferenceEngine extends ContextSource {
                // Check if the diff should be hidden from this user
                if ( !$this->loadRevisionData() ) {
                        wfProfileOut( __METHOD__ );
+
                        return false;
                } elseif ( $this->mOldRev &&
                        !$this->mOldRev->userCan( Revision::DELETED_TEXT, $this->getUser() )
                ) {
                        wfProfileOut( __METHOD__ );
+
                        return false;
                } elseif ( $this->mNewRev &&
                        !$this->mNewRev->userCan( Revision::DELETED_TEXT, $this->getUser() )
                ) {
                        wfProfileOut( __METHOD__ );
+
                        return false;
                }
                // Short-circuit
                if ( $this->mOldRev === false || ( $this->mOldRev && $this->mNewRev
-                       && $this->mOldRev->getID() == $this->mNewRev->getID() ) )
-               {
+                       && $this->mOldRev->getID() == $this->mNewRev->getID() )
+               {
                        wfProfileOut( __METHOD__ );
+
                        return '';
                }
                // Cacheable?
@@ -690,6 +721,7 @@ class DifferenceEngine extends ContextSource {
                                        $difftext = $this->localiseLineNumbers( $difftext );
                                        $difftext .= "\n<!-- diff cache key $key -->\n";
                                        wfProfileOut( __METHOD__ );
+
                                        return $difftext;
                                }
                        } // don't try to load but save the result
@@ -699,6 +731,7 @@ class DifferenceEngine extends ContextSource {
                // Loadtext is permission safe, this just clears out the diff
                if ( !$this->loadText() ) {
                        wfProfileOut( __METHOD__ );
+
                        return false;
                }
 
@@ -718,6 +751,7 @@ class DifferenceEngine extends ContextSource {
                        $difftext = $this->localiseLineNumbers( $difftext );
                }
                wfProfileOut( __METHOD__ );
+
                return $difftext;
        }
 
@@ -757,8 +791,8 @@ class DifferenceEngine extends ContextSource {
         */
        function generateContentDiffBody( Content $old, Content $new ) {
                if ( !( $old instanceof TextContent ) ) {
-                       throw new MWException( "Diff not implemented for " . get_class( $old ) . "; "
-                                       . "override generateContentDiffBody to fix this." );
+                       throw new MWException( "Diff not implemented for " . get_class( $old ) . "; " .
+                               "override generateContentDiffBody to fix this." );
                }
 
                if ( !( $new instanceof TextContent ) ) {
@@ -806,9 +840,10 @@ class DifferenceEngine extends ContextSource {
                if ( $wgExternalDiffEngine == 'wikidiff' && function_exists( 'wikidiff_do_diff' ) ) {
                        # For historical reasons, external diff engine expects
                        # input text to be HTML-escaped already
-                       $otext = htmlspecialchars ( $wgContLang->segmentForDiff( $otext ) );
-                       $ntext = htmlspecialchars ( $wgContLang->segmentForDiff( $ntext ) );
+                       $otext = htmlspecialchars( $wgContLang->segmentForDiff( $otext ) );
+                       $ntext = htmlspecialchars( $wgContLang->segmentForDiff( $ntext ) );
                        wfProfileOut( __METHOD__ );
+
                        return $wgContLang->unsegmentForDiff( wikidiff_do_diff( $otext, $ntext, 2 ) ) .
                        $this->debug( 'wikidiff1' );
                }
@@ -821,6 +856,7 @@ class DifferenceEngine extends ContextSource {
                        $text .= $this->debug( 'wikidiff2' );
                        wfProfileOut( 'wikidiff2_do_diff' );
                        wfProfileOut( __METHOD__ );
+
                        return $text;
                }
                if ( $wgExternalDiffEngine != 'wikidiff3' && $wgExternalDiffEngine !== false ) {
@@ -832,11 +868,13 @@ class DifferenceEngine extends ContextSource {
                        $tempFile1 = fopen( $tempName1, "w" );
                        if ( !$tempFile1 ) {
                                wfProfileOut( __METHOD__ );
+
                                return false;
                        }
                        $tempFile2 = fopen( $tempName2, "w" );
                        if ( !$tempFile2 ) {
                                wfProfileOut( __METHOD__ );
+
                                return false;
                        }
                        fwrite( $tempFile1, $otext );
@@ -851,6 +889,7 @@ class DifferenceEngine extends ContextSource {
                        unlink( $tempName1 );
                        unlink( $tempName2 );
                        wfProfileOut( __METHOD__ );
+
                        return $difftext;
                }
 
@@ -860,13 +899,17 @@ class DifferenceEngine extends ContextSource {
                $diffs = new Diff( $ota, $nta );
                $formatter = new TableDiffFormatter();
                $difftext = $wgContLang->unsegmentForDiff( $formatter->format( $diffs ) ) .
-               wfProfileOut( __METHOD__ );
+                       wfProfileOut( __METHOD__ );
+
                return $difftext;
        }
 
        /**
         * Generate a debug comment indicating diff generating time,
         * server node, and generator backend.
+        *
+        * @param String $generator : What diff engine was used
+        *
         * @return string
         */
        protected function debug( $generator = "internal" ) {
@@ -879,27 +922,32 @@ class DifferenceEngine extends ContextSource {
                        $data[] = wfHostname();
                }
                $data[] = wfTimestamp( TS_DB );
+
                return "<!-- diff generator: " .
-               implode( " ",
-               array_map(
-                                       "htmlspecialchars",
-               $data ) ) .
+                       implode( " ", array_map( "htmlspecialchars", $data ) ) .
                        " -->\n";
        }
 
        /**
         * Replace line numbers with the text in the user's language
+        *
+        * @param String $text
+        *
         * @return mixed
         */
        function localiseLineNumbers( $text ) {
-               return preg_replace_callback( '/<!--LINE (\d+)-->/',
-               array( &$this, 'localiseLineNumbersCb' ), $text );
+               return preg_replace_callback(
+                       '/<!--LINE (\d+)-->/',
+                       array( &$this, 'localiseLineNumbersCb' ),
+                       $text
+               );
        }
 
        function localiseLineNumbersCb( $matches ) {
                if ( $matches[1] === '1' && $this->mReducedLineNumbers ) {
                        return '';
                }
+
                return $this->msg( 'lineno' )->numParams( $matches[1] )->escaped();
        }
 
@@ -927,8 +975,10 @@ class DifferenceEngine extends ContextSource {
                if ( $nEdits > 0 ) {
                        $limit = 100; // use diff-multi-manyusers if too many users
                        $numUsers = $this->mNewPage->countAuthorsBetween( $oldRev, $newRev, $limit );
+
                        return self::intermediateEditsMsg( $nEdits, $numUsers, $limit );
                }
+
                return ''; // nothing
        }
 
@@ -946,6 +996,7 @@ class DifferenceEngine extends ContextSource {
                } else {
                        $msg = 'diff-multi';
                }
+
                return wfMessage( $msg )->numParams( $numEdits, $numUsers )->parse();
        }
 
@@ -1008,6 +1059,13 @@ class DifferenceEngine extends ContextSource {
        /**
         * Add the header to a diff body
         *
+        * @param string $diff Diff body
+        * @param string $otitle Old revision header
+        * @param string $ntitle New revision header
+        * @param string $multi Notice telling user that there are intermediate
+        *   revisions between the ones being compared
+        * @param string $notice Other notices, e.g. that user is viewing deleted content
+        *
         * @return string
         */
        function addHeader( $diff, $otitle, $ntitle, $multi = '', $notice = '' ) {
@@ -1136,7 +1194,10 @@ class DifferenceEngine extends ContextSource {
                        $this->mNewid = 0;
                }
 
-               wfRunHooks( 'NewDifferenceEngine', array( $this->getTitle(), &$this->mOldid, &$this->mNewid, $old, $new ) );
+               wfRunHooks(
+                       'NewDifferenceEngine',
+                       array( $this->getTitle(), &$this->mOldid, &$this->mNewid, $old, $new )
+               );
        }
 
        /**
diff --git a/includes/diff/TableDiffFormatter.php b/includes/diff/TableDiffFormatter.php
new file mode 100644 (file)
index 0000000..5f28627
--- /dev/null
@@ -0,0 +1,186 @@
+<?php
+/**
+ * Portions taken from phpwiki-1.3.3.
+ *
+ * Copyright © 2000, 2001 Geoffrey T. Dairiki <dairiki@dairiki.org>
+ * You may copy this code freely under the conditions of the GPL.
+ *
+ * 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 DifferenceEngine
+ */
+
+/**
+ * MediaWiki default table style diff formatter
+ * @todo document
+ * @private
+ * @ingroup DifferenceEngine
+ */
+class TableDiffFormatter extends DiffFormatter {
+       function __construct() {
+               $this->leadingContextLines = 2;
+               $this->trailingContextLines = 2;
+       }
+
+       /**
+        * @static
+        * @param $msg
+        * @return mixed
+        */
+       public static function escapeWhiteSpace( $msg ) {
+               $msg = preg_replace( '/^ /m', '&#160; ', $msg );
+               $msg = preg_replace( '/ $/m', ' &#160;', $msg );
+               $msg = preg_replace( '/  /', '&#160; ', $msg );
+
+               return $msg;
+       }
+
+       /**
+        * @param $xbeg
+        * @param $xlen
+        * @param $ybeg
+        * @param $ylen
+        * @return string
+        */
+       protected function blockHeader( $xbeg, $xlen, $ybeg, $ylen ) {
+               $r = '<tr><td colspan="2" class="diff-lineno"><!--LINE ' . $xbeg . "--></td>\n" .
+                       '<td colspan="2" class="diff-lineno"><!--LINE ' . $ybeg . "--></td></tr>\n";
+
+               return $r;
+       }
+
+       /**
+        * @param $header
+        */
+       protected function startBlock( $header ) {
+               echo $header;
+       }
+
+       protected function endBlock() {
+       }
+
+       protected function lines( $lines, $prefix = ' ', $color = 'white' ) {
+       }
+
+       /**
+        * HTML-escape parameter before calling this
+        * @param $line
+        * @return string
+        */
+       protected function addedLine( $line ) {
+               return $this->wrapLine( '+', 'diff-addedline', $line );
+       }
+
+       /**
+        * HTML-escape parameter before calling this
+        * @param $line
+        * @return string
+        */
+       protected function deletedLine( $line ) {
+               return $this->wrapLine( '−', 'diff-deletedline', $line );
+       }
+
+       /**
+        * HTML-escape parameter before calling this
+        * @param $line
+        * @return string
+        */
+       protected function contextLine( $line ) {
+               return $this->wrapLine( '&#160;', 'diff-context', $line );
+       }
+
+       /**
+        * @param $marker
+        * @param $class
+        * @param $line
+        * @return string
+        */
+       protected function wrapLine( $marker, $class, $line ) {
+               if ( $line !== '' ) {
+                       // The <div> wrapper is needed for 'overflow: auto' style to scroll properly
+                       $line = Xml::tags( 'div', null, $this->escapeWhiteSpace( $line ) );
+               }
+
+               return "<td class='diff-marker'>$marker</td><td class='$class'>$line</td>";
+       }
+
+       /**
+        * @return string
+        */
+       protected function emptyLine() {
+               return '<td colspan="2">&#160;</td>';
+       }
+
+       /**
+        * @param $lines array
+        */
+       protected function added( $lines ) {
+               foreach ( $lines as $line ) {
+                       echo '<tr>' . $this->emptyLine() .
+                               $this->addedLine( '<ins class="diffchange">' .
+                                       htmlspecialchars( $line ) . '</ins>' ) . "</tr>\n";
+               }
+       }
+
+       /**
+        * @param $lines
+        */
+       protected function deleted( $lines ) {
+               foreach ( $lines as $line ) {
+                       echo '<tr>' . $this->deletedLine( '<del class="diffchange">' .
+                                       htmlspecialchars( $line ) . '</del>' ) .
+                               $this->emptyLine() . "</tr>\n";
+               }
+       }
+
+       /**
+        * @param $lines
+        */
+       protected function context( $lines ) {
+               foreach ( $lines as $line ) {
+                       echo '<tr>' .
+                               $this->contextLine( htmlspecialchars( $line ) ) .
+                               $this->contextLine( htmlspecialchars( $line ) ) . "</tr>\n";
+               }
+       }
+
+       /**
+        * @param $orig
+        * @param $closing
+        */
+       protected function changed( $orig, $closing ) {
+               wfProfileIn( __METHOD__ );
+
+               $diff = new WordLevelDiff( $orig, $closing );
+               $del = $diff->orig();
+               $add = $diff->closing();
+
+               # Notice that WordLevelDiff returns HTML-escaped output.
+               # Hence, we will be calling addedLine/deletedLine without HTML-escaping.
+
+               while ( $line = array_shift( $del ) ) {
+                       $aline = array_shift( $add );
+                       echo '<tr>' . $this->deletedLine( $line ) .
+                               $this->addedLine( $aline ) . "</tr>\n";
+               }
+               foreach ( $add as $line ) { # If any leftovers
+                       echo '<tr>' . $this->emptyLine() .
+                               $this->addedLine( $line ) . "</tr>\n";
+               }
+               wfProfileOut( __METHOD__ );
+       }
+}
diff --git a/includes/diff/UnifiedDiffFormatter.php b/includes/diff/UnifiedDiffFormatter.php
new file mode 100644 (file)
index 0000000..0a86ccc
--- /dev/null
@@ -0,0 +1,71 @@
+<?php
+/**
+ * Portions taken from phpwiki-1.3.3.
+ *
+ * Copyright © 2000, 2001 Geoffrey T. Dairiki <dairiki@dairiki.org>
+ * You may copy this code freely under the conditions of the GPL.
+ *
+ * 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 DifferenceEngine
+ */
+
+/**
+ * A formatter that outputs unified diffs
+ * @ingroup DifferenceEngine
+ */
+class UnifiedDiffFormatter extends DiffFormatter {
+       /** @var int */
+       protected $leadingContextLines = 2;
+
+       /** @var int */
+       protected $trailingContextLines = 2;
+
+       /**
+        * @param $lines
+        */
+       protected function added( $lines ) {
+               $this->lines( $lines, '+' );
+       }
+
+       /**
+        * @param $lines
+        */
+       protected function deleted( $lines ) {
+               $this->lines( $lines, '-' );
+       }
+
+       /**
+        * @param $orig
+        * @param $closing
+        */
+       protected function changed( $orig, $closing ) {
+               $this->deleted( $orig );
+               $this->added( $closing );
+       }
+
+       /**
+        * @param $xbeg
+        * @param $xlen
+        * @param $ybeg
+        * @param $ylen
+        * @return string
+        */
+       protected function blockHeader( $xbeg, $xlen, $ybeg, $ylen ) {
+               return "@@ -$xbeg,$xlen +$ybeg,$ylen @@";
+       }
+}
index ea6f6e5..7c019b0 100644 (file)
@@ -138,8 +138,9 @@ class WikiDiff3 {
                         */
                        $max = min( $this->m, $this->n );
                        for ( $forwardBound = 0; $forwardBound < $max
-                                       && $this->from[$forwardBound] === $this->to[$forwardBound];
-                                       ++$forwardBound ) {
+                               && $this->from[$forwardBound] === $this->to[$forwardBound];
+                               ++$forwardBound
+                       ) {
                                $this->removed[$forwardBound] = $this->added[$forwardBound] = false;
                        }
 
@@ -147,7 +148,8 @@ class WikiDiff3 {
                        $backBoundL2 = $this->n - 1;
 
                        while ( $backBoundL1 >= $forwardBound && $backBoundL2 >= $forwardBound
-                                       && $this->from[$backBoundL1] === $this->to[$backBoundL2] ) {
+                               && $this->from[$backBoundL1] === $this->to[$backBoundL2]
+                       ) {
                                $this->removed[$backBoundL1--] = $this->added[$backBoundL2--] = false;
                        }
 
@@ -156,8 +158,14 @@ class WikiDiff3 {
                        $snake = array( 0, 0, 0 );
 
                        $this->length = $forwardBound + $this->m - $backBoundL1 - 1
-                               + $this->lcs_rec( $forwardBound, $backBoundL1,
-                               $forwardBound, $backBoundL2, $V, $snake );
+                               + $this->lcs_rec(
+                                       $forwardBound,
+                                       $backBoundL1,
+                                       $forwardBound,
+                                       $backBoundL2,
+                                       $V,
+                                       $snake
+                       );
                }
 
                $this->m = $m;
@@ -189,8 +197,9 @@ class WikiDiff3 {
                while ( $xi < $this->m || $yi < $this->n ) {
                        // Matching "snake".
                        while ( $xi < $this->m && $yi < $this->n
-                                       && !$this->removed[$xi]
-                                       && !$this->added[$yi] ) {
+                               && !$this->removed[$xi]
+                               && !$this->added[$yi]
+                       ) {
                                ++$xi;
                                ++$yi;
                        }
@@ -206,10 +215,10 @@ class WikiDiff3 {
                        }
 
                        if ( $xi > $xstart || $yi > $ystart ) {
-                               $ranges[] = new RangeDifference( $xstart, $xi,
-                                                               $ystart, $yi );
+                               $ranges[] = new RangeDifference( $xstart, $xi, $ystart, $yi );
                        }
                }
+
                return $ranges;
        }
 
@@ -220,7 +229,7 @@ class WikiDiff3 {
                }
 
                $d = $this->find_middle_snake( $bottoml1, $topl1, $bottoml2,
-                                                       $topl2, $V, $snake );
+                       $topl2, $V, $snake );
 
                // need to store these so we don't lose them when they're
                // overwritten by the recursion
@@ -236,9 +245,9 @@ class WikiDiff3 {
                if ( $d > 1 ) {
                        return $len
                        + $this->lcs_rec( $bottoml1, $startx - 1, $bottoml2,
-                                                       $starty - 1, $V, $snake )
+                               $starty - 1, $V, $snake )
                        + $this->lcs_rec( $startx + $len, $topl1, $starty + $len,
-                                                       $topl2, $V, $snake );
+                               $topl2, $V, $snake );
                } elseif ( $d == 1 ) {
                        /*
                         * In this case the sequences differ by exactly 1 line. We have
@@ -250,8 +259,10 @@ class WikiDiff3 {
                                $this->removed[$bottoml1 + $i] =
                                        $this->added[$bottoml2 + $i] = false;
                        }
+
                        return $max + $len;
                }
+
                return $len;
        }
 
@@ -263,8 +274,8 @@ class WikiDiff3 {
                $snake0 = &$snake[0];
                $snake1 = &$snake[1];
                $snake2 = &$snake[2];
-               $bottoml1_min_1 = $bottoml1 -1;
-               $bottoml2_min_1 = $bottoml2 -1;
+               $bottoml1_min_1 = $bottoml1 - 1;
+               $bottoml2_min_1 = $bottoml2 - 1;
                $N = $topl1 - $bottoml1_min_1;
                $M = $topl2 - $bottoml2_min_1;
                $delta = $N - $M;
@@ -307,7 +318,8 @@ class WikiDiff3 {
                                // compute forward furthest reaching paths
                                for ( $k = $start_diag; $k <= $end_diag; $k += 2 ) {
                                        if ( $k == -$d || ( $k < $d
-                                                       && $V0[$limit_min_1 + $k] < $V0[$limit_plus_1 + $k] ) ) {
+                                                       && $V0[$limit_min_1 + $k] < $V0[$limit_plus_1 + $k] )
+                                       ) {
                                                $x = $V0[$limit_plus_1 + $k];
                                        } else {
                                                $x = $V0[$limit_min_1 + $k] + 1;
@@ -320,12 +332,13 @@ class WikiDiff3 {
                                                ++$absx;
                                                ++$absy;
                                        }
-                                       $x = $absx -$bottoml1;
+                                       $x = $absx - $bottoml1;
 
-                                       $snake2 = $absx -$snake0;
+                                       $snake2 = $absx - $snake0;
                                        $V0[$limit + $k] = $x;
                                        if ( $k >= $delta - $d + 1 && $k <= $delta + $d - 1
-                                                       && $x >= $V1[$limit + $k - $delta] ) {
+                                               && $x >= $V1[$limit + $k - $delta]
+                                       ) {
                                                return 2 * $d - 1;
                                        }
 
@@ -345,7 +358,8 @@ class WikiDiff3 {
                                // compute backward furthest reaching paths
                                for ( $k = $start_diag; $k <= $end_diag; $k += 2 ) {
                                        if ( $k == $d
-                                       || ( $k != -$d && $V1[$limit_min_1 + $k] < $V1[$limit_plus_1 + $k] ) ) {
+                                               || ( $k != -$d && $V1[$limit_min_1 + $k] < $V1[$limit_plus_1 + $k] )
+                                       ) {
                                                $x = $V1[$limit_min_1 + $k];
                                        } else {
                                                $x = $V1[$limit_plus_1 + $k] - 1;
@@ -355,7 +369,8 @@ class WikiDiff3 {
 
                                        $snake2 = 0;
                                        while ( $x > 0 && $y > 0
-                                       && $from[$x + $bottoml1_min_1] === $to[$y + $bottoml2_min_1] ) {
+                                               && $from[$x + $bottoml1_min_1] === $to[$y + $bottoml2_min_1]
+                                       ) {
                                                --$x;
                                                --$y;
                                                ++$snake2;
@@ -380,7 +395,8 @@ class WikiDiff3 {
                                // compute forward furthest reaching paths
                                for ( $k = $start_diag; $k <= $end_diag; $k += 2 ) {
                                        if ( $k == -$d
-                                       || ( $k < $d && $V0[$limit_min_1 + $k] < $V0[$limit_plus_1 + $k] ) ) {
+                                               || ( $k < $d && $V0[$limit_min_1 + $k] < $V0[$limit_plus_1 + $k] )
+                                       ) {
                                                $x = $V0[$limit_plus_1 + $k];
                                        } else {
                                                $x = $V0[$limit_min_1 + $k] + 1;
@@ -393,14 +409,14 @@ class WikiDiff3 {
                                                ++$absx;
                                                ++$absy;
                                        }
-                                       $x = $absx -$bottoml1;
-                                       $snake2 = $absx -$snake0;
+                                       $x = $absx - $bottoml1;
+                                       $snake2 = $absx - $snake0;
                                        $V0[$limit + $k] = $x;
 
                                        // check to see if we can cut down the diagonal range
                                        if ( $x >= $N && $end_forward > $k - 1 ) {
                                                $end_forward = $k - 1;
-                                       } elseif ( $absy -$bottoml2 >= $M ) {
+                                       } elseif ( $absy - $bottoml2 >= $M ) {
                                                $start_forward = $k + 1;
                                                $value_to_add_forward = 0;
                                        }
@@ -413,7 +429,8 @@ class WikiDiff3 {
                                // compute backward furthest reaching paths
                                for ( $k = $start_diag; $k <= $end_diag; $k += 2 ) {
                                        if ( $k == $d
-                                       || ( $k != -$d && $V1[$limit_min_1 + $k] < $V1[$limit_plus_1 + $k] ) ) {
+                                               || ( $k != -$d && $V1[$limit_min_1 + $k] < $V1[$limit_plus_1 + $k] )
+                                       ) {
                                                $x = $V1[$limit_min_1 + $k];
                                        } else {
                                                $x = $V1[$limit_plus_1 + $k] - 1;
@@ -423,7 +440,8 @@ class WikiDiff3 {
 
                                        $snake2 = 0;
                                        while ( $x > 0 && $y > 0
-                                                       && $from[$x + $bottoml1_min_1] === $to[$y + $bottoml2_min_1] ) {
+                                               && $from[$x + $bottoml1_min_1] === $to[$y + $bottoml2_min_1]
+                                       ) {
                                                --$x;
                                                --$y;
                                                ++$snake2;
@@ -431,9 +449,11 @@ class WikiDiff3 {
                                        $V1[$limit + $k] = $x;
 
                                        if ( $k >= -$delta - $d && $k <= $d - $delta
-                                                       && $x <= $V0[$limit + $k + $delta] ) {
+                                               && $x <= $V0[$limit + $k + $delta]
+                                       ) {
                                                $snake0 = $bottoml1 + $x;
                                                $snake1 = $bottoml2 + $y;
+
                                                return 2 * $d;
                                        }
 
@@ -460,6 +480,7 @@ class WikiDiff3 {
                $snake2 = 0;
                wfDebug( "Computing the LCS is too expensive. Using a heuristic.\n" );
                $this->heuristicUsed = true;
+
                return 5; /*
                * HACK: since we didn't really finish the LCS computation
                * we don't really know the length of the SES. We don't do
@@ -554,11 +575,11 @@ class WikiDiff3 {
        public function getLcsLength() {
                if ( $this->heuristicUsed && !$this->lcsLengthCorrectedForHeuristic ) {
                        $this->lcsLengthCorrectedForHeuristic = true;
-                       $this->length = $this->m -array_sum( $this->added );
+                       $this->length = $this->m - array_sum( $this->added );
                }
+
                return $this->length;
        }
-
 }
 
 /**
@@ -568,13 +589,22 @@ class WikiDiff3 {
  * @ingroup DifferenceEngine
  */
 class RangeDifference {
-
+       /** @var int */
        public $leftstart;
+
+       /** @var int */
        public $leftend;
+
+       /** @var int */
        public $leftlength;
 
+       /** @var int */
        public $rightstart;
+
+       /** @var int */
        public $rightend;
+
+       /** @var int */
        public $rightlength;
 
        function __construct( $leftstart, $leftend, $rightstart, $rightend ) {
index 02bdcb5..6ab1f8c 100644 (file)
@@ -61,7 +61,7 @@ abstract class ExternalStoreMedium {
                        // Dont return when false to allow for simpler implementations.
                        // errored urls are handled in ExternalStore::batchFetchFromURLs
                        if ( $data !== false ) {
-                               $retval[$urls] = $data;
+                               $retval[$url] = $data;
                        }
                }
                return $retval;
index aa48679..1721007 100644 (file)
@@ -63,7 +63,7 @@ class ExternalStoreMwstore extends ExternalStoreMedium {
                }
                $blobs = array();
                foreach ( $pathsByBackend as $backendName => $paths ) {
-                       $be = FileBackendGroup::get( $backendName );
+                       $be = FileBackendGroup::singleton()->get( $backendName );
                        $blobs = $blobs + $be->getFileContentsMulti( array( 'srcs' => $paths ) );
                }
                return $blobs;
index 8f0a133..3a0aa97 100644 (file)
  * @ingroup FileBackend
  */
 class FSFile {
-       protected $path; // path to file
-       protected $sha1Base36; // file SHA-1 in base 36
+       /** @var string Path to file */
+       protected $path;
+
+       /** @var string File SHA-1 in base 36  */
+       protected $sha1Base36;
 
        /**
         * Sets up the file object
@@ -82,6 +85,7 @@ class FSFile {
                if ( $timestamp !== false ) {
                        $timestamp = wfTimestamp( TS_MW, $timestamp );
                }
+
                return $timestamp;
        }
 
@@ -98,7 +102,7 @@ class FSFile {
         * Get an associative array containing information about
         * a file with the given storage path.
         *
-        * @param Mixed $ext: the file extension, or true to extract it from the filename.
+        * @param mixed $ext The file extension, or true to extract it from the filename.
         *             Set it to false to ignore the extension.
         *
         * @return array
@@ -147,13 +151,14 @@ class FSFile {
                }
 
                wfProfileOut( __METHOD__ );
+
                return $info;
        }
 
        /**
         * Placeholder file properties to use for files that don't exist
         *
-        * @return Array
+        * @return array
         */
        public static function placeholderProps() {
                $info = array();
@@ -165,6 +170,7 @@ class FSFile {
                $info['width'] = 0;
                $info['height'] = 0;
                $info['bits'] = 0;
+
                return $info;
        }
 
@@ -172,7 +178,7 @@ class FSFile {
         * Exract image size information
         *
         * @param array $gis
-        * @return Array
+        * @return array
         */
        protected function extractImageSizeInfo( array $gis ) {
                $info = array();
@@ -184,6 +190,7 @@ class FSFile {
                } else {
                        $info['bits'] = 0;
                }
+
                return $info;
        }
 
@@ -202,6 +209,7 @@ class FSFile {
 
                if ( $this->sha1Base36 !== null && !$recache ) {
                        wfProfileOut( __METHOD__ );
+
                        return $this->sha1Base36;
                }
 
@@ -214,6 +222,7 @@ class FSFile {
                }
 
                wfProfileOut( __METHOD__ );
+
                return $this->sha1Base36;
        }
 
@@ -225,6 +234,7 @@ class FSFile {
         */
        public static function extensionFromPath( $path ) {
                $i = strrpos( $path, '.' );
+
                return strtolower( $i ? substr( $path, $i + 1 ) : '' );
        }
 
@@ -232,12 +242,13 @@ class FSFile {
         * Get an associative array containing information about a file in the local filesystem.
         *
         * @param string $path absolute local filesystem path
-        * @param Mixed $ext: the file extension, or true to extract it from the filename.
-        *             Set it to false to ignore the extension.
+        * @param mixed $ext The file extension, or true to extract it from the filename.
+        *   Set it to false to ignore the extension.
         * @return array
         */
        public static function getPropsFromPath( $path, $ext = true ) {
                $fsFile = new self( $path );
+
                return $fsFile->getProps( $ext );
        }
 
@@ -253,6 +264,7 @@ class FSFile {
         */
        public static function getSha1Base36FromPath( $path ) {
                $fsFile = new self( $path );
+
                return $fsFile->getSha1Base36();
        }
 }
index 6d64216..993e2ba 100644 (file)
  * @since 1.19
  */
 class FSFileBackend extends FileBackendStore {
-       protected $basePath; // string; directory holding the container directories
-       /** @var Array Map of container names to root paths */
-       protected $containerPaths = array(); // for custom container paths
-       protected $fileMode; // integer; file permission mode
-       protected $fileOwner; // string; required OS username to own files
-       protected $currentUser; // string; OS username running this script
-
-       /** @var Array */
+       /** @var string Directory holding the container directories */
+       protected $basePath;
+
+       /** @var array Map of container names to root paths for custom container paths */
+       protected $containerPaths = array();
+
+       /** @var int File permission mode */
+       protected $fileMode;
+
+       /** @var string Required OS username to own files */
+       protected $fileOwner;
+
+       /** @var string OS username running this script */
+       protected $currentUser;
+
+       /** @var array */
        protected $hadWarningErrors = array();
 
        /**
@@ -90,6 +98,7 @@ class FSFileBackend extends FileBackendStore {
                                return $relStoragePath;
                        }
                }
+
                return null;
        }
 
@@ -125,6 +134,7 @@ class FSFileBackend extends FileBackendStore {
                } elseif ( isset( $this->basePath ) ) {
                        return "{$this->basePath}/{$fullCont}";
                }
+
                return null; // no container base path defined
        }
 
@@ -144,6 +154,7 @@ class FSFileBackend extends FileBackendStore {
                if ( $relPath != '' ) {
                        $fsPath .= "/{$relPath}";
                }
+
                return $fsPath;
        }
 
@@ -174,6 +185,7 @@ class FSFileBackend extends FileBackendStore {
                $dest = $this->resolveToFSPath( $params['dst'] );
                if ( $dest === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dst'] );
+
                        return $status;
                }
 
@@ -181,6 +193,7 @@ class FSFileBackend extends FileBackendStore {
                        $tempFile = TempFSFile::factory( 'create_', 'tmp' );
                        if ( !$tempFile ) {
                                $status->fatal( 'backend-fail-create', $params['dst'] );
+
                                return $status;
                        }
                        $this->trapWarnings();
@@ -188,6 +201,7 @@ class FSFileBackend extends FileBackendStore {
                        $this->untrapWarnings();
                        if ( $bytes === false ) {
                                $status->fatal( 'backend-fail-create', $params['dst'] );
+
                                return $status;
                        }
                        $cmd = implode( ' ', array(
@@ -203,6 +217,7 @@ class FSFileBackend extends FileBackendStore {
                        $this->untrapWarnings();
                        if ( $bytes === false ) {
                                $status->fatal( 'backend-fail-create', $params['dst'] );
+
                                return $status;
                        }
                        $this->chmod( $dest );
@@ -227,6 +242,7 @@ class FSFileBackend extends FileBackendStore {
                $dest = $this->resolveToFSPath( $params['dst'] );
                if ( $dest === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dst'] );
+
                        return $status;
                }
 
@@ -248,6 +264,7 @@ class FSFileBackend extends FileBackendStore {
                                        trigger_error( __METHOD__ . ": copy() failed but returned true." );
                                }
                                $status->fatal( 'backend-fail-store', $params['src'], $params['dst'] );
+
                                return $status;
                        }
                        $this->chmod( $dest );
@@ -272,12 +289,14 @@ class FSFileBackend extends FileBackendStore {
                $source = $this->resolveToFSPath( $params['src'] );
                if ( $source === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['src'] );
+
                        return $status;
                }
 
                $dest = $this->resolveToFSPath( $params['dst'] );
                if ( $dest === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dst'] );
+
                        return $status;
                }
 
@@ -285,6 +304,7 @@ class FSFileBackend extends FileBackendStore {
                        if ( empty( $params['ignoreMissingSource'] ) ) {
                                $status->fatal( 'backend-fail-copy', $params['src'] );
                        }
+
                        return $status; // do nothing; either OK or bad status
                }
 
@@ -308,6 +328,7 @@ class FSFileBackend extends FileBackendStore {
                                        trigger_error( __METHOD__ . ": copy() failed but returned true." );
                                }
                                $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
+
                                return $status;
                        }
                        $this->chmod( $dest );
@@ -332,12 +353,14 @@ class FSFileBackend extends FileBackendStore {
                $source = $this->resolveToFSPath( $params['src'] );
                if ( $source === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['src'] );
+
                        return $status;
                }
 
                $dest = $this->resolveToFSPath( $params['dst'] );
                if ( $dest === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dst'] );
+
                        return $status;
                }
 
@@ -345,6 +368,7 @@ class FSFileBackend extends FileBackendStore {
                        if ( empty( $params['ignoreMissingSource'] ) ) {
                                $status->fatal( 'backend-fail-move', $params['src'] );
                        }
+
                        return $status; // do nothing; either OK or bad status
                }
 
@@ -362,6 +386,7 @@ class FSFileBackend extends FileBackendStore {
                        clearstatcache(); // file no longer at source
                        if ( !$ok ) {
                                $status->fatal( 'backend-fail-move', $params['src'], $params['dst'] );
+
                                return $status;
                        }
                }
@@ -385,6 +410,7 @@ class FSFileBackend extends FileBackendStore {
                $source = $this->resolveToFSPath( $params['src'] );
                if ( $source === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['src'] );
+
                        return $status;
                }
 
@@ -392,6 +418,7 @@ class FSFileBackend extends FileBackendStore {
                        if ( empty( $params['ignoreMissingSource'] ) ) {
                                $status->fatal( 'backend-fail-delete', $params['src'] );
                        }
+
                        return $status; // do nothing; either OK or bad status
                }
 
@@ -407,6 +434,7 @@ class FSFileBackend extends FileBackendStore {
                        $this->untrapWarnings();
                        if ( !$ok ) {
                                $status->fatal( 'backend-fail-delete', $params['src'] );
+
                                return $status;
                        }
                }
@@ -424,6 +452,12 @@ class FSFileBackend extends FileBackendStore {
                }
        }
 
+       /**
+        * @param string $fullCont
+        * @param $dirRel
+        * @param array $params
+        * @return Status
+        */
        protected function doPrepareInternal( $fullCont, $dirRel, array $params ) {
                $status = Status::newGood();
                list( , $shortCont, ) = FileBackend::splitStoragePath( $params['dir'] );
@@ -444,6 +478,7 @@ class FSFileBackend extends FileBackendStore {
                if ( is_dir( $dir ) && !$existed ) {
                        $status->merge( $this->doSecureInternal( $fullCont, $dirRel, $params ) );
                }
+
                return $status;
        }
 
@@ -471,6 +506,7 @@ class FSFileBackend extends FileBackendStore {
                                $status->fatal( 'backend-fail-create', "{$storeDir}/.htaccess" );
                        }
                }
+
                return $status;
        }
 
@@ -498,6 +534,7 @@ class FSFileBackend extends FileBackendStore {
                        }
                        $this->untrapWarnings();
                }
+
                return $status;
        }
 
@@ -511,6 +548,7 @@ class FSFileBackend extends FileBackendStore {
                        rmdir( $dir ); // remove directory if empty
                }
                $this->untrapWarnings();
+
                return $status;
        }
 
@@ -557,7 +595,10 @@ class FSFileBackend extends FileBackendStore {
 
        /**
         * @see FileBackendStore::getDirectoryListInternal()
-        * @return Array|null
+        * @param string $fullCont
+        * @param string $dirRel
+        * @param array $params
+        * @return array|null
         */
        public function getDirectoryListInternal( $fullCont, $dirRel, array $params ) {
                list( , $shortCont, ) = FileBackend::splitStoragePath( $params['dir'] );
@@ -566,17 +607,23 @@ class FSFileBackend extends FileBackendStore {
                $exists = is_dir( $dir );
                if ( !$exists ) {
                        wfDebug( __METHOD__ . "() given directory does not exist: '$dir'\n" );
+
                        return array(); // nothing under this dir
                } elseif ( !is_readable( $dir ) ) {
                        wfDebug( __METHOD__ . "() given directory is unreadable: '$dir'\n" );
+
                        return null; // bad permissions?
                }
+
                return new FSFileBackendDirList( $dir, $params );
        }
 
        /**
         * @see FileBackendStore::getFileListInternal()
-        * @return Array|FSFileBackendFileList|null
+        * @param string $fullCont
+        * @param string $dirRel
+        * @param array $params
+        * @return array|FSFileBackendFileList|null
         */
        public function getFileListInternal( $fullCont, $dirRel, array $params ) {
                list( , $shortCont, ) = FileBackend::splitStoragePath( $params['dir'] );
@@ -585,11 +632,14 @@ class FSFileBackend extends FileBackendStore {
                $exists = is_dir( $dir );
                if ( !$exists ) {
                        wfDebug( __METHOD__ . "() given directory does not exist: '$dir'\n" );
+
                        return array(); // nothing under this dir
                } elseif ( !is_readable( $dir ) ) {
                        wfDebug( __METHOD__ . "() given directory is unreadable: '$dir'\n" );
+
                        return null; // bad permissions?
                }
+
                return new FSFileBackendFileList( $dir, $params );
        }
 
@@ -718,8 +768,6 @@ class FSFileBackend extends FileBackendStore {
 
        /**
         * Listen for E_WARNING errors and track whether any happen
-        *
-        * @return void
         */
        protected function trapWarnings() {
                $this->hadWarningErrors[] = false; // push to stack
@@ -737,7 +785,7 @@ class FSFileBackend extends FileBackendStore {
        }
 
        /**
-        * @param integer $errno
+        * @param int $errno
         * @param string $errstr
         * @return bool
         * @access private
@@ -745,6 +793,7 @@ class FSFileBackend extends FileBackendStore {
        public function handleWarning( $errno, $errstr ) {
                wfDebugLog( 'FSFileBackend', $errstr ); // more detailed error logging
                $this->hadWarningErrors[count( $this->hadWarningErrors ) - 1] = true;
+
                return true; // suppress from PHP handler
        }
 }
@@ -761,7 +810,7 @@ class FSFileOpHandle extends FileBackendStoreOpHandle {
         * @param array $params
         * @param string $call
         * @param string $cmd
-        * @param integer|null $chmodPath
+        * @param int|null $chmodPath
         */
        public function __construct(
                FSFileBackend $backend, array $params, $call, $cmd, $chmodPath = null
@@ -784,9 +833,14 @@ class FSFileOpHandle extends FileBackendStoreOpHandle {
 abstract class FSFileBackendList implements Iterator {
        /** @var Iterator */
        protected $iter;
-       protected $suffixStart; // integer
-       protected $pos = 0; // integer
-       /** @var Array */
+
+       /** @var int */
+       protected $suffixStart;
+
+       /** @var int */
+       protected $pos = 0;
+
+       /** @var array */
        protected $params = array();
 
        /**
@@ -823,6 +877,7 @@ abstract class FSFileBackendList implements Iterator {
                        # RecursiveDirectoryIterator extends FilesystemIterator.
                        # FilesystemIterator::SKIP_DOTS default is inconsistent in PHP 5.3.x.
                        $flags = FilesystemIterator::CURRENT_AS_SELF | FilesystemIterator::SKIP_DOTS;
+
                        return new RecursiveIteratorIterator(
                                new RecursiveDirectoryIterator( $dir, $flags ),
                                RecursiveIteratorIterator::CHILD_FIRST // include dirs
@@ -832,7 +887,7 @@ abstract class FSFileBackendList implements Iterator {
 
        /**
         * @see Iterator::key()
-        * @return integer
+        * @return int
         */
        public function key() {
                return $this->pos;
@@ -848,7 +903,7 @@ abstract class FSFileBackendList implements Iterator {
 
        /**
         * @see Iterator::next()
-        * @return void
+        * @throws FileBackendError
         */
        public function next() {
                try {
@@ -862,7 +917,7 @@ abstract class FSFileBackendList implements Iterator {
 
        /**
         * @see Iterator::rewind()
-        * @return void
+        * @throws FileBackendError
         */
        public function rewind() {
                $this->pos = 0;
@@ -885,13 +940,14 @@ abstract class FSFileBackendList implements Iterator {
        /**
         * Filter out items by advancing to the next ones
         */
-       protected function filterViaNext() {}
+       protected function filterViaNext() {
+       }
 
        /**
         * Return only the relative path and normalize slashes to FileBackend-style.
         * Uses the "real path" since the suffix is based upon that.
         *
-        * @param string $path
+        * @param string $dir
         * @return string
         */
        protected function getRelPath( $dir ) {
@@ -899,6 +955,7 @@ abstract class FSFileBackendList implements Iterator {
                if ( $path === false ) {
                        $path = $dir;
                }
+
                return strtr( substr( $path, $this->suffixStart ), '\\', '/' );
        }
 }
index 4bcaa7f..d042dc4 100644 (file)
  * @since 1.19
  */
 abstract class FileBackend {
-       protected $name; // string; unique backend name
-       protected $wikiId; // string; unique wiki name
-       protected $readOnly; // string; read-only explanation message
-       protected $parallelize; // string; when to do operations in parallel
-       protected $concurrency; // integer; how many operations can be done in parallel
+       /** @var  string Unique backend name */
+       protected $name;
+
+       /** @var string Unique wiki name */
+       protected $wikiId;
+
+       /** @var string Read-only explanation message */
+       protected $readOnly;
+
+       /** @var string When to do operations in parallel */
+       protected $parallelize;
+
+       /** @var int How many operations can be done in parallel */
+       protected $concurrency;
 
        /** @var LockManager */
        protected $lockManager;
+
        /** @var FileJournal */
        protected $fileJournal;
 
@@ -75,7 +85,7 @@ abstract class FileBackend {
         * Create a new backend instance from configuration.
         * This should only be called from within FileBackendGroup.
         *
-        * $config includes:
+        * @param array $config Parameters include:
         *   - name        : The unique name of this backend.
         *                   This should consist of alphanumberic, '-', and '_' characters.
         *                   This name should not be changed after use (e.g. with journaling).
@@ -93,8 +103,6 @@ abstract class FileBackend {
         *   - parallelize : When to do file operations in parallel (when possible).
         *                   Allowed values are "implicit", "explicit" and "off".
         *   - concurrency : How many file operations can be done in parallel.
-        *
-        * @param array $config
         * @throws MWException
         */
        public function __construct( array $config ) {
@@ -671,8 +679,7 @@ abstract class FileBackend {
         * otherwise safe from modification from other processes. Normally,
         * the file will be a new temp file, which should be adequate.
         *
-        * @param array $params Operation parameters
-        * $params include:
+        * @param array $params Operation parameters, include:
         *   - srcs        : ordered source storage paths (e.g. chunk1, chunk2, ...)
         *   - dst         : file system path to 0-byte temp file
         *   - parallelize : try to do operations in parallel when possible
@@ -691,8 +698,7 @@ abstract class FileBackend {
         * However, setting them is not guaranteed to actually do anything.
         * Additional server configuration may be needed to achieve the desired effect.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - dir            : storage directory
         *   - noAccess       : try to deny file access (since 1.20)
         *   - noListing      : try to deny file listing (since 1.20)
@@ -721,8 +727,7 @@ abstract class FileBackend {
         * This is not guaranteed to actually make files or listings publically hidden.
         * Additional server configuration may be needed to achieve the desired effect.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - dir            : storage directory
         *   - noAccess       : try to deny file access
         *   - noListing      : try to deny file listing
@@ -752,8 +757,7 @@ abstract class FileBackend {
         * This is not guaranteed to actually make files or listings publically viewable.
         * Additional server configuration may be needed to achieve the desired effect.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - dir            : storage directory
         *   - access         : try to allow file access
         *   - listing        : try to allow file listing
@@ -779,8 +783,7 @@ abstract class FileBackend {
         * Backends using key/value stores may do nothing unless the directory
         * is that of an empty container, in which case it will be deleted.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - dir            : storage directory
         *   - recursive      : recursively delete empty subdirectories first (since 1.20)
         *   - bypassReadOnly : allow writes in read-only mode (since 1.20)
@@ -809,10 +812,11 @@ abstract class FileBackend {
        final protected function getScopedPHPBehaviorForOps() {
                if ( PHP_SAPI != 'cli' ) { // http://bugs.php.net/bug.php?id=47540
                        $old = ignore_user_abort( true ); // avoid half-finished operations
-                       return new ScopedCallback( function() use ( $old ) {
+                       return new ScopedCallback( function () use ( $old ) {
                                ignore_user_abort( $old );
                        } );
                }
+
                return null;
        }
 
@@ -820,8 +824,7 @@ abstract class FileBackend {
         * Check if a file exists at a storage path in the backend.
         * This returns false if only a directory exists at the path.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - src    : source storage path
         *   - latest : use the latest available data
         * @return bool|null Returns null on failure
@@ -831,8 +834,7 @@ abstract class FileBackend {
        /**
         * Get the last-modified timestamp of the file at a storage path.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - src    : source storage path
         *   - latest : use the latest available data
         * @return string|bool TS_MW timestamp or false on failure
@@ -843,8 +845,7 @@ abstract class FileBackend {
         * Get the contents of a file at a storage path in the backend.
         * This should be avoided for potentially large files.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - src    : source storage path
         *   - latest : use the latest available data
         * @return string|bool Returns false on failure
@@ -863,12 +864,11 @@ abstract class FileBackend {
         *
         * @see FileBackend::getFileContents()
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - srcs        : list of source storage paths
         *   - latest      : use the latest available data
         *   - parallelize : try to do operations in parallel when possible
-        * @return Array Map of (path name => string or false on failure)
+        * @return array Map of (path name => string or false on failure)
         * @since 1.20
         */
        abstract public function getFileContentsMulti( array $params );
@@ -876,11 +876,10 @@ abstract class FileBackend {
        /**
         * Get the size (bytes) of a file at a storage path in the backend.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - src    : source storage path
         *   - latest : use the latest available data
-        * @return integer|bool Returns false on failure
+        * @return int|bool Returns false on failure
         */
        abstract public function getFileSize( array $params );
 
@@ -892,19 +891,17 @@ abstract class FileBackend {
         *   - size   : the file size (bytes)
         * Additional values may be included for internal use only.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - src    : source storage path
         *   - latest : use the latest available data
-        * @return Array|bool|null Returns null on failure
+        * @return array|bool|null Returns null on failure
         */
        abstract public function getFileStat( array $params );
 
        /**
         * Get a SHA-1 hash of the file at a storage path in the backend.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - src    : source storage path
         *   - latest : use the latest available data
         * @return string|bool Hash string or false on failure
@@ -915,11 +912,10 @@ abstract class FileBackend {
         * Get the properties of the file at a storage path in the backend.
         * This gives the result of FSFile::getProps() on a local copy of the file.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - src    : source storage path
         *   - latest : use the latest available data
-        * @return Array Returns FSFile::placeholderProps() on failure
+        * @return array Returns FSFile::placeholderProps() on failure
         */
        abstract public function getFileProps( array $params );
 
@@ -930,8 +926,7 @@ abstract class FileBackend {
         * will be sent if streaming began, while none will be sent otherwise.
         * Implementations should flush the output buffer before sending data.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - src     : source storage path
         *   - headers : list of additional HTTP headers to send on success
         *   - latest  : use the latest available data
@@ -952,8 +947,7 @@ abstract class FileBackend {
         * In that later case, there are copies of the file that must stay in sync.
         * Additionally, further calls to this function may return the same file.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - src    : source storage path
         *   - latest : use the latest available data
         * @return FSFile|null Returns null on failure
@@ -972,12 +966,11 @@ abstract class FileBackend {
         *
         * @see FileBackend::getLocalReference()
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - srcs        : list of source storage paths
         *   - latest      : use the latest available data
         *   - parallelize : try to do operations in parallel when possible
-        * @return Array Map of (path name => FSFile or null on failure)
+        * @return array Map of (path name => FSFile or null on failure)
         * @since 1.20
         */
        abstract public function getLocalReferenceMulti( array $params );
@@ -987,8 +980,7 @@ abstract class FileBackend {
         * The temporary copy will have the same file extension as the source.
         * Temporary files may be purged when the file object falls out of scope.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - src    : source storage path
         *   - latest : use the latest available data
         * @return TempFSFile|null Returns null on failure
@@ -1007,12 +999,11 @@ abstract class FileBackend {
         *
         * @see FileBackend::getLocalCopy()
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - srcs        : list of source storage paths
         *   - latest      : use the latest available data
         *   - parallelize : try to do operations in parallel when possible
-        * @return Array Map of (path name => TempFSFile or null on failure)
+        * @return array Map of (path name => TempFSFile or null on failure)
         * @since 1.20
         */
        abstract public function getLocalCopyMulti( array $params );
@@ -1027,8 +1018,7 @@ abstract class FileBackend {
         * Otherwise, one would need to use getLocalReference(), which involves loading
         * the entire file on to local disk.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - src : source storage path
         *   - ttl : lifetime (seconds) if pre-authenticated; default is 1 day
         * @return string|null
@@ -1043,8 +1033,7 @@ abstract class FileBackend {
         *
         * Storage backends with eventual consistency might return stale data.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - dir : storage directory
         * @return bool|null Returns null on failure
         * @since 1.20
@@ -1063,8 +1052,7 @@ abstract class FileBackend {
         *
         * Failures during iteration can result in FileBackendError exceptions (since 1.22).
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - dir     : storage directory
         *   - topOnly : only return direct child dirs of the directory
         * @return Traversable|Array|null Returns null on failure
@@ -1080,8 +1068,7 @@ abstract class FileBackend {
         *
         * Failures during iteration can result in FileBackendError exceptions (since 1.22).
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - dir : storage directory
         * @return Traversable|Array|null Returns null on failure
         * @since 1.20
@@ -1102,8 +1089,7 @@ abstract class FileBackend {
         *
         * Failures during iteration can result in FileBackendError exceptions (since 1.22).
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - dir        : storage directory
         *   - topOnly    : only return direct child files of the directory (since 1.20)
         *   - adviseStat : set to true if stat requests will be made on the files (since 1.22)
@@ -1119,8 +1105,7 @@ abstract class FileBackend {
         *
         * Failures during iteration can result in FileBackendError exceptions (since 1.22).
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - dir        : storage directory
         *   - adviseStat : set to true if stat requests will be made on the files (since 1.22)
         * @return Traversable|Array|null Returns null on failure
@@ -1135,18 +1120,18 @@ abstract class FileBackend {
         * This should be used when stat calls will be made on a known list of a many files.
         *
         * @param array $paths Storage paths
-        * @return void
         */
-       public function preloadCache( array $paths ) {}
+       public function preloadCache( array $paths ) {
+       }
 
        /**
         * Invalidate any in-process file stat and property cache.
         * If $paths is given, then only the cache for those files will be cleared.
         *
         * @param array $paths Storage paths (optional)
-        * @return void
         */
-       public function clearCache( array $paths = null ) {}
+       public function clearCache( array $paths = null ) {
+       }
 
        /**
         * Lock the files at the given storage paths in the backend.
@@ -1155,11 +1140,12 @@ abstract class FileBackend {
         * Callers should consider using getScopedFileLocks() instead.
         *
         * @param array $paths Storage paths
-        * @param integer $type LockManager::LOCK_* constant
+        * @param int $type LockManager::LOCK_* constant
         * @return Status
         */
        final public function lockFiles( array $paths, $type ) {
                $paths = array_map( 'FileBackend::normalizeStoragePath', $paths );
+
                return $this->lockManager->lock( $paths, $type );
        }
 
@@ -1167,11 +1153,12 @@ abstract class FileBackend {
         * Unlock the files at the given storage paths in the backend.
         *
         * @param array $paths Storage paths
-        * @param integer $type LockManager::LOCK_* constant
+        * @param int $type LockManager::LOCK_* constant
         * @return Status
         */
        final public function unlockFiles( array $paths, $type ) {
                $paths = array_map( 'FileBackend::normalizeStoragePath', $paths );
+
                return $this->lockManager->unlock( $paths, $type );
        }
 
@@ -1186,7 +1173,7 @@ abstract class FileBackend {
         * @see ScopedLock::factory()
         *
         * @param array $paths List of storage paths or map of lock types to path lists
-        * @param integer|string $type LockManager::LOCK_* constant or "mixed"
+        * @param int|string $type LockManager::LOCK_* constant or "mixed"
         * @param Status $status Status to update on lock/unlock
         * @return ScopedLock|null Returns null on failure
         */
@@ -1198,6 +1185,7 @@ abstract class FileBackend {
                } else {
                        $paths = array_map( 'FileBackend::normalizeStoragePath', $paths );
                }
+
                return ScopedLock::factory( $this->lockManager, $paths, $type, $status );
        }
 
@@ -1214,7 +1202,7 @@ abstract class FileBackend {
         *
         * @param array $ops List of file operations to FileBackend::doOperations()
         * @param Status $status Status to update on lock/unlock
-        * @return Array List of ScopedFileLocks or null values
+        * @return array List of ScopedFileLocks or null values
         * @since 1.20
         */
        abstract public function getScopedLocksForOps( array $ops, Status $status );
@@ -1267,7 +1255,7 @@ abstract class FileBackend {
         * This does not do any path normalization or traversal checks.
         *
         * @param string $storagePath
-        * @return Array (backend, container, rel object) or (null, null, null)
+        * @return array (backend, container, rel object) or (null, null, null)
         */
        final public static function splitStoragePath( $storagePath ) {
                if ( self::isStoragePath( $storagePath ) ) {
@@ -1281,6 +1269,7 @@ abstract class FileBackend {
                                }
                        }
                }
+
                return array( null, null, null );
        }
 
@@ -1301,6 +1290,7 @@ abstract class FileBackend {
                                        : "mwstore://{$backend}/{$container}";
                        }
                }
+
                return null;
        }
 
@@ -1315,6 +1305,7 @@ abstract class FileBackend {
        final public static function parentStoragePath( $storagePath ) {
                $storagePath = dirname( $storagePath );
                list( , , $rel ) = self::splitStoragePath( $storagePath );
+
                return ( $rel === null ) ? null : $storagePath;
        }
 
@@ -1326,6 +1317,7 @@ abstract class FileBackend {
         */
        final public static function extensionFromPath( $path ) {
                $i = strrpos( $path, '.' );
+
                return strtolower( $i ? substr( $path, $i + 1 ) : '' );
        }
 
@@ -1395,6 +1387,7 @@ abstract class FileBackend {
                                return null;
                        }
                }
+
                return $path;
        }
 }
@@ -1403,4 +1396,5 @@ abstract class FileBackend {
  * @ingroup FileBackend
  * @since 1.22
  */
-class FileBackendError extends MWException {}
+class FileBackendError extends MWException {
+}
index be8a207..491424b 100644 (file)
  * @since 1.19
  */
 class FileBackendGroup {
-       /**
-        * @var FileBackendGroup
-        */
+       /** @var FileBackendGroup */
        protected static $instance = null;
 
-       /** @var Array (name => ('class' => string, 'config' => array, 'instance' => object)) */
+       /** @var array (name => ('class' => string, 'config' => array, 'instance' => object)) */
        protected $backends = array();
 
-       protected function __construct() {}
+       protected function __construct() {
+       }
 
        /**
         * @return FileBackendGroup
@@ -47,13 +46,12 @@ class FileBackendGroup {
                        self::$instance = new self();
                        self::$instance->initFromGlobals();
                }
+
                return self::$instance;
        }
 
        /**
         * Destroy the singleton instance
-        *
-        * @return void
         */
        public static function destroySingleton() {
                self::$instance = null;
@@ -61,8 +59,6 @@ class FileBackendGroup {
 
        /**
         * Register file backends from the global variables
-        *
-        * @return void
         */
        protected function initFromGlobals() {
                global $wgLocalFileRepo, $wgForeignFileRepos, $wgFileBackends;
@@ -116,8 +112,7 @@ class FileBackendGroup {
        /**
         * Register an array of file backend configurations
         *
-        * @param Array $configs
-        * @return void
+        * @param array $configs
         * @throws MWException
         */
        protected function register( array $configs ) {
@@ -159,6 +154,7 @@ class FileBackendGroup {
                        $config = $this->backends[$name]['config'];
                        $this->backends[$name]['instance'] = new $class( $config );
                }
+
                return $this->backends[$name]['instance'];
        }
 
@@ -166,7 +162,7 @@ class FileBackendGroup {
         * Get the config array for a backend object with a given name
         *
         * @param string $name
-        * @return Array
+        * @return array
         * @throws MWException
         */
        public function config( $name ) {
@@ -174,6 +170,7 @@ class FileBackendGroup {
                        throw new MWException( "No backend defined with the name `$name`." );
                }
                $class = $this->backends[$name]['class'];
+
                return array( 'class' => $class ) + $this->backends[$name]['config'];
        }
 
@@ -188,6 +185,7 @@ class FileBackendGroup {
                if ( $backend !== null && isset( $this->backends[$backend] ) ) {
                        return $this->get( $backend );
                }
+
                return null;
        }
 }
index 97584a7..b3c46c6 100644 (file)
  * @since 1.19
  */
 class FileBackendMultiWrite extends FileBackend {
-       /** @var Array Prioritized list of FileBackendStore objects */
-       protected $backends = array(); // array of (backend index => backends)
-       protected $masterIndex = -1; // integer; index of master backend
-       protected $syncChecks = 0; // integer; bitfield
-       protected $autoResync = false; // boolean
+       /** @var array Prioritized list of FileBackendStore objects.
+        * array of (backend index => backends)
+        */
+       protected $backends = array();
+
+       /** @var int Index of master backend  */
+       protected $masterIndex = -1;
+
+       /** @var int Bitfield */
+       protected $syncChecks = 0;
+
+       /** @var string|bool */
+       protected $autoResync = false;
 
-       /** @var Array */
+       /** @var array */
        protected $noPushDirConts = array();
-       protected $noPushQuickOps = false; // boolean
+
+       /** @var bool */
+       protected $noPushQuickOps = false;
 
        /* Possible internal backend consistency checks */
        const CHECK_SIZE = 1;
@@ -81,7 +91,7 @@ class FileBackendMultiWrite extends FileBackend {
         *   - noPushQuickOps : (hack) Only apply doQuickOperations() to the master backend.
         *   - noPushDirConts : (hack) Only apply directory functions to the master backend.
         *
-        * @param Array $config
+        * @param array $config
         * @throws MWException
         */
        public function __construct( array $config ) {
@@ -167,6 +177,7 @@ class FileBackendMultiWrite extends FileBackend {
                        // Try to resync the clone backends to the master on the spot...
                        if ( !$this->autoResync || !$this->resyncFiles( $relevantPaths )->isOK() ) {
                                $status->merge( $syncStatus );
+
                                return $status; // abort
                        }
                }
@@ -321,8 +332,8 @@ class FileBackendMultiWrite extends FileBackend {
                                        // already synced; nothing to do
                                } elseif ( $mSha1 !== false ) { // file is in master
                                        if ( $this->autoResync === 'conservative'
-                                               && $cStat && $cStat['mtime'] > $mStat['mtime'] )
-                                       {
+                                               && $cStat && $cStat['mtime'] > $mStat['mtime']
+                                       {
                                                $status->fatal( 'backend-fail-synced', $path );
                                                continue; // don't rollback data
                                        }
@@ -348,7 +359,7 @@ class FileBackendMultiWrite extends FileBackend {
         * Get a list of file storage paths to read or write for a list of operations
         *
         * @param array $ops Same format as doOperations()
-        * @return Array List of storage paths to files (does not include directories)
+        * @return array List of storage paths to files (does not include directories)
         */
        protected function fileStoragePathsForOps( array $ops ) {
                $paths = array();
@@ -357,8 +368,8 @@ class FileBackendMultiWrite extends FileBackend {
                                // For things like copy/move/delete with "ignoreMissingSource" and there
                                // is no source file, nothing should happen and there should be no errors.
                                if ( empty( $op['ignoreMissingSource'] )
-                                       || $this->fileExists( array( 'src' => $op['src'] ) ) )
-                               {
+                                       || $this->fileExists( array( 'src' => $op['src'] ) )
+                               {
                                        $paths[] = $op['src'];
                                }
                        }
@@ -369,6 +380,7 @@ class FileBackendMultiWrite extends FileBackend {
                                $paths[] = $op['dst'];
                        }
                }
+
                return array_values( array_unique( array_filter( $paths, 'FileBackend::isStoragePath' ) ) );
        }
 
@@ -378,7 +390,7 @@ class FileBackendMultiWrite extends FileBackend {
         *
         * @param array $ops List of file operation arrays
         * @param FileBackendStore $backend
-        * @return Array
+        * @return array
         */
        protected function substOpBatchPaths( array $ops, FileBackendStore $backend ) {
                $newOps = array(); // operations
@@ -391,6 +403,7 @@ class FileBackendMultiWrite extends FileBackend {
                        }
                        $newOps[] = $newOp;
                }
+
                return $newOps;
        }
 
@@ -399,10 +412,11 @@ class FileBackendMultiWrite extends FileBackend {
         *
         * @param array $ops File operation array
         * @param FileBackendStore $backend
-        * @return Array
+        * @return array
         */
        protected function substOpPaths( array $ops, FileBackendStore $backend ) {
                $newOps = $this->substOpBatchPaths( array( $ops ), $backend );
+
                return $newOps[0];
        }
 
@@ -411,7 +425,7 @@ class FileBackendMultiWrite extends FileBackend {
         *
         * @param array|string $paths List of paths or single string path
         * @param FileBackendStore $backend
-        * @return Array|string
+        * @return array|string
         */
        protected function substPaths( $paths, FileBackendStore $backend ) {
                return preg_replace(
@@ -425,7 +439,7 @@ class FileBackendMultiWrite extends FileBackend {
         * Substitute the backend of internal storage paths with the proxy backend's name
         *
         * @param array|string $paths List of paths or single string path
-        * @return Array|string
+        * @return array|string
         */
        protected function unsubstPaths( $paths ) {
                return preg_replace(
@@ -456,6 +470,7 @@ class FileBackendMultiWrite extends FileBackend {
                $status->success = $masterStatus->success;
                $status->successCount = $masterStatus->successCount;
                $status->failCount = $masterStatus->failCount;
+
                return $status;
        }
 
@@ -465,6 +480,7 @@ class FileBackendMultiWrite extends FileBackend {
         */
        protected function replicateContainerDirChanges( $path ) {
                list( , $shortCont, ) = self::splitStoragePath( $path );
+
                return !in_array( $shortCont, $this->noPushDirConts );
        }
 
@@ -477,6 +493,7 @@ class FileBackendMultiWrite extends FileBackend {
                                $status->merge( $backend->doPrepare( $realParams ) );
                        }
                }
+
                return $status;
        }
 
@@ -489,6 +506,7 @@ class FileBackendMultiWrite extends FileBackend {
                                $status->merge( $backend->doSecure( $realParams ) );
                        }
                }
+
                return $status;
        }
 
@@ -501,6 +519,7 @@ class FileBackendMultiWrite extends FileBackend {
                                $status->merge( $backend->doPublish( $realParams ) );
                        }
                }
+
                return $status;
        }
 
@@ -513,32 +532,38 @@ class FileBackendMultiWrite extends FileBackend {
                                $status->merge( $backend->doClean( $realParams ) );
                        }
                }
+
                return $status;
        }
 
        public function concatenate( array $params ) {
                // We are writing to an FS file, so we don't need to do this per-backend
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
                return $this->backends[$this->masterIndex]->concatenate( $realParams );
        }
 
        public function fileExists( array $params ) {
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
                return $this->backends[$this->masterIndex]->fileExists( $realParams );
        }
 
        public function getFileTimestamp( array $params ) {
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
                return $this->backends[$this->masterIndex]->getFileTimestamp( $realParams );
        }
 
        public function getFileSize( array $params ) {
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
                return $this->backends[$this->masterIndex]->getFileSize( $realParams );
        }
 
        public function getFileStat( array $params ) {
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
                return $this->backends[$this->masterIndex]->getFileStat( $realParams );
        }
 
@@ -550,21 +575,25 @@ class FileBackendMultiWrite extends FileBackend {
                foreach ( $contentsM as $path => $data ) {
                        $contents[$this->unsubstPaths( $path )] = $data;
                }
+
                return $contents;
        }
 
        public function getFileSha1Base36( array $params ) {
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
                return $this->backends[$this->masterIndex]->getFileSha1Base36( $realParams );
        }
 
        public function getFileProps( array $params ) {
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
                return $this->backends[$this->masterIndex]->getFileProps( $realParams );
        }
 
        public function streamFile( array $params ) {
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
                return $this->backends[$this->masterIndex]->streamFile( $realParams );
        }
 
@@ -576,6 +605,7 @@ class FileBackendMultiWrite extends FileBackend {
                foreach ( $fsFilesM as $path => $fsFile ) {
                        $fsFiles[$this->unsubstPaths( $path )] = $fsFile;
                }
+
                return $fsFiles;
        }
 
@@ -587,26 +617,31 @@ class FileBackendMultiWrite extends FileBackend {
                foreach ( $tempFilesM as $path => $tempFile ) {
                        $tempFiles[$this->unsubstPaths( $path )] = $tempFile;
                }
+
                return $tempFiles;
        }
 
        public function getFileHttpUrl( array $params ) {
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
                return $this->backends[$this->masterIndex]->getFileHttpUrl( $realParams );
        }
 
        public function directoryExists( array $params ) {
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
                return $this->backends[$this->masterIndex]->directoryExists( $realParams );
        }
 
        public function getDirectoryList( array $params ) {
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
                return $this->backends[$this->masterIndex]->getDirectoryList( $realParams );
        }
 
        public function getFileList( array $params ) {
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
                return $this->backends[$this->masterIndex]->getFileList( $realParams );
        }
 
@@ -627,6 +662,7 @@ class FileBackendMultiWrite extends FileBackend {
                        LockManager::LOCK_UW => $this->unsubstPaths( $paths[LockManager::LOCK_UW] ),
                        LockManager::LOCK_EX => $this->unsubstPaths( $paths[LockManager::LOCK_EX] )
                );
+
                // Actually acquire the locks
                return array( $this->getScopedFileLocks( $pbPaths, 'mixed', $status ) );
        }
index 10c8dc3..beca79e 100644 (file)
@@ -43,7 +43,7 @@ abstract class FileBackendStore extends FileBackend {
        /** @var ProcessCacheLRU Map of paths to large (RAM/disk) cache items */
        protected $expensiveCache;
 
-       /** @var Array Map of container names to sharding config */
+       /** @var array Map of container names to sharding config */
        protected $shardViaHashLevels = array();
 
        /** @var callback Method to get the MIME type of files */
@@ -68,9 +68,9 @@ abstract class FileBackendStore extends FileBackend {
                parent::__construct( $config );
                $this->mimeCallback = isset( $config['mimeCallback'] )
                        ? $config['mimeCallback']
-                       : function( $storagePath, $content, $fsPath ) {
+                       : function ( $storagePath, $content, $fsPath ) {
                                // @TODO: handle the case of extension-less files using the contents
-                               return StreamFile::contentTypeFromPath( $storagePath ) ?: 'unknown/unknown';
+                               return StreamFile::contentTypeFromPath( $storagePath ) ? : 'unknown/unknown';
                        };
                $this->memCache = new EmptyBagOStuff(); // disabled by default
                $this->cheapCache = new ProcessCacheLRU( self::CACHE_CHEAP_SIZE );
@@ -82,7 +82,7 @@ abstract class FileBackendStore extends FileBackend {
         * medium restrictions and basic performance constraints.
         * Do not call this function from places outside FileBackend and FileOp.
         *
-        * @return integer Bytes
+        * @return int Bytes
         */
        final public function maxFileSizeInternal() {
                return $this->maxFileSize;
@@ -129,11 +129,13 @@ abstract class FileBackendStore extends FileBackend {
                                $this->deleteFileCache( $params['dst'] ); // persistent cache
                        }
                }
+
                return $status;
        }
 
        /**
         * @see FileBackendStore::createInternal()
+        * @param array $params
         * @return Status
         */
        abstract protected function doCreateInternal( array $params );
@@ -168,11 +170,13 @@ abstract class FileBackendStore extends FileBackend {
                                $this->deleteFileCache( $params['dst'] ); // persistent cache
                        }
                }
+
                return $status;
        }
 
        /**
         * @see FileBackendStore::storeInternal()
+        * @param array $params
         * @return Status
         */
        abstract protected function doStoreInternal( array $params );
@@ -203,11 +207,13 @@ abstract class FileBackendStore extends FileBackend {
                if ( !isset( $params['dstExists'] ) || $params['dstExists'] ) {
                        $this->deleteFileCache( $params['dst'] ); // persistent cache
                }
+
                return $status;
        }
 
        /**
         * @see FileBackendStore::copyInternal()
+        * @param array $params
         * @return Status
         */
        abstract protected function doCopyInternal( array $params );
@@ -236,6 +242,7 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::deleteInternal()
+        * @param array $params
         * @return Status
         */
        abstract protected function doDeleteInternal( array $params );
@@ -267,11 +274,13 @@ abstract class FileBackendStore extends FileBackend {
                if ( !isset( $params['dstExists'] ) || $params['dstExists'] ) {
                        $this->deleteFileCache( $params['dst'] ); // persistent cache
                }
+
                return $status;
        }
 
        /**
         * @see FileBackendStore::moveInternal()
+        * @param array $params
         * @return Status
         */
        protected function doMoveInternal( array $params ) {
@@ -285,6 +294,7 @@ abstract class FileBackendStore extends FileBackend {
                        $status->merge( $this->deleteInternal( array( 'src' => $params['src'] ) ) );
                        $status->setResult( true, $status->value ); // ignore delete() errors
                }
+
                return $status;
        }
 
@@ -311,11 +321,13 @@ abstract class FileBackendStore extends FileBackend {
                } else {
                        $status = Status::newGood(); // nothing to do
                }
+
                return $status;
        }
 
        /**
         * @see FileBackendStore::describeInternal()
+        * @param array $params
         * @return Status
         */
        protected function doDescribeInternal( array $params ) {
@@ -355,6 +367,7 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::concatenate()
+        * @param array $params
         * @return Status
         */
        protected function doConcatenate( array $params ) {
@@ -368,6 +381,7 @@ abstract class FileBackendStore extends FileBackend {
                wfRestoreWarnings();
                if ( !$ok ) { // not present or not empty
                        $status->fatal( 'backend-fail-opentemp', $tmpPath );
+
                        return $status;
                }
 
@@ -378,6 +392,7 @@ abstract class FileBackendStore extends FileBackend {
                                $fsFile = $this->getLocalReference( array( 'src' => $path ) );
                                if ( !$fsFile ) { // retry failed?
                                        $status->fatal( 'backend-fail-read', $path );
+
                                        return $status;
                                }
                        }
@@ -388,6 +403,7 @@ abstract class FileBackendStore extends FileBackend {
                $tmpHandle = fopen( $tmpPath, 'ab' );
                if ( $tmpHandle === false ) {
                        $status->fatal( 'backend-fail-opentemp', $tmpPath );
+
                        return $status;
                }
 
@@ -398,6 +414,7 @@ abstract class FileBackendStore extends FileBackend {
                        if ( $sourceHandle === false ) {
                                fclose( $tmpHandle );
                                $status->fatal( 'backend-fail-read', $virtualSource );
+
                                return $status;
                        }
                        // Append chunk to file (pass chunk size to avoid magic quotes)
@@ -405,12 +422,14 @@ abstract class FileBackendStore extends FileBackend {
                                fclose( $sourceHandle );
                                fclose( $tmpHandle );
                                $status->fatal( 'backend-fail-writetemp', $tmpPath );
+
                                return $status;
                        }
                        fclose( $sourceHandle );
                }
                if ( !fclose( $tmpHandle ) ) {
                        $status->fatal( 'backend-fail-closetemp', $tmpPath );
+
                        return $status;
                }
 
@@ -426,6 +445,7 @@ abstract class FileBackendStore extends FileBackend {
                list( $fullCont, $dir, $shard ) = $this->resolveStoragePath( $params['dir'] );
                if ( $dir === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dir'] );
+
                        return $status; // invalid storage path
                }
 
@@ -444,6 +464,9 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::doPrepare()
+        * @param $container
+        * @param string $dir
+        * @param array $params
         * @return Status
         */
        protected function doPrepareInternal( $container, $dir, array $params ) {
@@ -457,6 +480,7 @@ abstract class FileBackendStore extends FileBackend {
                list( $fullCont, $dir, $shard ) = $this->resolveStoragePath( $params['dir'] );
                if ( $dir === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dir'] );
+
                        return $status; // invalid storage path
                }
 
@@ -475,6 +499,9 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::doSecure()
+        * @param $container
+        * @param string $dir
+        * @param array $params
         * @return Status
         */
        protected function doSecureInternal( $container, $dir, array $params ) {
@@ -488,6 +515,7 @@ abstract class FileBackendStore extends FileBackend {
                list( $fullCont, $dir, $shard ) = $this->resolveStoragePath( $params['dir'] );
                if ( $dir === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dir'] );
+
                        return $status; // invalid storage path
                }
 
@@ -506,6 +534,9 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::doPublish()
+        * @param $container
+        * @param string $dir
+        * @param array $params
         * @return Status
         */
        protected function doPublishInternal( $container, $dir, array $params ) {
@@ -531,6 +562,7 @@ abstract class FileBackendStore extends FileBackend {
                list( $fullCont, $dir, $shard ) = $this->resolveStoragePath( $params['dir'] );
                if ( $dir === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dir'] );
+
                        return $status; // invalid storage path
                }
 
@@ -558,6 +590,9 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::doClean()
+        * @param $container
+        * @param string $dir
+        * @param array $params
         * @return Status
         */
        protected function doCleanInternal( $container, $dir, array $params ) {
@@ -567,18 +602,21 @@ abstract class FileBackendStore extends FileBackend {
        final public function fileExists( array $params ) {
                $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
                $stat = $this->getFileStat( $params );
+
                return ( $stat === null ) ? null : (bool)$stat; // null => failure
        }
 
        final public function getFileTimestamp( array $params ) {
                $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
                $stat = $this->getFileStat( $params );
+
                return $stat ? $stat['mtime'] : false;
        }
 
        final public function getFileSize( array $params ) {
                $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
                $stat = $this->getFileStat( $params );
+
                return $stat ? $stat['size'] : false;
        }
 
@@ -606,11 +644,9 @@ abstract class FileBackendStore extends FileBackend {
                                }
                        }
                }
-               wfProfileIn( __METHOD__ . '-miss' );
                wfProfileIn( __METHOD__ . '-miss-' . $this->name );
                $stat = $this->doGetFileStat( $params );
                wfProfileOut( __METHOD__ . '-miss-' . $this->name );
-               wfProfileOut( __METHOD__ . '-miss' );
                if ( is_array( $stat ) ) { // file exists
                        $stat['latest'] = $latest;
                        $this->cheapCache->set( $path, 'stat', $stat );
@@ -627,6 +663,7 @@ abstract class FileBackendStore extends FileBackend {
                } else { // an error occurred
                        wfDebug( __METHOD__ . ": Could not stat file $path.\n" );
                }
+
                return $stat;
        }
 
@@ -646,7 +683,8 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::getFileContentsMulti()
-        * @return Array
+        * @param array $params
+        * @return array
         */
        protected function doGetFileContentsMulti( array $params ) {
                $contents = array();
@@ -655,6 +693,7 @@ abstract class FileBackendStore extends FileBackend {
                        $contents[$path] = $fsFile ? file_get_contents( $fsFile->getPath() ) : false;
                        wfRestoreWarnings();
                }
+
                return $contents;
        }
 
@@ -673,17 +712,17 @@ abstract class FileBackendStore extends FileBackend {
                                return $stat['hash'];
                        }
                }
-               wfProfileIn( __METHOD__ . '-miss' );
                wfProfileIn( __METHOD__ . '-miss-' . $this->name );
                $hash = $this->doGetFileSha1Base36( $params );
                wfProfileOut( __METHOD__ . '-miss-' . $this->name );
-               wfProfileOut( __METHOD__ . '-miss' );
                $this->cheapCache->set( $path, 'sha1', array( 'hash' => $hash, 'latest' => $latest ) );
+
                return $hash;
        }
 
        /**
         * @see FileBackendStore::getFileSha1Base36()
+        * @param array $params
         * @return bool|string
         */
        protected function doGetFileSha1Base36( array $params ) {
@@ -699,6 +738,7 @@ abstract class FileBackendStore extends FileBackend {
                $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
                $fsFile = $this->getLocalReference( $params );
                $props = $fsFile ? $fsFile->getProps() : FSFile::placeholderProps();
+
                return $props;
        }
 
@@ -738,7 +778,8 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::getLocalReferenceMulti()
-        * @return Array
+        * @param array $params
+        * @return array
         */
        protected function doGetLocalReferenceMulti( array $params ) {
                return $this->doGetLocalCopyMulti( $params );
@@ -755,12 +796,14 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::getLocalCopyMulti()
-        * @return Array
+        * @param array $params
+        * @return array
         */
        abstract protected function doGetLocalCopyMulti( array $params );
 
        /**
         * @see FileBackend::getFileHttpUrl()
+        * @param array $params
         * @return string|null
         */
        public function getFileHttpUrl( array $params ) {
@@ -782,11 +825,9 @@ abstract class FileBackendStore extends FileBackend {
                if ( $res == StreamFile::NOT_MODIFIED ) {
                        // do nothing; client cache is up to date
                } elseif ( $res == StreamFile::READY_STREAM ) {
-                       wfProfileIn( __METHOD__ . '-send' );
                        wfProfileIn( __METHOD__ . '-send-' . $this->name );
                        $status = $this->doStreamFile( $params );
                        wfProfileOut( __METHOD__ . '-send-' . $this->name );
-                       wfProfileOut( __METHOD__ . '-send' );
                        if ( !$status->isOK() ) {
                                // Per bug 41113, nasty things can happen if bad cache entries get
                                // stuck in cache. It's also possible that this error can come up
@@ -804,6 +845,7 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::streamFile()
+        * @param array $params
         * @return Status
         */
        protected function doStreamFile( array $params ) {
@@ -839,6 +881,7 @@ abstract class FileBackendStore extends FileBackend {
                                        $res = null; // if we don't find anything, it is indeterminate
                                }
                        }
+
                        return $res;
                }
        }
@@ -865,6 +908,7 @@ abstract class FileBackendStore extends FileBackend {
                        wfDebug( __METHOD__ . ": iterating over all container shards.\n" );
                        // File listing spans multiple containers/shards
                        list( , $shortCont, ) = self::splitStoragePath( $params['dir'] );
+
                        return new FileBackendStoreShardDirIterator( $this,
                                $fullCont, $dir, $this->getContainerSuffixes( $shortCont ), $params );
                }
@@ -894,6 +938,7 @@ abstract class FileBackendStore extends FileBackend {
                        wfDebug( __METHOD__ . ": iterating over all container shards.\n" );
                        // File listing spans multiple containers/shards
                        list( , $shortCont, ) = self::splitStoragePath( $params['dir'] );
+
                        return new FileBackendStoreShardFileIterator( $this,
                                $fullCont, $dir, $this->getContainerSuffixes( $shortCont ), $params );
                }
@@ -919,7 +964,7 @@ abstract class FileBackendStore extends FileBackend {
         * An exception is thrown if an unsupported operation is requested.
         *
         * @param array $ops Same format as doOperations()
-        * @return Array List of FileOp objects
+        * @return array List of FileOp objects
         * @throws MWException
         */
        final public function getOperationsInternal( array $ops ) {
@@ -959,7 +1004,7 @@ abstract class FileBackendStore extends FileBackend {
         * normalized.
         *
         * @param array $performOps List of FileOp objects
-        * @return Array (LockManager::LOCK_UW => path list, LockManager::LOCK_EX => path list)
+        * @return array (LockManager::LOCK_UW => path list, LockManager::LOCK_EX => path list)
         */
        final public function getPathsToLockForOpsInternal( array $performOps ) {
                // Build up a list of files to lock...
@@ -981,6 +1026,7 @@ abstract class FileBackendStore extends FileBackend {
 
        public function getScopedLocksForOps( array $ops, Status $status ) {
                $paths = $this->getPathsToLockForOpsInternal( $this->getOperationsInternal( $ops ) );
+
                return array( $this->getScopedFileLocks( $paths, 'mixed', $status ) );
        }
 
@@ -1086,9 +1132,10 @@ abstract class FileBackendStore extends FileBackend {
         * The resulting Status object fields will correspond
         * to the order in which the handles where given.
         *
-        * @param array $handles List of FileBackendStoreOpHandle objects
-        * @return Array Map of Status objects
+        * @param array $fileOpHandles
         * @throws MWException
+        * @internal param array $handles List of FileBackendStoreOpHandle objects
+        * @return array Map of Status objects
         */
        final public function executeOpHandlesInternal( array $fileOpHandles ) {
                $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
@@ -1103,6 +1150,7 @@ abstract class FileBackendStore extends FileBackend {
                foreach ( $fileOpHandles as $fileOpHandle ) {
                        $fileOpHandle->closeResources();
                }
+
                return $res;
        }
 
@@ -1110,12 +1158,13 @@ abstract class FileBackendStore extends FileBackend {
         * @see FileBackendStore::executeOpHandlesInternal()
         * @param array $fileOpHandles
         * @throws MWException
-        * @return Array List of corresponding Status objects
+        * @return array List of corresponding Status objects
         */
        protected function doExecuteOpHandlesInternal( array $fileOpHandles ) {
                foreach ( $fileOpHandles as $fileOpHandle ) { // OK if empty
                        throw new MWException( "This backend supports no asynchronous operations." );
                }
+
                return array();
        }
 
@@ -1126,7 +1175,7 @@ abstract class FileBackendStore extends FileBackend {
         * specific errors, especially in the middle of batch file operations.
         *
         * @param array $op Same format as doOperation()
-        * @return Array
+        * @return array
         */
        protected function stripInvalidHeadersFromOp( array $op ) {
                static $longs = array( 'Content-Disposition' );
@@ -1141,6 +1190,7 @@ abstract class FileBackendStore extends FileBackend {
                                }
                        }
                }
+
                return $op;
        }
 
@@ -1178,9 +1228,9 @@ abstract class FileBackendStore extends FileBackend {
         * @see FileBackend::clearCache()
         *
         * @param array $paths Storage paths (optional)
-        * @return void
         */
-       protected function doClearCache( array $paths = null ) {}
+       protected function doClearCache( array $paths = null ) {
+       }
 
        /**
         * Is this a key/value store where directories are just virtual?
@@ -1218,7 +1268,7 @@ abstract class FileBackendStore extends FileBackend {
         * be scanned by looking in all the container shards.
         *
         * @param string $storagePath
-        * @return Array (container, path, container suffix) or (null, null, null) if invalid
+        * @return array (container, path, container suffix) or (null, null, null) if invalid
         */
        final protected function resolveStoragePath( $storagePath ) {
                list( $backend, $container, $relPath ) = self::splitStoragePath( $storagePath );
@@ -1242,6 +1292,7 @@ abstract class FileBackendStore extends FileBackend {
                                }
                        }
                }
+
                return array( null, null, null );
        }
 
@@ -1258,13 +1309,14 @@ abstract class FileBackendStore extends FileBackend {
         * @see FileBackendStore::resolveStoragePath()
         *
         * @param string $storagePath
-        * @return Array (container, path) or (null, null) if invalid
+        * @return array (container, path) or (null, null) if invalid
         */
        final protected function resolveStoragePathReal( $storagePath ) {
                list( $container, $relPath, $cShard ) = $this->resolveStoragePath( $storagePath );
                if ( $cShard !== null && substr( $relPath, -1 ) !== '/' ) {
                        return array( $container, $relPath );
                }
+
                return array( null, null );
        }
 
@@ -1299,8 +1351,10 @@ abstract class FileBackendStore extends FileBackend {
                        if ( preg_match( "!^(?:[^/]{2,}/)*$hashDirRegex(?:/|$)!", $relPath, $m ) ) {
                                return '.' . implode( '', array_slice( $m, 1 ) );
                        }
+
                        return null; // failed to match
                }
+
                return ''; // no sharding
        }
 
@@ -1314,6 +1368,7 @@ abstract class FileBackendStore extends FileBackend {
         */
        final public function isSingleShardPathInternal( $storagePath ) {
                list( , , $shard ) = $this->resolveStoragePath( $storagePath );
+
                return ( $shard !== null );
        }
 
@@ -1323,7 +1378,7 @@ abstract class FileBackendStore extends FileBackend {
         * the container are required to be hashed accordingly.
         *
         * @param string $container
-        * @return Array (integer levels, integer base, repeat flag) or (0, 0, false)
+        * @return array (integer levels, integer base, repeat flag) or (0, 0, false)
         */
        final protected function getContainerHashLevels( $container ) {
                if ( isset( $this->shardViaHashLevels[$container] ) ) {
@@ -1336,6 +1391,7 @@ abstract class FileBackendStore extends FileBackend {
                                }
                        }
                }
+
                return array( 0, 0, false ); // no sharding
        }
 
@@ -1343,7 +1399,7 @@ abstract class FileBackendStore extends FileBackend {
         * Get a list of full container shard suffixes for a container
         *
         * @param string $container
-        * @return Array
+        * @return array
         */
        final protected function getContainerSuffixes( $container ) {
                $shards = array();
@@ -1354,6 +1410,7 @@ abstract class FileBackendStore extends FileBackend {
                                $shards[] = '.' . wfBaseConvert( $index, 10, $base, $digits );
                        }
                }
+
                return $shards;
        }
 
@@ -1412,7 +1469,6 @@ abstract class FileBackendStore extends FileBackend {
         *
         * @param string $container Resolved container name
         * @param array $val Information to cache
-        * @return void
         */
        final protected function setContainerCache( $container, array $val ) {
                $this->memCache->add( $this->containerCacheKey( $container ), $val, 14 * 86400 );
@@ -1423,7 +1479,6 @@ abstract class FileBackendStore extends FileBackend {
         * The cache key is salted for a while to prevent race conditions.
         *
         * @param string $container Resolved container name
-        * @return void
         */
        final protected function deleteContainerCache( $container ) {
                if ( !$this->memCache->set( $this->containerCacheKey( $container ), 'PURGED', 300 ) ) {
@@ -1436,8 +1491,7 @@ abstract class FileBackendStore extends FileBackend {
         * used in a list of container names, storage paths, or FileOp objects.
         * This loads the persistent cache values into the process cache.
         *
-        * @param Array $items
-        * @return void
+        * @param array $items
         */
        final protected function primeContainerCache( array $items ) {
                $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
@@ -1480,9 +1534,9 @@ abstract class FileBackendStore extends FileBackend {
         * Only containers that actually exist should appear in the map.
         *
         * @param array $containerInfo Map of resolved container names to cached info
-        * @return void
         */
-       protected function doPrimeContainerCache( array $containerInfo ) {}
+       protected function doPrimeContainerCache( array $containerInfo ) {
+       }
 
        /**
         * Get the cache key for a file path
@@ -1501,7 +1555,6 @@ abstract class FileBackendStore extends FileBackend {
         *
         * @param string $path Storage path
         * @param array $val Stat information to cache
-        * @return void
         */
        final protected function setFileCache( $path, array $val ) {
                $path = FileBackend::normalizeStoragePath( $path );
@@ -1520,7 +1573,6 @@ abstract class FileBackendStore extends FileBackend {
         * a file is created at a path were there was none before.
         *
         * @param string $path Storage path
-        * @return void
         */
        final protected function deleteFileCache( $path ) {
                $path = FileBackend::normalizeStoragePath( $path );
@@ -1538,7 +1590,6 @@ abstract class FileBackendStore extends FileBackend {
         * This loads the persistent cache values into the process cache.
         *
         * @param array $items List of storage paths or FileOps
-        * @return void
         */
        final protected function primeFileCache( array $items ) {
                $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
@@ -1581,7 +1632,7 @@ abstract class FileBackendStore extends FileBackend {
         * Set the 'concurrency' option from a list of operation options
         *
         * @param array $opts Map of operation options
-        * @return Array
+        * @return array
         */
        final protected function setConcurrencyFlags( array $opts ) {
                $opts['concurrency'] = 1; // off
@@ -1594,6 +1645,7 @@ abstract class FileBackendStore extends FileBackend {
                                $opts['concurrency'] = $this->concurrency;
                        }
                }
+
                return $opts;
        }
 
@@ -1619,19 +1671,17 @@ abstract class FileBackendStore extends FileBackend {
  * passed to FileBackendStore::executeOpHandlesInternal().
  */
 abstract class FileBackendStoreOpHandle {
-       /** @var Array */
+       /** @var array */
        public $params = array(); // params to caller functions
        /** @var FileBackendStore */
        public $backend;
-       /** @var Array */
+       /** @var array */
        public $resourcesToClose = array();
 
        public $call; // string; name that identifies the function called
 
        /**
         * Close all open file handles
-        *
-        * @return void
         */
        public function closeResources() {
                array_map( 'fclose', $this->resourcesToClose );
@@ -1647,13 +1697,17 @@ abstract class FileBackendStoreOpHandle {
 abstract class FileBackendStoreShardListIterator extends FilterIterator {
        /** @var FileBackendStore */
        protected $backend;
-       /** @var Array */
+
+       /** @var array */
        protected $params;
 
-       protected $container; // string; full container name
-       protected $directory; // string; resolved relative path
+       /** @var string Full container name */
+       protected $container;
+
+       /** @var string Resolved relative path */
+       protected $directory;
 
-       /** @var Array */
+       /** @var array */
        protected $multiShardPaths = array(); // (rel path => 1)
 
        /**
@@ -1689,6 +1743,7 @@ abstract class FileBackendStoreShardListIterator extends FilterIterator {
                        return false;
                } else {
                        $this->multiShardPaths[$rel] = 1;
+
                        return true;
                }
        }
index 3c5b7b2..538d9b4 100644 (file)
  * @since 1.19
  */
 abstract class FileOp {
-       /** @var Array */
+       /** @var array */
        protected $params = array();
+
        /** @var FileBackendStore */
        protected $backend;
 
-       protected $state = self::STATE_NEW; // integer
-       protected $failed = false; // boolean
-       protected $async = false; // boolean
-       protected $batchId; // string
+       /** @var int */
+       protected $state = self::STATE_NEW;
+
+       /** @var bool */
+       protected $failed = false;
+
+       /** @var bool */
+       protected $async = false;
+
+       /** @var string */
+       protected $batchId;
+
+       /** @var bool Operation is not a no-op */
+       protected $doOperation = true;
+
+       /** @var string */
+       protected $sourceSha1;
+
+       /** @var bool */
+       protected $overwriteSameCase;
 
-       protected $doOperation = true; // boolean; operation is not a no-op
-       protected $sourceSha1; // string
-       protected $overwriteSameCase; // boolean
-       protected $destExists; // boolean
+       /** @var bool */
+       protected $destExists;
 
        /* Object life-cycle */
        const STATE_NEW = 1;
@@ -58,7 +73,7 @@ abstract class FileOp {
         * Build a new batch file operation transaction
         *
         * @param FileBackendStore $backend
-        * @param Array $params
+        * @param array $params
         * @throws MWException
         */
        final public function __construct( FileBackendStore $backend, array $params ) {
@@ -84,7 +99,6 @@ abstract class FileOp {
                }
        }
 
-
        /**
         * Normalize a string if it is a valid storage path
         *
@@ -94,8 +108,10 @@ abstract class FileOp {
        protected static function normalizeIfValidStoragePath( $path ) {
                if ( FileBackend::isStoragePath( $path ) ) {
                        $res = FileBackend::normalizeStoragePath( $path );
+
                        return ( $res !== null ) ? $res : $path;
                }
+
                return $path;
        }
 
@@ -103,7 +119,6 @@ abstract class FileOp {
         * Set the batch UUID this operation belongs to
         *
         * @param string $batchId
-        * @return void
         */
        final public function setBatchId( $batchId ) {
                $this->batchId = $batchId;
@@ -131,7 +146,7 @@ abstract class FileOp {
        /**
         * Get a new empty predicates array for precheck()
         *
-        * @return Array
+        * @return array
         */
        final public static function newPredicates() {
                return array( 'exists' => array(), 'sha1' => array() );
@@ -140,7 +155,7 @@ abstract class FileOp {
        /**
         * Get a new empty dependency tracking array for paths read/written to
         *
-        * @return Array
+        * @return array
         */
        final public static function newDependencies() {
                return array( 'read' => array(), 'write' => array() );
@@ -150,18 +165,19 @@ abstract class FileOp {
         * Update a dependency tracking array to account for this operation
         *
         * @param array $deps Prior path reads/writes; format of FileOp::newPredicates()
-        * @return Array
+        * @return array
         */
        final public function applyDependencies( array $deps ) {
                $deps['read'] += array_fill_keys( $this->storagePathsRead(), 1 );
                $deps['write'] += array_fill_keys( $this->storagePathsChanged(), 1 );
+
                return $deps;
        }
 
        /**
         * Check if this operation changes files listed in $paths
         *
-        * @param array $paths Prior path reads/writes; format of FileOp::newPredicates()
+        * @param array $deps Prior path reads/writes; format of FileOp::newPredicates()
         * @return boolean
         */
        final public function dependsOn( array $deps ) {
@@ -175,6 +191,7 @@ abstract class FileOp {
                                return true; // "flow" dependency
                        }
                }
+
                return false;
        }
 
@@ -183,7 +200,7 @@ abstract class FileOp {
         *
         * @param array $oPredicates Pre-op info about files (format of FileOp::newPredicates)
         * @param array $nPredicates Post-op info about files (format of FileOp::newPredicates)
-        * @return Array
+        * @return array
         */
        final public function getJournalEntries( array $oPredicates, array $nPredicates ) {
                if ( !$this->doOperation ) {
@@ -215,6 +232,7 @@ abstract class FileOp {
                                );
                        }
                }
+
                return array_merge( $nullEntries, $updateEntries, $deleteEntries );
        }
 
@@ -223,7 +241,7 @@ abstract class FileOp {
         * This must update $predicates for each path that the op can change
         * except when a failing status object is returned.
         *
-        * @param Array $predicates
+        * @param array $predicates
         * @return Status
         */
        final public function precheck( array &$predicates ) {
@@ -235,10 +253,12 @@ abstract class FileOp {
                if ( !$status->isOK() ) {
                        $this->failed = true;
                }
+
                return $status;
        }
 
        /**
+        * @param array $predicates
         * @return Status
         */
        protected function doPrecheck( array &$predicates ) {
@@ -266,6 +286,7 @@ abstract class FileOp {
                } else { // no-op
                        $status = Status::newGood();
                }
+
                return $status;
        }
 
@@ -285,13 +306,14 @@ abstract class FileOp {
                $this->async = true;
                $result = $this->attempt();
                $this->async = false;
+
                return $result;
        }
 
        /**
         * Get the file operation parameters
         *
-        * @return Array (required params list, optional params list, list of params that are paths)
+        * @return array (required params list, optional params list, list of params that are paths)
         */
        protected function allowedParams() {
                return array( array(), array(), array() );
@@ -300,8 +322,8 @@ abstract class FileOp {
        /**
         * Adjust params to FileBackendStore internal file calls
         *
-        * @param Array $params
-        * @return Array (required params list, optional params list)
+        * @param array $params
+        * @return array (required params list, optional params list)
         */
        protected function setFlags( array $params ) {
                return array( 'async' => $this->async ) + $params;
@@ -310,7 +332,7 @@ abstract class FileOp {
        /**
         * Get a list of storage paths read from for this operation
         *
-        * @return Array
+        * @return array
         */
        public function storagePathsRead() {
                return array();
@@ -319,7 +341,7 @@ abstract class FileOp {
        /**
         * Get a list of storage paths written to for this operation
         *
-        * @return Array
+        * @return array
         */
        public function storagePathsChanged() {
                return array();
@@ -330,7 +352,7 @@ abstract class FileOp {
         * Also set the destExists, overwriteSameCase and sourceSha1 member variables.
         * A bad status will be returned if there is no chance it can be overwritten.
         *
-        * @param Array $predicates
+        * @param array $predicates
         * @return Status
         */
        protected function precheckDestExistence( array $predicates ) {
@@ -356,12 +378,15 @@ abstract class FileOp {
                                } else {
                                        $this->overwriteSameCase = true; // OK
                                }
+
                                return $status; // do nothing; either OK or bad status
                        } else {
                                $status->fatal( 'backend-fail-alreadyexists', $this->params['dst'] );
+
                                return $status;
                        }
                }
+
                return $status;
        }
 
@@ -379,7 +404,7 @@ abstract class FileOp {
         * Check if a file will exist in storage when this operation is attempted
         *
         * @param string $source Storage path
-        * @param Array $predicates
+        * @param array $predicates
         * @return bool
         */
        final protected function fileExists( $source, array $predicates ) {
@@ -387,6 +412,7 @@ abstract class FileOp {
                        return $predicates['exists'][$source]; // previous op assures this
                } else {
                        $params = array( 'src' => $source, 'latest' => true );
+
                        return $this->backend->fileExists( $params );
                }
        }
@@ -395,7 +421,7 @@ abstract class FileOp {
         * Get the SHA-1 of a file in storage when this operation is attempted
         *
         * @param string $source Storage path
-        * @param Array $predicates
+        * @param array $predicates
         * @return string|bool False on failure
         */
        final protected function fileSha1( $source, array $predicates ) {
@@ -405,6 +431,7 @@ abstract class FileOp {
                        return false; // previous op assures this
                } else {
                        $params = array( 'src' => $source, 'latest' => true );
+
                        return $this->backend->getFileSha1Base36( $params );
                }
        }
@@ -422,7 +449,6 @@ abstract class FileOp {
         * Log a file operation failure and preserve any temp files
         *
         * @param string $action
-        * @return void
         */
        final public function logFailure( $action ) {
                $params = $this->params;
@@ -456,11 +482,13 @@ class CreateFileOp extends FileOp {
                        $status->fatal( 'backend-fail-maxsize',
                                $this->params['dst'], $this->backend->maxFileSizeInternal() );
                        $status->fatal( 'backend-fail-create', $this->params['dst'] );
+
                        return $status;
                // Check if a file can be placed/changed at the destination
                } elseif ( !$this->backend->isPathUsableInternal( $this->params['dst'] ) ) {
                        $status->fatal( 'backend-fail-usable', $this->params['dst'] );
                        $status->fatal( 'backend-fail-create', $this->params['dst'] );
+
                        return $status;
                }
                // Check if destination file exists
@@ -471,6 +499,7 @@ class CreateFileOp extends FileOp {
                        $predicates['exists'][$this->params['dst']] = true;
                        $predicates['sha1'][$this->params['dst']] = $this->sourceSha1;
                }
+
                return $status; // safe to call attempt()
        }
 
@@ -479,6 +508,7 @@ class CreateFileOp extends FileOp {
                        // Create the file at the destination
                        return $this->backend->createInternal( $this->setFlags( $this->params ) );
                }
+
                return Status::newGood();
        }
 
@@ -509,17 +539,20 @@ class StoreFileOp extends FileOp {
                // Check if the source file exists on the file system
                if ( !is_file( $this->params['src'] ) ) {
                        $status->fatal( 'backend-fail-notexists', $this->params['src'] );
+
                        return $status;
                // Check if the source file is too big
                } elseif ( filesize( $this->params['src'] ) > $this->backend->maxFileSizeInternal() ) {
                        $status->fatal( 'backend-fail-maxsize',
                                $this->params['dst'], $this->backend->maxFileSizeInternal() );
                        $status->fatal( 'backend-fail-store', $this->params['src'], $this->params['dst'] );
+
                        return $status;
                // Check if a file can be placed/changed at the destination
                } elseif ( !$this->backend->isPathUsableInternal( $this->params['dst'] ) ) {
                        $status->fatal( 'backend-fail-usable', $this->params['dst'] );
                        $status->fatal( 'backend-fail-store', $this->params['src'], $this->params['dst'] );
+
                        return $status;
                }
                // Check if destination file exists
@@ -530,6 +563,7 @@ class StoreFileOp extends FileOp {
                        $predicates['exists'][$this->params['dst']] = true;
                        $predicates['sha1'][$this->params['dst']] = $this->sourceSha1;
                }
+
                return $status; // safe to call attempt()
        }
 
@@ -538,6 +572,7 @@ class StoreFileOp extends FileOp {
                        // Store the file at the destination
                        return $this->backend->storeInternal( $this->setFlags( $this->params ) );
                }
+
                return Status::newGood();
        }
 
@@ -548,6 +583,7 @@ class StoreFileOp extends FileOp {
                if ( $hash !== false ) {
                        $hash = wfBaseConvert( $hash, 16, 36, 31 );
                }
+
                return $hash;
        }
 
@@ -578,15 +614,18 @@ class CopyFileOp extends FileOp {
                                // Update file existence predicates (cache 404s)
                                $predicates['exists'][$this->params['src']] = false;
                                $predicates['sha1'][$this->params['src']] = false;
+
                                return $status; // nothing to do
                        } else {
                                $status->fatal( 'backend-fail-notexists', $this->params['src'] );
+
                                return $status;
                        }
-               // Check if a file can be placed/changed at the destination
+                       // Check if a file can be placed/changed at the destination
                } elseif ( !$this->backend->isPathUsableInternal( $this->params['dst'] ) ) {
                        $status->fatal( 'backend-fail-usable', $this->params['dst'] );
                        $status->fatal( 'backend-fail-copy', $this->params['src'], $this->params['dst'] );
+
                        return $status;
                }
                // Check if destination file exists
@@ -597,6 +636,7 @@ class CopyFileOp extends FileOp {
                        $predicates['exists'][$this->params['dst']] = true;
                        $predicates['sha1'][$this->params['dst']] = $this->sourceSha1;
                }
+
                return $status; // safe to call attempt()
        }
 
@@ -605,7 +645,7 @@ class CopyFileOp extends FileOp {
                        $status = Status::newGood(); // nothing to do
                } elseif ( $this->params['src'] === $this->params['dst'] ) {
                        // Just update the destination file headers
-                       $headers = $this->getParam( 'headers' ) ?: array();
+                       $headers = $this->getParam( 'headers' ) ? : array();
                        $status = $this->backend->describeInternal( $this->setFlags( array(
                                'src' => $this->params['dst'], 'headers' => $headers
                        ) ) );
@@ -613,6 +653,7 @@ class CopyFileOp extends FileOp {
                        // Copy the file to the destination
                        $status = $this->backend->copyInternal( $this->setFlags( $this->params ) );
                }
+
                return $status;
        }
 
@@ -647,15 +688,18 @@ class MoveFileOp extends FileOp {
                                // Update file existence predicates (cache 404s)
                                $predicates['exists'][$this->params['src']] = false;
                                $predicates['sha1'][$this->params['src']] = false;
+
                                return $status; // nothing to do
                        } else {
                                $status->fatal( 'backend-fail-notexists', $this->params['src'] );
+
                                return $status;
                        }
                // Check if a file can be placed/changed at the destination
                } elseif ( !$this->backend->isPathUsableInternal( $this->params['dst'] ) ) {
                        $status->fatal( 'backend-fail-usable', $this->params['dst'] );
                        $status->fatal( 'backend-fail-move', $this->params['src'], $this->params['dst'] );
+
                        return $status;
                }
                // Check if destination file exists
@@ -668,6 +712,7 @@ class MoveFileOp extends FileOp {
                        $predicates['exists'][$this->params['dst']] = true;
                        $predicates['sha1'][$this->params['dst']] = $this->sourceSha1;
                }
+
                return $status; // safe to call attempt()
        }
 
@@ -692,6 +737,7 @@ class MoveFileOp extends FileOp {
                        // Move the file to the destination
                        $status = $this->backend->moveInternal( $this->setFlags( $this->params ) );
                }
+
                return $status;
        }
 
@@ -722,20 +768,24 @@ class DeleteFileOp extends FileOp {
                                // Update file existence predicates (cache 404s)
                                $predicates['exists'][$this->params['src']] = false;
                                $predicates['sha1'][$this->params['src']] = false;
+
                                return $status; // nothing to do
                        } else {
                                $status->fatal( 'backend-fail-notexists', $this->params['src'] );
+
                                return $status;
                        }
                // Check if a file can be placed/changed at the source
                } elseif ( !$this->backend->isPathUsableInternal( $this->params['src'] ) ) {
                        $status->fatal( 'backend-fail-usable', $this->params['src'] );
                        $status->fatal( 'backend-fail-delete', $this->params['src'] );
+
                        return $status;
                }
                // Update file existence predicates
                $predicates['exists'][$this->params['src']] = false;
                $predicates['sha1'][$this->params['src']] = false;
+
                return $status; // safe to call attempt()
        }
 
@@ -763,11 +813,13 @@ class DescribeFileOp extends FileOp {
                // Check if the source file exists
                if ( !$this->fileExists( $this->params['src'], $predicates ) ) {
                        $status->fatal( 'backend-fail-notexists', $this->params['src'] );
+
                        return $status;
                // Check if a file can be placed/changed at the source
                } elseif ( !$this->backend->isPathUsableInternal( $this->params['src'] ) ) {
                        $status->fatal( 'backend-fail-usable', $this->params['src'] );
                        $status->fatal( 'backend-fail-describe', $this->params['src'] );
+
                        return $status;
                }
                // Update file existence predicates
@@ -775,6 +827,7 @@ class DescribeFileOp extends FileOp {
                        $this->fileExists( $this->params['src'], $predicates );
                $predicates['sha1'][$this->params['src']] =
                        $this->fileSha1( $this->params['src'], $predicates );
+
                return $status; // safe to call attempt()
        }
 
@@ -791,4 +844,5 @@ class DescribeFileOp extends FileOp {
 /**
  * Placeholder operation that has no params and does nothing
  */
-class NullFileOp extends FileOp {}
+class NullFileOp extends FileOp {
+}
index 785c0bc..32b65ba 100644 (file)
@@ -62,6 +62,7 @@ class FileOpBatch {
                if ( $n > self::MAX_BATCH_SIZE ) {
                        $status->fatal( 'backend-fail-batchsize', $n, self::MAX_BATCH_SIZE );
                        wfProfileOut( __METHOD__ );
+
                        return $status;
                }
 
@@ -108,6 +109,7 @@ class FileOpBatch {
                                ++$status->failCount;
                                if ( !$ignoreErrors ) {
                                        wfProfileOut( __METHOD__ );
+
                                        return $status; // abort
                                }
                        }
@@ -122,6 +124,7 @@ class FileOpBatch {
                        $subStatus = $journal->logChangeBatch( $entries, $batchId );
                        if ( !$subStatus->isOK() ) {
                                wfProfileOut( __METHOD__ );
+
                                return $subStatus; // abort
                        }
                }
@@ -134,6 +137,7 @@ class FileOpBatch {
                self::runParallelBatches( $pPerformOps, $status );
 
                wfProfileOut( __METHOD__ );
+
                return $status;
        }
 
@@ -145,7 +149,7 @@ class FileOpBatch {
         * within any given sub-batch do not depend on each other.
         * This will abort remaining ops on failure.
         *
-        * @param Array $pPerformOps
+        * @param array $pPerformOps
         * @param Status $status
         * @return bool Success
         */
@@ -199,6 +203,7 @@ class FileOpBatch {
                                }
                        }
                }
+
                return $status;
        }
 }
index ec2e2c0..5c9fdc2 100644 (file)
  * @since 1.19
  */
 class SwiftFileBackend extends FileBackendStore {
-       /** @var CF_Authentication */
-       protected $auth; // Swift authentication handler
-       protected $authTTL; // integer seconds
-       protected $swiftTempUrlKey; // string; shared secret value for making temp urls
-       protected $swiftAnonUser; // string; username to handle unauthenticated requests
-       protected $swiftUseCDN; // boolean; whether CloudFiles CDN is enabled
-       protected $swiftCDNExpiry; // integer; how long to cache things in the CDN
-       protected $swiftCDNPurgable; // boolean; whether object CDN purging is enabled
+       /** @var CF_Authentication Swift authentication handler */
+       protected $auth;
+
+       /** @var int TTL in seconds */
+       protected $authTTL;
+
+       /** @var string Shared secret value for making temp URLs */
+       protected $swiftTempUrlKey;
+
+       /** @var string Username to handle unauthenticated requests */
+       protected $swiftAnonUser;
+
+       /** @var bool Whether CloudFiles CDN is enabled */
+       protected $swiftUseCDN;
+
+       /** @var int How long to cache things in the CDN */
+       protected $swiftCDNExpiry;
+
+       /** @var bool Whether object CDN purging is enabled */
+       protected $swiftCDNPurgable;
 
        // Rados Gateway specific options
-       protected $rgwS3AccessKey; // string; S3 access key
-       protected $rgwS3SecretKey; // string; S3 authentication key
+       /** @var string S3 access key */
+       protected $rgwS3AccessKey;
 
-       /** @var CF_Connection */
-       protected $conn; // Swift connection handle
-       protected $sessionStarted = 0; // integer UNIX timestamp
+       /** @var string S3 authentication key */
+       protected $rgwS3SecretKey;
+
+       /** @var CF_Connection Swift connection handle*/
+       protected $conn;
+
+       /** @var int UNIX timestamp */
+       protected $sessionStarted = 0;
 
        /** @var CloudFilesException */
        protected $connException;
-       protected $connErrorTime = 0; // UNIX timestamp
+
+       /** @var int UNIX timestamp */
+       protected $connErrorTime = 0;
 
        /** @var BagOStuff */
        protected $srvCache;
@@ -153,7 +172,8 @@ class SwiftFileBackend extends FileBackendStore {
                        } else {
                                try { // look for APC, XCache, WinCache, ect...
                                        $this->srvCache = ObjectCache::newAccelerator( array() );
-                               } catch ( Exception $e ) {}
+                               } catch ( Exception $e ) {
+                               }
                        }
                }
                $this->srvCache = $this->srvCache ? $this->srvCache : new EmptyBagOStuff();
@@ -161,7 +181,10 @@ class SwiftFileBackend extends FileBackendStore {
 
        /**
         * @see FileBackendStore::resolveContainerPath()
-        * @return null
+        * @param string $container
+        * @param string $relStoragePath
+        * @return string|null Returns null when the URL encoded storage path is
+        *   longer than 1024 characters or not UTF-8 encoded.
         */
        protected function resolveContainerPath( $container, $relStoragePath ) {
                if ( !mb_check_encoding( $relStoragePath, 'UTF-8' ) ) { // mb_string required by CF
@@ -169,6 +192,7 @@ class SwiftFileBackend extends FileBackendStore {
                } elseif ( strlen( urlencode( $relStoragePath ) ) > 1024 ) {
                        return null; // too long for Swift
                }
+
                return $relStoragePath;
        }
 
@@ -180,6 +204,7 @@ class SwiftFileBackend extends FileBackendStore {
 
                try {
                        $this->getContainer( $container );
+
                        return true; // container exists
                } catch ( NoSuchContainerException $e ) {
                } catch ( CloudFilesException $e ) { // some other exception?
@@ -198,6 +223,7 @@ class SwiftFileBackend extends FileBackendStore {
                if ( isset( $headers['Content-Disposition'] ) ) {
                        $headers['Content-Disposition'] = $this->truncDisp( $headers['Content-Disposition'] );
                }
+
                return $headers;
        }
 
@@ -216,6 +242,7 @@ class SwiftFileBackend extends FileBackendStore {
                                break; // too long; sigh
                        }
                }
+
                return $res;
        }
 
@@ -225,6 +252,7 @@ class SwiftFileBackend extends FileBackendStore {
                list( $dstCont, $dstRel ) = $this->resolveStoragePathReal( $params['dst'] );
                if ( $dstRel === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dst'] );
+
                        return $status;
                }
 
@@ -233,9 +261,11 @@ class SwiftFileBackend extends FileBackendStore {
                        $dContObj = $this->getContainer( $dstCont );
                } catch ( NoSuchContainerException $e ) {
                        $status->fatal( 'backend-fail-create', $params['dst'] );
+
                        return $status;
                } catch ( CloudFilesException $e ) { // some other exception?
                        $this->handleException( $e, $status, __METHOD__, $params );
+
                        return $status;
                }
 
@@ -293,6 +323,7 @@ class SwiftFileBackend extends FileBackendStore {
                list( $dstCont, $dstRel ) = $this->resolveStoragePathReal( $params['dst'] );
                if ( $dstRel === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dst'] );
+
                        return $status;
                }
 
@@ -301,9 +332,11 @@ class SwiftFileBackend extends FileBackendStore {
                        $dContObj = $this->getContainer( $dstCont );
                } catch ( NoSuchContainerException $e ) {
                        $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
+
                        return $status;
                } catch ( CloudFilesException $e ) { // some other exception?
                        $this->handleException( $e, $status, __METHOD__, $params );
+
                        return $status;
                }
 
@@ -313,6 +346,7 @@ class SwiftFileBackend extends FileBackendStore {
                wfRestoreWarnings();
                if ( $sha1Hash === false ) { // source doesn't exist?
                        $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
+
                        return $status;
                }
                $sha1Hash = wfBaseConvert( $sha1Hash, 16, 36, 31 );
@@ -379,12 +413,14 @@ class SwiftFileBackend extends FileBackendStore {
                list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $params['src'] );
                if ( $srcRel === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['src'] );
+
                        return $status;
                }
 
                list( $dstCont, $dstRel ) = $this->resolveStoragePathReal( $params['dst'] );
                if ( $dstRel === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dst'] );
+
                        return $status;
                }
 
@@ -396,9 +432,11 @@ class SwiftFileBackend extends FileBackendStore {
                        if ( empty( $params['ignoreMissingSource'] ) || isset( $sContObj ) ) {
                                $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
                        }
+
                        return $status;
                } catch ( CloudFilesException $e ) { // some other exception?
                        $this->handleException( $e, $status, __METHOD__, $params );
+
                        return $status;
                }
 
@@ -448,12 +486,14 @@ class SwiftFileBackend extends FileBackendStore {
                list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $params['src'] );
                if ( $srcRel === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['src'] );
+
                        return $status;
                }
 
                list( $dstCont, $dstRel ) = $this->resolveStoragePathReal( $params['dst'] );
                if ( $dstRel === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dst'] );
+
                        return $status;
                }
 
@@ -465,9 +505,11 @@ class SwiftFileBackend extends FileBackendStore {
                        if ( empty( $params['ignoreMissingSource'] ) || isset( $sContObj ) ) {
                                $status->fatal( 'backend-fail-move', $params['src'], $params['dst'] );
                        }
+
                        return $status;
                } catch ( CloudFilesException $e ) { // some other exception?
                        $this->handleException( $e, $status, __METHOD__, $params );
+
                        return $status;
                }
 
@@ -520,6 +562,7 @@ class SwiftFileBackend extends FileBackendStore {
                list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $params['src'] );
                if ( $srcRel === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['src'] );
+
                        return $status;
                }
 
@@ -572,6 +615,7 @@ class SwiftFileBackend extends FileBackendStore {
                list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $params['src'] );
                if ( $srcRel === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['src'] );
+
                        return $status;
                }
 
@@ -605,12 +649,14 @@ class SwiftFileBackend extends FileBackendStore {
                // (a) Check if container already exists
                try {
                        $this->getContainer( $fullCont );
+
                        // NoSuchContainerException not thrown: container must exist
                        return $status; // already exists
                } catch ( NoSuchContainerException $e ) {
                        // NoSuchContainerException thrown: container does not exist
                } catch ( CloudFilesException $e ) { // some other exception?
                        $this->handleException( $e, $status, __METHOD__, $params );
+
                        return $status;
                }
 
@@ -631,6 +677,7 @@ class SwiftFileBackend extends FileBackendStore {
                        // CDN not enabled; nothing to see here
                } catch ( CloudFilesException $e ) { // some other exception?
                        $this->handleException( $e, $status, __METHOD__, $params );
+
                        return $status;
                }
 
@@ -639,6 +686,9 @@ class SwiftFileBackend extends FileBackendStore {
 
        /**
         * @see FileBackendStore::doSecureInternal()
+        * @param string $fullCont
+        * @param string $dir
+        * @param array $params
         * @return Status
         */
        protected function doSecureInternal( $fullCont, $dir, array $params ) {
@@ -674,6 +724,9 @@ class SwiftFileBackend extends FileBackendStore {
 
        /**
         * @see FileBackendStore::doPublishInternal()
+        * @param string $fullCont
+        * @param string $dir
+        * @param array $params
         * @return Status
         */
        protected function doPublishInternal( $fullCont, $dir, array $params ) {
@@ -727,6 +780,7 @@ class SwiftFileBackend extends FileBackendStore {
                        return $status; // ok, nothing to do
                } catch ( CloudFilesException $e ) { // some other exception?
                        $this->handleException( $e, $status, __METHOD__, $params );
+
                        return $status;
                }
 
@@ -740,6 +794,7 @@ class SwiftFileBackend extends FileBackendStore {
                                return $status; // race? consistency delay?
                        } catch ( CloudFilesException $e ) { // some other exception?
                                $this->handleException( $e, $status, __METHOD__, $params );
+
                                return $status;
                        }
                }
@@ -786,6 +841,7 @@ class SwiftFileBackend extends FileBackendStore {
         */
        protected function convertSwiftDate( $ts, $format = TS_MW ) {
                $timestamp = new MWTimestamp( $ts );
+
                return $timestamp->getTimestamp( $format );
        }
 
@@ -813,6 +869,7 @@ class SwiftFileBackend extends FileBackendStore {
                                        $obj->setMetadataValues( array( 'Sha1base36' => $hash ) );
                                        $obj->sync_metadata(); // save to Swift
                                        wfProfileOut( __METHOD__ );
+
                                        return true; // success
                                }
                        }
@@ -820,6 +877,7 @@ class SwiftFileBackend extends FileBackendStore {
                trigger_error( "Unable to set SHA-1 metadata for $path", E_USER_WARNING );
                $obj->setMetadataValues( array( 'Sha1base36' => false ) );
                wfProfileOut( __METHOD__ );
+
                return false; // failed
        }
 
@@ -893,12 +951,16 @@ class SwiftFileBackend extends FileBackendStore {
 
        /**
         * @see FileBackendStore::doDirectoryExists()
+        * @param string $fullCont
+        * @param string $dir
+        * @param array $params
         * @return bool|null
         */
        protected function doDirectoryExists( $fullCont, $dir, array $params ) {
                try {
                        $container = $this->getContainer( $fullCont );
                        $prefix = ( $dir == '' ) ? null : "{$dir}/";
+
                        return ( count( $container->list_objects( 1, null, $prefix ) ) > 0 );
                } catch ( NoSuchContainerException $e ) {
                        return false;
@@ -912,6 +974,9 @@ class SwiftFileBackend extends FileBackendStore {
 
        /**
         * @see FileBackendStore::getDirectoryListInternal()
+        * @param string $fullCont
+        * @param string $dir
+        * @param array $params
         * @return SwiftFileBackendDirList
         */
        public function getDirectoryListInternal( $fullCont, $dir, array $params ) {
@@ -920,6 +985,9 @@ class SwiftFileBackend extends FileBackendStore {
 
        /**
         * @see FileBackendStore::getFileListInternal()
+        * @param string $fullCont
+        * @param string $dir
+        * @param array $params
         * @return SwiftFileBackendFileList
         */
        public function getFileListInternal( $fullCont, $dir, array $params ) {
@@ -932,9 +1000,9 @@ class SwiftFileBackend extends FileBackendStore {
         * @param string $fullCont Resolved container name
         * @param string $dir Resolved storage directory with no trailing slash
         * @param string|null $after Resolved container relative path to list items after
-        * @param integer $limit Max number of items to list
+        * @param int $limit Max number of items to list
         * @param array $params Parameters for getDirectoryList()
-        * @return Array List of container relative resolved paths of directories directly under $dir
+        * @return array List of container relative resolved paths of directories directly under $dir
         * @throws FileBackendError
         */
        public function getDirListPageInternal( $fullCont, $dir, &$after, $limit, array $params ) {
@@ -1007,9 +1075,9 @@ class SwiftFileBackend extends FileBackendStore {
         * @param string $fullCont Resolved container name
         * @param string $dir Resolved storage directory with no trailing slash
         * @param string|null $after Resolved container relative path of file to list items after
-        * @param integer $limit Max number of items to list
+        * @param int $limit Max number of items to list
         * @param array $params Parameters for getDirectoryList()
-        * @return Array List of resolved container relative paths of files under $dir
+        * @return array List of resolved container relative paths of files under $dir
         * @throws FileBackendError
         */
        public function getFileListPageInternal( $fullCont, $dir, &$after, $limit, array $params ) {
@@ -1075,8 +1143,8 @@ class SwiftFileBackend extends FileBackendStore {
                        if ( is_object( $object ) ) {
                                $stat = array(
                                        // Convert various random Swift dates to TS_MW
-                                       'mtime'  => $this->convertSwiftDate( $object->last_modified, TS_MW ),
-                                       'size'   => (int)$object->content_length,
+                                       'mtime' => $this->convertSwiftDate( $object->last_modified, TS_MW ),
+                                       'size' => (int)$object->content_length,
                                        'latest' => false // eventually consistent
                                );
                                $names[] = array( $object->name, $stat );
@@ -1085,6 +1153,7 @@ class SwiftFileBackend extends FileBackendStore {
                                $names[] = array( $object, null );
                        }
                }
+
                return $names;
        }
 
@@ -1093,7 +1162,6 @@ class SwiftFileBackend extends FileBackendStore {
         *
         * @param string $path Storage path
         * @param array $val Stat value
-        * @return void
         */
        public function loadListingStatInternal( $path, array $val ) {
                $this->cheapCache->set( $path, 'stat', $val );
@@ -1107,6 +1175,7 @@ class SwiftFileBackend extends FileBackendStore {
                                $this->clearCache( array( $params['src'] ) );
                                $stat = $this->getFileStat( $params );
                        }
+
                        return $stat['sha1'];
                } else {
                        return false;
@@ -1125,9 +1194,11 @@ class SwiftFileBackend extends FileBackendStore {
                        $cont = $this->getContainer( $srcCont );
                } catch ( NoSuchContainerException $e ) {
                        $status->fatal( 'backend-fail-stream', $params['src'] );
+
                        return $status;
                } catch ( CloudFilesException $e ) { // some other exception?
                        $this->handleException( $e, $status, __METHOD__, $params );
+
                        return $status;
                }
 
@@ -1215,8 +1286,8 @@ class SwiftFileBackend extends FileBackendStore {
 
        public function getFileHttpUrl( array $params ) {
                if ( $this->swiftTempUrlKey != '' ||
-                       ( $this->rgwS3AccessKey != '' && $this->rgwS3SecretKey != '' ) )
-               {
+                       ( $this->rgwS3AccessKey != '' && $this->rgwS3SecretKey != '' )
+               {
                        list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $params['src'] );
                        if ( $srcRel === null ) {
                                return null; // invalid path
@@ -1239,6 +1310,7 @@ class SwiftFileBackend extends FileBackendStore {
                                                $this->rgwS3SecretKey,
                                                true // raw
                                        ) );
+
                                        // See http://s3.amazonaws.com/doc/s3-developer-guide/RESTAuthentication.html.
                                        // Note: adding a newline for empty CanonicalizedAmzHeaders does not work.
                                        return wfAppendQuery(
@@ -1255,6 +1327,7 @@ class SwiftFileBackend extends FileBackendStore {
                                $this->handleException( $e, null, __METHOD__, $params );
                        }
                }
+
                return null;
        }
 
@@ -1268,13 +1341,14 @@ class SwiftFileBackend extends FileBackendStore {
         * $params is currently only checked for a 'latest' flag.
         *
         * @param array $params
-        * @return Array
+        * @return array
         */
        protected function headersFromParams( array $params ) {
                $hdrs = array();
                if ( !empty( $params['latest'] ) ) {
                        $hdrs[] = 'X-Newest: true';
                }
+
                return $hdrs;
        }
 
@@ -1307,7 +1381,13 @@ class SwiftFileBackend extends FileBackendStore {
        /**
         * Set read/write permissions for a Swift container.
         *
-        * $readGrps is a list of the possible criteria for a request to have
+        * @see http://swift.openstack.org/misc.html#acls
+        *
+        * In general, we don't allow listings to end-users. It's not useful, isn't well-defined
+        * (lists are truncated to 10000 item with no way to page), and is just a performance risk.
+        *
+        * @param CF_Container $contObj Swift container
+        * @param array $readGrps List of the possible criteria for a request to have
         * access to read a container. Each item is one of the following formats:
         *   - account:user        : Grants access if the request is by the given user
         *   - ".r:<regex>"        : Grants access if the request is from a referrer host that
@@ -1315,19 +1395,9 @@ class SwiftFileBackend extends FileBackendStore {
         *                           Setting this to '*' effectively makes a container public.
         *   -".rlistings:<regex>" : Grants access if the request is from a referrer host that
         *                           matches the expression and the request is for a listing.
-        *
-        * $writeGrps is a list of the possible criteria for a request to have
+        * @param array $writeGrps A list of the possible criteria for a request to have
         * access to write to a container. Each item is of the following format:
         *   - account:user       : Grants access if the request is by the given user
-        *
-        * @see http://swift.openstack.org/misc.html#acls
-        *
-        * In general, we don't allow listings to end-users. It's not useful, isn't well-defined
-        * (lists are truncated to 10000 item with no way to page), and is just a performance risk.
-        *
-        * @param CF_Container $contObj Swift container
-        * @param array $readGrps List of read access routes
-        * @param array $writeGrps List of write access routes
         * @return Status
         */
        protected function setContainerAccess(
@@ -1351,7 +1421,6 @@ class SwiftFileBackend extends FileBackendStore {
         * This is for Rackspace/Akamai CDNs.
         *
         * @param array $objects List of CF_Object items
-        * @return void
         */
        public function purgeCDNCache( array $objects ) {
                if ( $this->swiftUseCDN && $this->swiftCDNPurgable ) {
@@ -1413,13 +1482,12 @@ class SwiftFileBackend extends FileBackendStore {
                        }
                        $this->conn = new CF_Connection( $this->auth );
                }
+
                return $this->conn;
        }
 
        /**
         * Close the connection to the Swift proxy
-        *
-        * @return void
         */
        protected function closeConnection() {
                if ( $this->conn ) {
@@ -1466,6 +1534,7 @@ class SwiftFileBackend extends FileBackendStore {
                                );
                        }
                }
+
                return $this->connContainerCache->get( $container, 'obj' );
        }
 
@@ -1487,7 +1556,6 @@ class SwiftFileBackend extends FileBackendStore {
         * Delete a Swift container
         *
         * @param string $container Container name
-        * @return void
         * @throws CloudFilesException
         */
        protected function deleteContainer( $container ) {
@@ -1514,10 +1582,9 @@ class SwiftFileBackend extends FileBackendStore {
         * This also sets the Status object to have a fatal error.
         *
         * @param Exception $e
-        * @param Status $status|null
+        * @param Status $status null
         * @param string $func
         * @param array $params
-        * @return void
         */
        protected function handleException( Exception $e, $status, $func, array $params ) {
                if ( $status instanceof Status ) {
@@ -1547,7 +1614,8 @@ class SwiftFileBackend extends FileBackendStore {
 class SwiftFileOpHandle extends FileBackendStoreOpHandle {
        /** @var CF_Async_Op */
        public $cfOp;
-       /** @var Array */
+
+       /** @var array */
        public $affectedObjects = array();
 
        /**
@@ -1574,18 +1642,29 @@ class SwiftFileOpHandle extends FileBackendStoreOpHandle {
  * @ingroup FileBackend
  */
 abstract class SwiftFileBackendList implements Iterator {
-       /** @var Array List of path or (path,stat array) entries */
+       /** @var array List of path or (path,stat array) entries */
        protected $bufferIter = array();
-       protected $bufferAfter = null; // string; list items *after* this path
-       protected $pos = 0; // integer
-       /** @var Array */
+
+       /** @var string List items *after* this path */
+       protected $bufferAfter = null;
+
+       /** @var int */
+       protected $pos = 0;
+
+       /** @var array */
        protected $params = array();
 
        /** @var SwiftFileBackend */
        protected $backend;
-       protected $container; // string; container name
-       protected $dir; // string; storage directory
-       protected $suffixStart; // integer
+
+       /** @var string Container name */
+       protected $container;
+
+       /** @var string Storage directory */
+       protected $dir;
+
+       /** @var int */
+       protected $suffixStart;
 
        const PAGE_SIZE = 9000; // file listing buffer size
 
@@ -1612,7 +1691,7 @@ abstract class SwiftFileBackendList implements Iterator {
 
        /**
         * @see Iterator::key()
-        * @return integer
+        * @return int
         */
        public function key() {
                return $this->pos;
@@ -1620,7 +1699,6 @@ abstract class SwiftFileBackendList implements Iterator {
 
        /**
         * @see Iterator::next()
-        * @return void
         */
        public function next() {
                // Advance to the next file in the page
@@ -1637,7 +1715,6 @@ abstract class SwiftFileBackendList implements Iterator {
 
        /**
         * @see Iterator::rewind()
-        * @return void
         */
        public function rewind() {
                $this->pos = 0;
@@ -1664,10 +1741,10 @@ abstract class SwiftFileBackendList implements Iterator {
         *
         * @param string $container Resolved container name
         * @param string $dir Resolved path relative to container
-        * @param string $after|null
-        * @param integer $limit
+        * @param string $after null
+        * @param int $limit
         * @param array $params
-        * @return Traversable|Array
+        * @return Traversable|array
         */
        abstract protected function pageFromList( $container, $dir, &$after, $limit, array $params );
 }
@@ -1686,7 +1763,12 @@ class SwiftFileBackendDirList extends SwiftFileBackendList {
 
        /**
         * @see SwiftFileBackendList::pageFromList()
-        * @return Array
+        * @param string $container
+        * @param string $dir
+        * @param string $after
+        * @param int $limit
+        * @param array $params
+        * @return array
         */
        protected function pageFromList( $container, $dir, &$after, $limit, array $params ) {
                return $this->backend->getDirListPageInternal( $container, $dir, $after, $limit, $params );
@@ -1706,14 +1788,20 @@ class SwiftFileBackendFileList extends SwiftFileBackendList {
                $relPath = substr( $path, $this->suffixStart );
                if ( is_array( $stat ) ) {
                        $storageDir = rtrim( $this->params['dir'], '/' );
-                       $this->backend->loadListingStatInternal( "$storageDir/$path", $stat );
+                       $this->backend->loadListingStatInternal( "$storageDir/$relPath", $stat );
                }
+
                return $relPath;
        }
 
        /**
         * @see SwiftFileBackendList::pageFromList()
-        * @return Array
+        * @param string $container
+        * @param string $dir
+        * @param string $after
+        * @param int $limit
+        * @param array $params
+        * @return array
         */
        protected function pageFromList( $container, $dir, &$after, $limit, array $params ) {
                return $this->backend->getFileListPageInternal( $container, $dir, $after, $limit, $params );
index 8266e42..c0070ca 100644 (file)
  * @ingroup FileBackend
  */
 class TempFSFile extends FSFile {
-       protected $canDelete = false; // bool; garbage collect the temp file
+       /** @var bool Garbage collect the temp file */
+       protected $canDelete = false;
 
-       /** @var Array of active temp files to purge on shutdown */
+       /** @var array Active temp files to purge on shutdown */
        protected static $instances = array();
 
        /**
@@ -56,12 +57,14 @@ class TempFSFile extends FSFile {
                        }
                        if ( $attempt >= 5 ) {
                                wfProfileOut( __METHOD__ );
+
                                return null; // give up
                        }
                }
                $tmpFile = new self( $path );
                $tmpFile->canDelete = true; // safely instantiated
                wfProfileOut( __METHOD__ );
+
                return $tmpFile;
        }
 
@@ -75,6 +78,7 @@ class TempFSFile extends FSFile {
                wfSuppressWarnings();
                $ok = unlink( $this->path );
                wfRestoreWarnings();
+
                return $ok;
        }
 
@@ -92,6 +96,7 @@ class TempFSFile extends FSFile {
                        }
                        $object->tempFSFileReferences[] = $this;
                }
+
                return $this;
        }
 
@@ -102,6 +107,7 @@ class TempFSFile extends FSFile {
         */
        public function preserve() {
                $this->canDelete = false;
+
                return $this;
        }
 
@@ -112,6 +118,7 @@ class TempFSFile extends FSFile {
         */
        public function autocollect() {
                $this->canDelete = true;
+
                return $this;
        }
 
index 9250aa5..4f64f02 100644 (file)
@@ -34,10 +34,9 @@ class DBFileJournal extends FileJournal {
 
        /**
         * Construct a new instance from configuration.
-        * $config includes:
-        *     'wiki' : wiki name to use for LoadBalancer
         *
-        * @param $config Array
+        * @param array $config Includes:
+        *     'wiki' : wiki name to use for LoadBalancer
         */
        protected function __construct( array $config ) {
                parent::__construct( $config );
@@ -47,6 +46,8 @@ class DBFileJournal extends FileJournal {
 
        /**
         * @see FileJournal::logChangeBatch()
+        * @param array $entries
+        * @param string $batchId
         * @return Status
         */
        protected function doLogChangeBatch( array $entries, $batchId ) {
@@ -56,6 +57,7 @@ class DBFileJournal extends FileJournal {
                        $dbw = $this->getMasterDB();
                } catch ( DBError $e ) {
                        $status->fatal( 'filejournal-fail-dbconnect', $this->backend );
+
                        return $status;
                }
 
@@ -80,6 +82,7 @@ class DBFileJournal extends FileJournal {
                        }
                } catch ( DBError $e ) {
                        $status->fatal( 'filejournal-fail-dbquery', $this->backend );
+
                        return $status;
                }
 
@@ -88,7 +91,7 @@ class DBFileJournal extends FileJournal {
 
        /**
         * @see FileJournal::doGetCurrentPosition()
-        * @return integer|false
+        * @return bool|mixed The value from the field, or false on failure.
         */
        protected function doGetCurrentPosition() {
                $dbw = $this->getMasterDB();
@@ -101,13 +104,14 @@ class DBFileJournal extends FileJournal {
 
        /**
         * @see FileJournal::doGetPositionAtTime()
-        * @param $time integer|string timestamp
-        * @return integer|false
+        * @param int|string $time Timestamp
+        * @return bool|mixed The value from the field, or false on failure.
         */
        protected function doGetPositionAtTime( $time ) {
                $dbw = $this->getMasterDB();
 
                $encTimestamp = $dbw->addQuotes( $dbw->timestamp( $time ) );
+
                return $dbw->selectField( 'filejournal', 'fj_id',
                        array( 'fj_backend' => $this->backend, "fj_timestamp <= $encTimestamp" ),
                        __METHOD__,
@@ -117,8 +121,9 @@ class DBFileJournal extends FileJournal {
 
        /**
         * @see FileJournal::doGetChangeEntries()
-        * @return Array
-        * @throws DBError
+        * @param int $start
+        * @param int $limit
+        * @return array
         */
        protected function doGetChangeEntries( $start, $limit ) {
                $dbw = $this->getMasterDB();
@@ -179,6 +184,7 @@ class DBFileJournal extends FileJournal {
                        $this->dbw = $lb->getConnection( DB_MASTER, array(), $this->wiki );
                        $this->dbw->clearFlag( DBO_TRX );
                }
+
                return $this->dbw;
        }
 }
index a1b7a45..3ab9f5d 100644 (file)
  * @since 1.20
  */
 abstract class FileJournal {
-       protected $backend; // string
-       protected $ttlDays; // integer
+       /** @var  string */
+       protected $backend;
+
+       /** @var int */
+       protected $ttlDays;
 
        /**
         * Construct a new instance from configuration.
-        * $config includes:
-        *     'ttlDays' : days to keep log entries around (false means "forever")
         *
-        * @param $config Array
+        * @param array $config Includes:
+        *     'ttlDays' : days to keep log entries around (false means "forever")
         */
        protected function __construct( array $config ) {
                $this->ttlDays = isset( $config['ttlDays'] ) ? $config['ttlDays'] : false;
@@ -53,7 +55,7 @@ abstract class FileJournal {
        /**
         * Create an appropriate FileJournal object from config
         *
-        * @param $config Array
+        * @param array $config
         * @param string $backend A registered file backend name
         * @throws MWException
         * @return FileJournal
@@ -65,6 +67,7 @@ abstract class FileJournal {
                        throw new MWException( "Class given is not an instance of FileJournal." );
                }
                $jrn->backend = $backend;
+
                return $jrn;
        }
 
@@ -79,18 +82,18 @@ abstract class FileJournal {
                        $s .= mt_rand( 0, 2147483647 );
                }
                $s = wfBaseConvert( sha1( $s ), 16, 36, 31 );
+
                return substr( wfBaseConvert( wfTimestamp( TS_MW ), 10, 36, 9 ) . $s, 0, 31 );
        }
 
        /**
         * Log changes made by a batch file operation.
-        * $entries is an array of log entries, each of which contains:
+        *
+        * @param array $entries List of file operations (each an array of parameters) which contain:
         *     op      : Basic operation name (create, update, delete)
         *     path    : The storage path of the file
         *     newSha1 : The final base 36 SHA-1 of the file
-        * Note that 'false' should be used as the SHA-1 for non-existing files.
-        *
-        * @param array $entries List of file operations (each an array of parameters)
+        *   Note that 'false' should be used as the SHA-1 for non-existing files.
         * @param string $batchId UUID string that identifies the operation batch
         * @return Status
         */
@@ -98,6 +101,7 @@ abstract class FileJournal {
                if ( !count( $entries ) ) {
                        return Status::newGood();
                }
+
                return $this->doLogChangeBatch( $entries, $batchId );
        }
 
@@ -113,7 +117,7 @@ abstract class FileJournal {
        /**
         * Get the position ID of the latest journal entry
         *
-        * @return integer|false
+        * @return int|bool
         */
        final public function getCurrentPosition() {
                return $this->doGetCurrentPosition();
@@ -121,15 +125,15 @@ abstract class FileJournal {
 
        /**
         * @see FileJournal::getCurrentPosition()
-        * @return integer|false
+        * @return int|bool
         */
        abstract protected function doGetCurrentPosition();
 
        /**
         * Get the position ID of the latest journal entry at some point in time
         *
-        * @param $time integer|string timestamp
-        * @return integer|false
+        * @param int|string $time timestamp
+        * @return int|bool
         */
        final public function getPositionAtTime( $time ) {
                return $this->doGetPositionAtTime( $time );
@@ -137,8 +141,8 @@ abstract class FileJournal {
 
        /**
         * @see FileJournal::getPositionAtTime()
-        * @param $time integer|string timestamp
-        * @return integer|false
+        * @param int|string $time Timestamp
+        * @return int|bool
         */
        abstract protected function doGetPositionAtTime( $time );
 
@@ -146,7 +150,10 @@ abstract class FileJournal {
         * Get an array of file change log entries.
         * A starting change ID and/or limit can be specified.
         *
-        * The result as a list of associative arrays, each having:
+        * @param $start integer Starting change ID or null
+        * @param $limit integer Maximum number of items to return
+        * @param &$next string Updated to the ID of the next entry.
+        * @return array List of associative arrays, each having:
         *     id         : unique, monotonic, ID for this change
         *     batch_uuid : UUID for an operation batch
         *     backend    : the backend name
@@ -154,13 +161,7 @@ abstract class FileJournal {
         *     path       : affected storage path
         *     new_sha1   : base 36 sha1 of the new file had the operation succeeded
         *     timestamp  : TS_MW timestamp of the batch change
-
-        * Also, $next is updated to the ID of the next entry.
-        *
-        * @param $start integer Starting change ID or null
-        * @param $limit integer Maximum number of items to return
-        * @param &$next string
-        * @return Array
+        *   Also, $next is updated to the ID of the next entry.
         */
        final public function getChangeEntries( $start = null, $limit = 0, &$next = null ) {
                $entries = $this->doGetChangeEntries( $start, $limit ? $limit + 1 : 0 );
@@ -170,12 +171,15 @@ abstract class FileJournal {
                } else {
                        $next = null; // end of list
                }
+
                return $entries;
        }
 
        /**
         * @see FileJournal::getChangeEntries()
-        * @return Array
+        * @param int $start
+        * @param int $limit
+        * @return array
         */
        abstract protected function doGetChangeEntries( $start, $limit );
 
@@ -202,8 +206,8 @@ abstract class FileJournal {
 class NullFileJournal extends FileJournal {
        /**
         * @see FileJournal::doLogChangeBatch()
-        * @param $entries array
-        * @param $batchId string
+        * @param array $entries
+        * @param string $batchId
         * @return Status
         */
        protected function doLogChangeBatch( array $entries, $batchId ) {
@@ -212,7 +216,7 @@ class NullFileJournal extends FileJournal {
 
        /**
         * @see FileJournal::doGetCurrentPosition()
-        * @return integer|false
+        * @return int|bool
         */
        protected function doGetCurrentPosition() {
                return false;
@@ -220,8 +224,8 @@ class NullFileJournal extends FileJournal {
 
        /**
         * @see FileJournal::doGetPositionAtTime()
-        * @param $time integer|string timestamp
-        * @return integer|false
+        * @param int|string $time timestamp
+        * @return int|bool
         */
        protected function doGetPositionAtTime( $time ) {
                return false;
@@ -229,7 +233,9 @@ class NullFileJournal extends FileJournal {
 
        /**
         * @see FileJournal::doGetChangeEntries()
-        * @return Array
+        * @param int $start
+        * @param int $limit
+        * @return array
         */
        protected function doGetChangeEntries( $start, $limit ) {
                return array();
index 3e934ba..4418a83 100644 (file)
@@ -37,7 +37,7 @@
  * @since 1.19
  */
 abstract class DBLockManager extends QuorumLockManager {
-       /** @var Array Map of DB names to server config */
+       /** @var array Map of DB names to server config */
        protected $dbServers; // (DB name => server config array)
        /** @var BagOStuff */
        protected $statusCache;
@@ -46,13 +46,13 @@ abstract class DBLockManager extends QuorumLockManager {
        protected $safeDelay; // integer number of seconds
 
        protected $session = 0; // random integer
-       /** @var Array Map Database connections (DB name => Database) */
+       /** @var array Map Database connections (DB name => Database) */
        protected $conns = array();
 
        /**
         * Construct a new instance from configuration.
         *
-        * $config paramaters include:
+        * @param array $config Paramaters include:
         *   - dbServers   : Associative array of DB names to server configuration.
         *                   Configuration is an associative array that includes:
         *                     - host        : DB server name
@@ -70,8 +70,6 @@ abstract class DBLockManager extends QuorumLockManager {
         *   - lockExpiry  : Lock timeout (seconds) for dropped connections. [optional]
         *                   This tells the DB server how long to wait before assuming
         *                   connection failure and releasing all the locks for a session.
-        *
-        * @param array $config
         */
        public function __construct( array $config ) {
                parent::__construct( $config );
@@ -116,6 +114,7 @@ abstract class DBLockManager extends QuorumLockManager {
                foreach ( $pathsByType as $type => $paths ) {
                        $status->merge( $this->doGetLocksOnServer( $lockSrv, $paths, $type ) );
                }
+
                return $status;
        }
 
@@ -125,6 +124,7 @@ abstract class DBLockManager extends QuorumLockManager {
 
        /**
         * @see QuorumLockManager::isServerUp()
+        * @param string $lockSrv
         * @return bool
         */
        protected function isServerUp( $lockSrv ) {
@@ -135,15 +135,17 @@ abstract class DBLockManager extends QuorumLockManager {
                        $this->getConnection( $lockSrv );
                } catch ( DBError $e ) {
                        $this->cacheRecordFailure( $lockSrv );
+
                        return false; // failed to connect
                }
+
                return true;
        }
 
        /**
         * Get (or reuse) a connection to a lock DB
         *
-        * @param $lockDb string
+        * @param string $lockDb
         * @return DatabaseBase
         * @throws DBError
         */
@@ -175,18 +177,19 @@ abstract class DBLockManager extends QuorumLockManager {
                if ( !$this->conns[$lockDb]->trxLevel() ) {
                        $this->conns[$lockDb]->begin( __METHOD__ ); // start transaction
                }
+
                return $this->conns[$lockDb];
        }
 
        /**
         * Do additional initialization for new lock DB connection
         *
-        * @param $lockDb string
-        * @param $db DatabaseBase
-        * @return void
+        * @param string $lockDb
+        * @param DatabaseBase $db
         * @throws DBError
         */
-       protected function initConnection( $lockDb, DatabaseBase $db ) {}
+       protected function initConnection( $lockDb, DatabaseBase $db ) {
+       }
 
        /**
         * Checks if the DB has not recently had connection/query errors.
@@ -204,7 +207,7 @@ abstract class DBLockManager extends QuorumLockManager {
        /**
         * Log a lock request failure to the cache
         *
-        * @param $lockDb string
+        * @param string $lockDb
         * @return bool Success
         */
        protected function cacheRecordFailure( $lockDb ) {
@@ -216,7 +219,7 @@ abstract class DBLockManager extends QuorumLockManager {
        /**
         * Get a cache key for recent query misses for a DB
         *
-        * @param $lockDb string
+        * @param string $lockDb
         * @return string
         */
        protected function getMissKey( $lockDb ) {
@@ -242,7 +245,7 @@ abstract class DBLockManager extends QuorumLockManager {
  * @ingroup LockManager
  */
 class MySqlLockManager extends DBLockManager {
-       /** @var Array Mapping of lock types to the type actually used */
+       /** @var array Mapping of lock types to the type actually used */
        protected $lockTypeMap = array(
                self::LOCK_SH => self::LOCK_SH,
                self::LOCK_UW => self::LOCK_SH,
@@ -250,8 +253,8 @@ class MySqlLockManager extends DBLockManager {
        );
 
        /**
-        * @param $lockDb string
-        * @param $db DatabaseBase
+        * @param string $lockDb
+        * @param DatabaseBase $db
         */
        protected function initConnection( $lockDb, DatabaseBase $db ) {
                # Let this transaction see lock rows from other transactions
@@ -263,6 +266,9 @@ class MySqlLockManager extends DBLockManager {
         * This does not use GET_LOCK() per http://bugs.mysql.com/bug.php?id=1118.
         *
         * @see DBLockManager::getLocksOnServer()
+        * @param string $lockSrv
+        * @param array $paths
+        * @param string $type
         * @return Status
         */
        protected function doGetLocksOnServer( $lockSrv, array $paths, $type ) {
@@ -359,7 +365,7 @@ class MySqlLockManager extends DBLockManager {
  * @ingroup LockManager
  */
 class PostgreSqlLockManager extends DBLockManager {
-       /** @var Array Mapping of lock types to the type actually used */
+       /** @var array Mapping of lock types to the type actually used */
        protected $lockTypeMap = array(
                self::LOCK_SH => self::LOCK_SH,
                self::LOCK_UW => self::LOCK_SH,
@@ -374,7 +380,7 @@ class PostgreSqlLockManager extends DBLockManager {
 
                $db = $this->getConnection( $lockSrv ); // checked in isServerUp()
                $bigints = array_unique( array_map(
-                       function( $key ) {
+                       function ( $key ) {
                                return wfBaseConvert( substr( $key, 0, 15 ), 16, 10 );
                        },
                        array_map( array( $this, 'sha1Base16Absolute' ), $paths )
index eacba70..e97ec11 100644 (file)
@@ -34,7 +34,7 @@
  * @since 1.19
  */
 class FSLockManager extends LockManager {
-       /** @var Array Mapping of lock types to the type actually used */
+       /** @var array Mapping of lock types to the type actually used */
        protected $lockTypeMap = array(
                self::LOCK_SH => self::LOCK_SH,
                self::LOCK_UW => self::LOCK_SH,
@@ -43,16 +43,14 @@ class FSLockManager extends LockManager {
 
        protected $lockDir; // global dir for all servers
 
-       /** @var Array Map of (locked key => lock file handle) */
+       /** @var array Map of (locked key => lock file handle) */
        protected $handles = array();
 
        /**
         * Construct a new instance from configuration.
         *
-        * $config includes:
+        * @param array $config Includes:
         *   - lockDirectory : Directory containing the lock files
-        *
-        * @param array $config
         */
        function __construct( array $config ) {
                parent::__construct( $config );
@@ -62,8 +60,8 @@ class FSLockManager extends LockManager {
 
        /**
         * @see LockManager::doLock()
-        * @param $paths array
-        * @param $type int
+        * @param array $paths
+        * @param int $type
         * @return Status
         */
        protected function doLock( array $paths, $type ) {
@@ -77,6 +75,7 @@ class FSLockManager extends LockManager {
                        } else {
                                // Abort and unlock everything
                                $status->merge( $this->doUnlock( $lockedPaths, $type ) );
+
                                return $status;
                        }
                }
@@ -86,8 +85,8 @@ class FSLockManager extends LockManager {
 
        /**
         * @see LockManager::doUnlock()
-        * @param $paths array
-        * @param $type int
+        * @param array $paths
+        * @param int $type
         * @return Status
         */
        protected function doUnlock( array $paths, $type ) {
@@ -103,8 +102,8 @@ class FSLockManager extends LockManager {
        /**
         * Lock a single resource key
         *
-        * @param $path string
-        * @param $type integer
+        * @param array $path
+        * @param int $type
         * @return Status
         */
        protected function doSingleLock( $path, $type ) {
@@ -148,8 +147,8 @@ class FSLockManager extends LockManager {
        /**
         * Unlock a single resource key
         *
-        * @param $path string
-        * @param $type integer
+        * @param array $path
+        * @param int $type
         * @return Status
         */
        protected function doSingleUnlock( $path, $type ) {
@@ -191,8 +190,8 @@ class FSLockManager extends LockManager {
        }
 
        /**
-        * @param $path string
-        * @param $handlesToClose array
+        * @param string $path
+        * @param array $handlesToClose
         * @return Status
         */
        private function closeLockHandles( $path, array $handlesToClose ) {
@@ -205,11 +204,12 @@ class FSLockManager extends LockManager {
                                $status->warning( 'lockmanager-fail-closelock', $path );
                        }
                }
+
                return $status;
        }
 
        /**
-        * @param $path string
+        * @param string $path
         * @return Status
         */
        private function pruneKeyLockFiles( $path ) {
@@ -221,12 +221,13 @@ class FSLockManager extends LockManager {
                        }
                        unset( $this->handles[$path] );
                }
+
                return $status;
        }
 
        /**
         * Get the path to the lock file for a key
-        * @param $path string
+        * @param string $path
         * @return string
         */
        protected function getLockPath( $path ) {
index 97de8dc..539a780 100644 (file)
  * @since 1.19
  */
 class LSLockManager extends QuorumLockManager {
-       /** @var Array Mapping of lock types to the type actually used */
+       /** @var array Mapping of lock types to the type actually used */
        protected $lockTypeMap = array(
                self::LOCK_SH => self::LOCK_SH,
                self::LOCK_UW => self::LOCK_SH,
                self::LOCK_EX => self::LOCK_EX
        );
 
-       /** @var Array Map of server names to server config */
+       /** @var array Map of server names to server config */
        protected $lockServers; // (server name => server config array)
 
-       /** @var Array Map Server connections (server name => resource) */
+       /** @var array Map Server connections (server name => resource) */
        protected $conns = array();
 
        protected $connTimeout; // float number of seconds
@@ -56,7 +56,7 @@ class LSLockManager extends QuorumLockManager {
        /**
         * Construct a new instance from configuration.
         *
-        * $config paramaters include:
+        * @param array $config Paramaters include:
         *   - lockServers  : Associative array of server names to configuration.
         *                    Configuration is an associative array that includes:
         *                      - host    : IP address/hostname
@@ -65,8 +65,6 @@ class LSLockManager extends QuorumLockManager {
         *   - srvsByBucket : Array of 1-16 consecutive integer keys, starting from 0,
         *                    each having an odd-numbered list of server names (peers) as values.
         *   - connTimeout  : Lock server connection attempt timeout. [optional]
-        *
-        * @param array $config
         */
        public function __construct( array $config ) {
                parent::__construct( $config );
@@ -87,6 +85,9 @@ class LSLockManager extends QuorumLockManager {
 
        /**
         * @see QuorumLockManager::getLocksOnServer()
+        * @param string $lockSrv
+        * @param array $paths
+        * @param int $type
         * @return Status
         */
        protected function getLocksOnServer( $lockSrv, array $paths, $type ) {
@@ -108,6 +109,9 @@ class LSLockManager extends QuorumLockManager {
 
        /**
         * @see QuorumLockManager::freeLocksOnServer()
+        * @param string $lockSrv
+        * @param array $paths
+        * @param int $type
         * @return Status
         */
        protected function freeLocksOnServer( $lockSrv, array $paths, $type ) {
@@ -146,6 +150,7 @@ class LSLockManager extends QuorumLockManager {
 
        /**
         * @see QuorumLockManager::isServerUp()
+        * @param string $lockSrv
         * @return bool
         */
        protected function isServerUp( $lockSrv ) {
@@ -155,10 +160,10 @@ class LSLockManager extends QuorumLockManager {
        /**
         * Send a command and get back the response
         *
-        * @param $lockSrv string
-        * @param $action string
-        * @param $type string
-        * @param $values Array
+        * @param string $lockSrv
+        * @param string $action
+        * @param string $type
+        * @param array $values
         * @return string|bool
         */
        protected function sendCommand( $lockSrv, $action, $type, $values ) {
@@ -179,13 +184,14 @@ class LSLockManager extends QuorumLockManager {
                if ( $response === false ) {
                        return false;
                }
+
                return trim( $response );
        }
 
        /**
         * Get (or reuse) a connection to a lock server
         *
-        * @param $lockSrv string
+        * @param string $lockSrv
         * @return resource
         */
        protected function getConnection( $lockSrv ) {
@@ -203,6 +209,7 @@ class LSLockManager extends QuorumLockManager {
                        stream_set_timeout( $conn, $sec, $usec );
                        $this->conns[$lockSrv] = $conn;
                }
+
                return $this->conns[$lockSrv];
        }
 
index dad8a62..7e06e48 100644 (file)
  * @since 1.19
  */
 abstract class LockManager {
-       /** @var Array Mapping of lock types to the type actually used */
+       /** @var array Mapping of lock types to the type actually used */
        protected $lockTypeMap = array(
                self::LOCK_SH => self::LOCK_SH,
                self::LOCK_UW => self::LOCK_EX, // subclasses may use self::LOCK_SH
                self::LOCK_EX => self::LOCK_EX
        );
 
-       /** @var Array Map of (resource path => lock type => count) */
+       /** @var array Map of (resource path => lock type => count) */
        protected $locksHeld = array();
 
        protected $domain; // string; domain (usually wiki ID)
@@ -64,12 +64,10 @@ abstract class LockManager {
        /**
         * Construct a new instance from configuration
         *
-        * $config paramaters include:
+        * @param array $config Paramaters include:
         *   - domain  : Domain (usually wiki ID) that all resources are relative to [optional]
         *   - lockTTL : Age (in seconds) at which resource locks should expire.
         *               This only applies if locks are not tied to a connection/process.
-        *
-        * @param $config Array
         */
        public function __construct( array $config ) {
                $this->domain = isset( $config['domain'] ) ? $config['domain'] : wfWikiID();
@@ -87,8 +85,8 @@ abstract class LockManager {
         * Lock the resources at the given abstract paths
         *
         * @param array $paths List of resource names
-        * @param $type integer LockManager::LOCK_* constant
-        * @param integer $timeout Timeout in seconds (0 means non-blocking) (since 1.21)
+        * @param int $type LockManager::LOCK_* constant
+        * @param int $timeout Timeout in seconds (0 means non-blocking) (since 1.21)
         * @return Status
         */
        final public function lock( array $paths, $type = self::LOCK_EX, $timeout = 0 ) {
@@ -99,7 +97,7 @@ abstract class LockManager {
         * Lock the resources at the given abstract paths
         *
         * @param array $pathsByType Map of LockManager::LOCK_* constants to lists of paths
-        * @param integer $timeout Timeout in seconds (0 means non-blocking) (since 1.21)
+        * @param int $timeout Timeout in seconds (0 means non-blocking) (since 1.21)
         * @return Status
         * @since 1.22
         */
@@ -119,6 +117,7 @@ abstract class LockManager {
                        $elapsed = microtime( true ) - $start;
                } while ( $elapsed < $timeout && $elapsed >= 0 );
                wfProfileOut( __METHOD__ );
+
                return $status;
        }
 
@@ -126,7 +125,7 @@ abstract class LockManager {
         * Unlock the resources at the given abstract paths
         *
         * @param array $paths List of paths
-        * @param $type integer LockManager::LOCK_* constant
+        * @param int $type LockManager::LOCK_* constant
         * @return Status
         */
        final public function unlock( array $paths, $type = self::LOCK_EX ) {
@@ -145,6 +144,7 @@ abstract class LockManager {
                $pathsByType = $this->normalizePathsByType( $pathsByType );
                $status = $this->doUnlockByType( $pathsByType );
                wfProfileOut( __METHOD__ );
+
                return $status;
        }
 
@@ -153,7 +153,7 @@ abstract class LockManager {
         * Before hashing, the path will be prefixed with the domain ID.
         * This should be used interally for lock key or file names.
         *
-        * @param $path string
+        * @param string $path
         * @return string
         */
        final protected function sha1Base36Absolute( $path ) {
@@ -165,7 +165,7 @@ abstract class LockManager {
         * Before hashing, the path will be prefixed with the domain ID.
         * This should be used interally for lock key or file names.
         *
-        * @param $path string
+        * @param string $path
         * @return string
         */
        final protected function sha1Base16Absolute( $path ) {
@@ -176,8 +176,8 @@ abstract class LockManager {
         * Normalize the $paths array by converting LOCK_UW locks into the
         * appropriate type and removing any duplicated paths for each lock type.
         *
-        * @param array $paths Map of LockManager::LOCK_* constants to lists of paths
-        * @return Array
+        * @param array $pathsByType Map of LockManager::LOCK_* constants to lists of paths
+        * @return array
         * @since 1.22
         */
        final protected function normalizePathsByType( array $pathsByType ) {
@@ -185,12 +185,13 @@ abstract class LockManager {
                foreach ( $pathsByType as $type => $paths ) {
                        $res[$this->lockTypeMap[$type]] = array_unique( $paths );
                }
+
                return $res;
        }
 
        /**
         * @see LockManager::lockByType()
-        * @param array $paths Map of LockManager::LOCK_* constants to lists of paths
+        * @param array $pathsByType Map of LockManager::LOCK_* constants to lists of paths
         * @return Status
         * @since 1.22
         */
@@ -209,6 +210,7 @@ abstract class LockManager {
                                break;
                        }
                }
+
                return $status;
        }
 
@@ -216,14 +218,14 @@ abstract class LockManager {
         * Lock resources with the given keys and lock type
         *
         * @param array $paths List of paths
-        * @param $type integer LockManager::LOCK_* constant
+        * @param int $type LockManager::LOCK_* constant
         * @return Status
         */
        abstract protected function doLock( array $paths, $type );
 
        /**
         * @see LockManager::unlockByType()
-        * @param array $paths Map of LockManager::LOCK_* constants to lists of paths
+        * @param array $pathsByType Map of LockManager::LOCK_* constants to lists of paths
         * @return Status
         * @since 1.22
         */
@@ -232,6 +234,7 @@ abstract class LockManager {
                foreach ( $pathsByType as $type => $paths ) {
                        $status->merge( $this->doUnlock( $paths, $type ) );
                }
+
                return $status;
        }
 
@@ -239,7 +242,7 @@ abstract class LockManager {
         * Unlock resources with the given keys and lock type
         *
         * @param array $paths List of paths
-        * @param $type integer LockManager::LOCK_* constant
+        * @param int $type LockManager::LOCK_* constant
         * @return Status
         */
        abstract protected function doUnlock( array $paths, $type );
index 9aff241..ecf396a 100644 (file)
  * @since 1.19
  */
 class LockManagerGroup {
-       /** @var Array (domain => LockManager) */
+       /** @var array (domain => LockManager) */
        protected static $instances = array();
 
        protected $domain; // string; domain (usually wiki ID)
 
-       /** @var Array of (name => ('class' => ..., 'config' => ..., 'instance' => ...)) */
+       /** @var array of (name => ('class' => ..., 'config' => ..., 'instance' => ...)) */
        protected $managers = array();
 
        /**
@@ -45,7 +45,7 @@ class LockManagerGroup {
        }
 
        /**
-        * @param string $domain Domain (usually wiki ID)
+        * @param bool|string $domain Domain (usually wiki ID). Default: false.
         * @return LockManagerGroup
         */
        public static function singleton( $domain = false ) {
@@ -54,13 +54,12 @@ class LockManagerGroup {
                        self::$instances[$domain] = new self( $domain );
                        self::$instances[$domain]->initFromGlobals();
                }
+
                return self::$instances[$domain];
        }
 
        /**
         * Destroy the singleton instances
-        *
-        * @return void
         */
        public static function destroySingletons() {
                self::$instances = array();
@@ -68,8 +67,6 @@ class LockManagerGroup {
 
        /**
         * Register lock managers from the global variables
-        *
-        * @return void
         */
        protected function initFromGlobals() {
                global $wgLockManagers;
@@ -80,8 +77,7 @@ class LockManagerGroup {
        /**
         * Register an array of file lock manager configurations
         *
-        * @param $configs Array
-        * @return void
+        * @param array $configs
         * @throws MWException
         */
        protected function register( array $configs ) {
@@ -107,7 +103,7 @@ class LockManagerGroup {
        /**
         * Get the lock manager object with a given name
         *
-        * @param $name string
+        * @param string $name
         * @return LockManager
         * @throws MWException
         */
@@ -121,14 +117,15 @@ class LockManagerGroup {
                        $config = $this->managers[$name]['config'];
                        $this->managers[$name]['instance'] = new $class( $config );
                }
+
                return $this->managers[$name]['instance'];
        }
 
        /**
         * Get the config array for a lock manager object with a given name
         *
-        * @param $name string
-        * @return Array
+        * @param string $name
+        * @return array
         * @throws MWException
         */
        public function config( $name ) {
@@ -136,6 +133,7 @@ class LockManagerGroup {
                        throw new MWException( "No lock manager defined with the name `$name`." );
                }
                $class = $this->managers[$name]['class'];
+
                return array( 'class' => $class ) + $this->managers[$name]['config'];
        }
 
index 5eab03e..254c693 100644 (file)
  * @since 1.20
  */
 class MemcLockManager extends QuorumLockManager {
-       /** @var Array Mapping of lock types to the type actually used */
+       /** @var array Mapping of lock types to the type actually used */
        protected $lockTypeMap = array(
                self::LOCK_SH => self::LOCK_SH,
                self::LOCK_UW => self::LOCK_SH,
                self::LOCK_EX => self::LOCK_EX
        );
 
-       /** @var Array Map server names to MemcachedBagOStuff objects */
+       /** @var array Map server names to MemcachedBagOStuff objects */
        protected $bagOStuffs = array();
-       /** @var Array */
-       protected $serversUp = array(); // (server name => bool)
 
-       protected $session = ''; // string; random UUID
+       /** @var array (server name => bool) */
+       protected $serversUp = array();
+
+       /** @var string random UUID */
+       protected $session = '';
 
        /**
         * Construct a new instance from configuration.
         *
-        * $config paramaters include:
+        * @param array $config Paramaters include:
         *   - lockServers  : Associative array of server names to "<IP>:<port>" strings.
         *   - srvsByBucket : Array of 1-16 consecutive integer keys, starting from 0,
         *                    each having an odd-numbered list of server names (peers) as values.
         *   - memcConfig   : Configuration array for ObjectCache::newFromParams. [optional]
         *                    If set, this must use one of the memcached classes.
-        *
-        * @param array $config
         * @throws MWException
         */
        public function __construct( array $config ) {
@@ -88,7 +88,7 @@ class MemcLockManager extends QuorumLockManager {
                $this->session = wfRandomString( 32 );
        }
 
-       // @TODO: change this code to work in one batch
+       // @todo Change this code to work in one batch
        protected function getLocksOnServer( $lockSrv, array $pathsByType ) {
                $status = Status::newGood();
 
@@ -110,7 +110,7 @@ class MemcLockManager extends QuorumLockManager {
                return $status;
        }
 
-       // @TODO: change this code to work in one batch
+       // @todo Change this code to work in one batch
        protected function freeLocksOnServer( $lockSrv, array $pathsByType ) {
                $status = Status::newGood();
 
@@ -123,6 +123,9 @@ class MemcLockManager extends QuorumLockManager {
 
        /**
         * @see QuorumLockManager::getLocksOnServer()
+        * @param string $lockSrv
+        * @param array $paths
+        * @param string $type
         * @return Status
         */
        protected function doGetLocksOnServer( $lockSrv, array $paths, $type ) {
@@ -136,6 +139,7 @@ class MemcLockManager extends QuorumLockManager {
                        foreach ( $paths as $path ) {
                                $status->fatal( 'lockmanager-fail-acquirelock', $path );
                        }
+
                        return $status;
                }
 
@@ -195,6 +199,9 @@ class MemcLockManager extends QuorumLockManager {
 
        /**
         * @see QuorumLockManager::freeLocksOnServer()
+        * @param string $lockSrv
+        * @param array $paths
+        * @param string $type
         * @return Status
         */
        protected function doFreeLocksOnServer( $lockSrv, array $paths, $type ) {
@@ -208,6 +215,7 @@ class MemcLockManager extends QuorumLockManager {
                        foreach ( $paths as $path ) {
                                $status->fatal( 'lockmanager-fail-releaselock', $path );
                        }
+
                        return;
                }
 
@@ -254,6 +262,7 @@ class MemcLockManager extends QuorumLockManager {
 
        /**
         * @see QuorumLockManager::isServerUp()
+        * @param string $lockSrv
         * @return bool
         */
        protected function isServerUp( $lockSrv ) {
@@ -280,11 +289,12 @@ class MemcLockManager extends QuorumLockManager {
                                return null; // server appears to be down
                        }
                }
+
                return $memc;
        }
 
        /**
-        * @param $path string
+        * @param string $path
         * @return string
         */
        protected function recordKeyForPath( $path ) {
@@ -292,27 +302,28 @@ class MemcLockManager extends QuorumLockManager {
        }
 
        /**
-        * @return Array An empty lock structure for a key
+        * @return array An empty lock structure for a key
         */
        protected static function newLockArray() {
                return array( self::LOCK_SH => array(), self::LOCK_EX => array() );
        }
 
        /**
-        * @param $a array
-        * @return Array An empty lock structure for a key
+        * @param array $a
+        * @return array An empty lock structure for a key
         */
        protected static function sanitizeLockArray( $a ) {
                if ( is_array( $a ) && isset( $a[self::LOCK_EX] ) && isset( $a[self::LOCK_SH] ) ) {
                        return $a;
                } else {
                        trigger_error( __METHOD__ . ": reset invalid lock array.", E_USER_WARNING );
+
                        return self::newLockArray();
                }
        }
 
        /**
-        * @param $memc MemcachedBagOStuff
+        * @param MemcachedBagOStuff $memc
         * @param array $keys List of keys to acquire
         * @return bool
         */
@@ -350,9 +361,8 @@ class MemcLockManager extends QuorumLockManager {
        }
 
        /**
-        * @param $memc MemcachedBagOStuff
+        * @param MemcachedBagOStuff $memc
         * @param array $keys List of acquired keys
-        * @return void
         */
        protected function releaseMutexes( MemcachedBagOStuff $memc, array $keys ) {
                foreach ( $keys as $key ) {
index 8356d32..d17074e 100644 (file)
  * @since 1.20
  */
 abstract class QuorumLockManager extends LockManager {
-       /** @var Array Map of bucket indexes to peer server lists */
+       /** @var array Map of bucket indexes to peer server lists */
        protected $srvsByBucket = array(); // (bucket index => (lsrv1, lsrv2, ...))
-       /** @var Array Map of degraded buckets */
+
+       /** @var array Map of degraded buckets */
        protected $degradedBuckets = array(); // (buckey index => UNIX timestamp)
 
        final protected function doLock( array $paths, $type ) {
@@ -65,6 +66,7 @@ abstract class QuorumLockManager extends LockManager {
                        $status->merge( $this->doLockingRequestBucket( $bucket, $pathsToLockByType ) );
                        if ( !$status->isOK() ) {
                                $status->merge( $this->doUnlockByType( $lockedPaths ) );
+
                                return $status;
                        }
                        // Record these locks as active
@@ -120,7 +122,7 @@ abstract class QuorumLockManager extends LockManager {
         * Attempt to acquire locks with the peers for a bucket.
         * This is all or nothing; if any key is locked then this totally fails.
         *
-        * @param $bucket integer
+        * @param int $bucket
         * @param array $pathsByType Map of LockManager::LOCK_* constants to lists of paths
         * @return Status
         */
@@ -162,7 +164,7 @@ abstract class QuorumLockManager extends LockManager {
        /**
         * Attempt to release locks with the peers for a bucket
         *
-        * @param $bucket integer
+        * @param int $bucket
         * @param array $pathsByType Map of LockManager::LOCK_* constants to lists of paths
         * @return Status
         */
@@ -198,8 +200,8 @@ abstract class QuorumLockManager extends LockManager {
         * Get the bucket for resource path.
         * This should avoid throwing any exceptions.
         *
-        * @param $path string
-        * @return integer
+        * @param string $path
+        * @return int
         */
        protected function getBucketFromPath( $path ) {
                $prefix = substr( sha1( $path ), 0, 2 ); // first 2 hex chars (8 bits)
@@ -210,7 +212,7 @@ abstract class QuorumLockManager extends LockManager {
         * Check if a lock server is up.
         * This should process cache results to reduce RTT.
         *
-        * @param $lockSrv string
+        * @param string $lockSrv
         * @return bool
         */
        abstract protected function isServerUp( $lockSrv );
@@ -218,7 +220,7 @@ abstract class QuorumLockManager extends LockManager {
        /**
         * Get a connection to a lock server and acquire locks
         *
-        * @param $lockSrv string
+        * @param string $lockSrv
         * @param array $pathsByType Map of LockManager::LOCK_* constants to lists of paths
         * @return Status
         */
@@ -229,7 +231,7 @@ abstract class QuorumLockManager extends LockManager {
         *
         * Subclasses must effectively implement this or releaseAllLocks().
         *
-        * @param $lockSrv string
+        * @param string $lockSrv
         * @param array $pathsByType Map of LockManager::LOCK_* constants to lists of paths
         * @return Status
         */
index 43b0198..5540f61 100644 (file)
@@ -38,7 +38,7 @@
  * @since 1.22
  */
 class RedisLockManager extends QuorumLockManager {
-       /** @var Array Mapping of lock types to the type actually used */
+       /** @var array Mapping of lock types to the type actually used */
        protected $lockTypeMap = array(
                self::LOCK_SH => self::LOCK_SH,
                self::LOCK_UW => self::LOCK_SH,
@@ -47,21 +47,21 @@ class RedisLockManager extends QuorumLockManager {
 
        /** @var RedisConnectionPool */
        protected $redisPool;
-       /** @var Array Map server names to hostname/IP and port numbers */
+
+       /** @var array Map server names to hostname/IP and port numbers */
        protected $lockServers = array();
 
-       protected $session = ''; // string; random UUID
+       /** @var string random UUID */
+       protected $session = '';
 
        /**
         * Construct a new instance from configuration.
         *
-        * $config paramaters include:
+        * @param array $config Parameters include:
         *   - lockServers  : Associative array of server names to "<IP>:<port>" strings.
         *   - srvsByBucket : Array of 1-16 consecutive integer keys, starting from 0,
         *                    each having an odd-numbered list of server names (peers) as values.
         *   - redisConfig  : Configuration for RedisConnectionPool::__construct().
-        *
-        * @param Array $config
         * @throws MWException
         */
        public function __construct( array $config ) {
@@ -100,7 +100,7 @@ class RedisLockManager extends QuorumLockManager {
                return $status;
        }
 
-       // @TODO: change this code to work in one batch
+       // @todo Change this code to work in one batch
        protected function freeLocksOnServer( $lockSrv, array $pathsByType ) {
                $status = Status::newGood();
 
@@ -120,6 +120,7 @@ class RedisLockManager extends QuorumLockManager {
                        foreach ( $paths as $path ) {
                                $status->fatal( 'lockmanager-fail-acquirelock', $path );
                        }
+
                        return $status;
                }
 
@@ -204,6 +205,7 @@ LUA;
                        foreach ( $paths as $path ) {
                                $status->fatal( 'lockmanager-fail-releaselock', $path );
                        }
+
                        return $status;
                }
 
@@ -267,7 +269,7 @@ LUA;
        }
 
        /**
-        * @param $path string
+        * @param string $path
         * @return string
         */
        protected function recordKeyForPath( $path ) {
index 5faad4a..2056e10 100644 (file)
 class ScopedLock {
        /** @var LockManager */
        protected $manager;
+
        /** @var Status */
        protected $status;
-       /** @var Array Map of lock types to resource paths */
+
+       /** @var array Map of lock types to resource paths */
        protected $pathsByType;
 
        /**
@@ -55,14 +57,13 @@ class ScopedLock {
         * Any locks are released once this object goes out of scope.
         * The status object is updated with any errors or warnings.
         *
-        * $type can be "mixed" and $paths can be a map of types to paths (since 1.22).
-        * Otherwise $type should be an integer and $paths should be a list of paths.
-        *
         * @param LockManager $manager
         * @param array $paths List of storage paths or map of lock types to path lists
-        * @param integer|string $type LockManager::LOCK_* constant or "mixed"
+        * @param int|string $type LockManager::LOCK_* constant or "mixed" and $paths
+        *   can be a map of types to paths (since 1.22). Otherwise $type should be an
+        *   integer and $paths should be a list of paths.
         * @param Status $status
-        * @param integer $timeout Timeout in seconds (0 means non-blocking) (since 1.22)
+        * @param int $timeout Timeout in seconds (0 means non-blocking) (since 1.22)
         * @return ScopedLock|null Returns null on failure
         */
        public static function factory(
@@ -74,6 +75,7 @@ class ScopedLock {
                if ( $lockStatus->isOK() ) {
                        return new self( $manager, $pathsByType, $status );
                }
+
                return null;
        }
 
@@ -83,7 +85,6 @@ class ScopedLock {
         * This is the same as setting the lock object to null.
         *
         * @param ScopedLock $lock
-        * @return void
         * @since 1.21
         */
        public static function release( ScopedLock &$lock = null ) {
index 1195d5f..faed953 100644 (file)
@@ -1717,7 +1717,6 @@ class FileRepo {
         */
        protected function assertWritableRepo() {}
 
-
        /**
         * Return information about the repository.
         *
@@ -1725,12 +1724,24 @@ class FileRepo {
         * @since 1.22
         */
        public function getInfo() {
-               return array(
+               $ret = array(
                        'name' => $this->getName(),
                        'displayname' => $this->getDisplayName(),
-                       'rootUrl' => $this->getRootUrl(),
+                       'rootUrl' => $this->getZoneUrl( 'public' ),
                        'local' => $this->isLocal(),
                );
+
+               $optionalSettings = array(
+                       'url', 'thumbUrl', 'initialCapital', 'descBaseUrl', 'scriptDirUrl', 'articleUrl',
+                       'fetchDescription', 'descriptionCacheExpiry', 'scriptExtension'
+               );
+               foreach ( $optionalSettings as $k ) {
+                       if ( isset( $this->$k ) ) {
+                               $ret[$k] = $this->$k;
+                       }
+               }
+
+               return $ret;
        }
 }
 
index 07cc03b..e64c88a 100644 (file)
@@ -177,7 +177,7 @@ class ForeignAPIRepo extends FileRepo {
         * @return string
         */
        function fetchImageQuery( $query ) {
-               global $wgMemc, $wgLanguageCode;
+               global $wgLanguageCode;
 
                $query = array_merge( $query,
                        array(
index fe769be..2cd4f90 100644 (file)
@@ -539,7 +539,7 @@ class LocalFile extends File {
                                'img_media_type' => $this->media_type,
                                'img_major_mime' => $major,
                                'img_minor_mime' => $minor,
-                               'img_metadata' => $dbw->encodeBlob($this->metadata),
+                               'img_metadata' => $dbw->encodeBlob( $this->metadata ),
                                'img_sha1' => $this->sha1,
                        ),
                        array( 'img_name' => $this->getName() ),
@@ -1225,7 +1225,7 @@ class LocalFile extends File {
                                'img_description' => $comment,
                                'img_user' => $user->getId(),
                                'img_user_text' => $user->getName(),
-                               'img_metadata' => $dbw->encodeBlob($this->metadata),
+                               'img_metadata' => $dbw->encodeBlob( $this->metadata ),
                                'img_sha1' => $this->sha1
                        ),
                        __METHOD__,
@@ -1276,7 +1276,7 @@ class LocalFile extends File {
                                        'img_description' => $comment,
                                        'img_user'        => $user->getId(),
                                        'img_user_text'   => $user->getName(),
-                                       'img_metadata'    => $dbw->encodeBlob($this->metadata),
+                                       'img_metadata'    => $dbw->encodeBlob( $this->metadata ),
                                        'img_sha1'        => $this->sha1
                                ),
                                array( 'img_name' => $this->getName() ),
@@ -1371,7 +1371,6 @@ class LocalFile extends File {
                        $dbw->commit( __METHOD__ ); // commit before anything bad can happen
                }
 
-
                wfProfileOut( __METHOD__ . '-edit' );
 
                # Save to cache and purge the squid
index f8b8c50..f85f3a7 100644 (file)
@@ -74,7 +74,7 @@ abstract class ImageGalleryBase extends ContextSource {
                }
        }
 
-       static private function loadModes() {
+       private static function loadModes() {
                if ( self::$modeMapping === false ) {
                        self::$modeMapping = array(
                                'traditional' => 'TraditionalImageGallery',
index 1f60fa6..c6e6dd3 100644 (file)
@@ -22,7 +22,6 @@
 
 class TraditionalImageGallery extends ImageGalleryBase {
 
-
        /**
         * Return a HTML representation of the image gallery
         *
@@ -167,7 +166,6 @@ class TraditionalImageGallery extends ImageGalleryBase {
                                ) . "<br />\n" :
                                '';
 
-
                        $galleryText = $textlink . $text . $fileSize;
                        $galleryText = $this->wrapGalleryText( $galleryText, $thumb );
 
@@ -185,7 +183,6 @@ class TraditionalImageGallery extends ImageGalleryBase {
                return $output;
        }
 
-
        /**
         * Add the wrapper html around the thumb's caption
         *
index 43d90e5..b4f2194 100644 (file)
@@ -243,7 +243,10 @@ abstract class DatabaseInstaller {
                if ( $status->isOK() ) {
                        $status->value->setSchemaVars( $this->getSchemaVars() );
                } else {
-                       throw new MWException( __METHOD__ . ': unexpected DB connection error' );
+                       $msg = __METHOD__ . ': unexpected error while establishing'
+                               . ' a database connection with message: '
+                               . $status->getMessage()->plain();
+                       throw new MWException( $msg );
                }
        }
 
index 41cbf50..3f2e2cb 100644 (file)
@@ -1045,7 +1045,7 @@ abstract class DatabaseUpdater {
        protected function disableContentHandlerUseDB() {
                global $wgContentHandlerUseDB;
 
-               if( $wgContentHandlerUseDB ) {
+               if ( $wgContentHandlerUseDB ) {
                        $this->output( "Turning off Content Handler DB fields for this part of upgrade.\n" );
                        $this->holdContentHandlerUseDB = $wgContentHandlerUseDB;
                        $wgContentHandlerUseDB = false;
@@ -1058,7 +1058,7 @@ abstract class DatabaseUpdater {
        protected function enableContentHandlerUseDB() {
                global $wgContentHandlerUseDB;
 
-               if( $this->holdContentHandlerUseDB ) {
+               if ( $this->holdContentHandlerUseDB ) {
                        $this->output( "Content Handler DB fields should be usable now.\n" );
                        $wgContentHandlerUseDB = $this->holdContentHandlerUseDB;
                }
index 56d8353..301db14 100644 (file)
@@ -222,10 +222,10 @@ class LocalSettingsGenerator {
                        }
                }
 
-               $wgServerSetting = "";
+               $serverSetting = "";
                if ( array_key_exists( 'wgServer', $this->values ) && $this->values['wgServer'] !== null ) {
-                       $wgServerSetting = "\n## The protocol and server name to use in fully-qualified URLs\n";
-                       $wgServerSetting .= "\$wgServer = \"{$this->values['wgServer']}\";\n";
+                       $serverSetting = "\n## The protocol and server name to use in fully-qualified URLs\n";
+                       $serverSetting .= "\$wgServer = \"{$this->values['wgServer']}\";\n";
                }
 
                switch ( $this->values['wgMainCacheType'] ) {
@@ -271,7 +271,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 ## http://www.mediawiki.org/wiki/Manual:Short_URL
 \$wgScriptPath = \"{$this->values['wgScriptPath']}\";
 \$wgScriptExtension = \"{$this->values['wgScriptExtension']}\";
-${wgServerSetting}
+${serverSetting}
 ## The relative URL path to the skins directory
 \$wgStylePath = \"\$wgScriptPath/skins\";
 
index 32e7510..cea4d78 100644 (file)
@@ -66,6 +66,8 @@ class PostgresUpdater extends DatabaseUpdater {
                        array( 'addSequence', 'logging', false, 'logging_log_id_seq' ),
                        array( 'addSequence', 'page_restrictions', false, 'page_restrictions_pr_id_seq' ),
                        array( 'addSequence', 'filearchive', 'fa_id', 'filearchive_fa_id_seq' ),
+                       array( 'addSequence', 'archive', false, 'archive_ar_id_seq' ),
+                       array( 'addSequence', 'externallinks', false, 'externallinks_el_id_seq' ),
 
                        # new tables
                        array( 'addTable', 'category', 'patch-category.sql' ),
index 53cb7dc..b37e6b3 100644 (file)
@@ -336,7 +336,12 @@ class WebInstaller extends Installer {
 
                $this->phpErrors = array();
                set_error_handler( array( $this, 'errorHandler' ) );
-               session_start();
+               try {
+                       session_start();
+               } catch ( Exception $e ) {
+                       restore_error_handler();
+                       throw $e;
+               }
                restore_error_handler();
 
                if ( $this->phpErrors ) {
index 6178e5b..fd91bcb 100644 (file)
@@ -302,7 +302,6 @@ class WebInstallerOutput {
 
 </div></div>
 
-
 <div id="mw-panel">
        <div class="portal" id="p-logo">
          <a style="background-image: url(../skins/common/images/mediawiki.png);"
index c6a799d..f1922a3 100644 (file)
@@ -32,23 +32,27 @@ class JobQueueAggregatorRedis extends JobQueueAggregator {
        /** @var RedisConnectionPool */
        protected $redisPool;
 
+       /** @var Array List of Redis server addresses */
+       protected $servers;
+
        /**
         * @params include:
-        *   - redisConfig : An array of parameters to RedisConnectionPool::__construct().
-        *   - redisServer : A hostname/port combination or the absolute path of a UNIX socket.
-        *                   If a hostname is specified but no port, the standard port number
-        *                   6379 will be used. Required.
+        *   - redisConfig  : An array of parameters to RedisConnectionPool::__construct().
+        *   - redisServers : Array of server entries, the first being the primary and the
+        *                    others being fallback servers. Each entry is either a hostname/port
+        *                    combination or the absolute path of a UNIX socket.
+        *                    If a hostname is specified but no port, the standard port number
+        *                    6379 will be used. Required.
         * @param array $params
         */
        protected function __construct( array $params ) {
                parent::__construct( $params );
-               $this->server = $params['redisServer'];
+               $this->servers = isset( $params['redisServers'] )
+                       ? $params['redisServers']
+                       : array( $params['redisServer'] ); // b/c
                $this->redisPool = RedisConnectionPool::singleton( $params['redisConfig'] );
        }
 
-       /**
-        * @see JobQueueAggregator::doNotifyQueueEmpty()
-        */
        protected function doNotifyQueueEmpty( $wiki, $type ) {
                $conn = $this->getConnection();
                if ( !$conn ) {
@@ -63,9 +67,6 @@ class JobQueueAggregatorRedis extends JobQueueAggregator {
                }
        }
 
-       /**
-        * @see JobQueueAggregator::doNotifyQueueNonEmpty()
-        */
        protected function doNotifyQueueNonEmpty( $wiki, $type ) {
                $conn = $this->getConnection();
                if ( !$conn ) {
@@ -80,9 +81,6 @@ class JobQueueAggregatorRedis extends JobQueueAggregator {
                }
        }
 
-       /**
-        * @see JobQueueAggregator::doAllGetReadyWikiQueues()
-        */
        protected function doGetAllReadyWikiQueues() {
                $conn = $this->getConnection();
                if ( !$conn ) {
@@ -130,9 +128,6 @@ class JobQueueAggregatorRedis extends JobQueueAggregator {
                }
        }
 
-       /**
-        * @see JobQueueAggregator::doPurge()
-        */
        protected function doPurge() {
                $conn = $this->getConnection();
                if ( !$conn ) {
@@ -150,11 +145,18 @@ class JobQueueAggregatorRedis extends JobQueueAggregator {
        /**
         * Get a connection to the server that handles all sub-queues for this queue
         *
-        * @return Array (server name, Redis instance)
+        * @return RedisConnRef|bool Returns false on failure
         * @throws MWException
         */
        protected function getConnection() {
-               return $this->redisPool->getConnection( $this->server );
+               $conn = false;
+               foreach ( $this->servers as $server ) {
+                       $conn = $this->redisPool->getConnection( $server );
+                       if ( $conn ) {
+                               break;
+                       }
+               }
+               return $conn;
        }
 
        /**
@@ -163,7 +165,7 @@ class JobQueueAggregatorRedis extends JobQueueAggregator {
         * @return void
         */
        protected function handleException( RedisConnRef $conn, $e ) {
-               $this->redisPool->handleException( $this->server, $conn, $e );
+               $this->redisPool->handleException( $conn->getServer(), $conn, $e );
        }
 
        /**
index 44c240b..be12937 100644 (file)
@@ -51,9 +51,9 @@ class HTMLCacheUpdateJob extends Job {
 
        /**
         * Construct a job
-        * @param $title Title: the title linked to
+        * @param Title $title The title linked to
         * @param array $params job parameters (table, start and end page_ids)
-        * @param $id Integer: job id
+        * @param int $id Job id
         */
        function __construct( $title, $params, $id = 0 ) {
                global $wgUpdateRowsPerJob, $wgUpdateRowsPerQuery;
@@ -131,9 +131,8 @@ class HTMLCacheUpdateJob extends Job {
         * using a pre-calculated title array which gives the links in that range.
         * Queue the resulting jobs.
         *
-        * @param $titleArray array
-        * @param $rootJobParams array
-        * @return void
+        * @param array $titleArray
+        * @param array $rootJobParams
         */
        protected function insertJobsFromTitles( $titleArray, $rootJobParams = array() ) {
                // Carry over any "root job" information
@@ -184,8 +183,7 @@ class HTMLCacheUpdateJob extends Job {
        }
 
        /**
-        * @param $rootJobParams array
-        * @return void
+        * @param array $rootJobParams
         */
        protected function insertPartitionJobs( $rootJobParams = array() ) {
                // Carry over any "root job" information
@@ -213,7 +211,7 @@ class HTMLCacheUpdateJob extends Job {
 
        /**
         * Invalidate an array (or iterator) of Title objects, right now
-        * @param $titleArray array
+        * @param array $titleArray
         */
        protected function invalidateTitles( $titleArray ) {
                global $wgUseFileCache, $wgUseSquid;
@@ -223,6 +221,7 @@ class HTMLCacheUpdateJob extends Job {
 
                # Get all IDs in this query into an array
                $ids = array();
+               /** @var Title $title */
                foreach ( $titleArray as $title ) {
                        $ids[] = $title->getArticleID();
                }
index 5a24f93..1276e3c 100644 (file)
@@ -51,7 +51,6 @@ class PublishStashedFileJob extends Job {
                                return false;
                        }
 
-
                        UploadBase::setSessionStatus(
                                $this->params['filekey'],
                                array( 'result' => 'Poll', 'stage' => 'publish', 'status' => Status::newGood() )
index e2444a1..4959687 100644 (file)
@@ -168,6 +168,13 @@ class BitmapHandler extends ImageHandler {
 
                # Transform functions and binaries need a FS source file
                $scalerParams['srcPath'] = $image->getLocalRefPath();
+               if ( $scalerParams['srcPath'] === false ) { // Failed to get local copy
+                       wfDebugLog( 'thumbnail',
+                               sprintf( 'Thumbnail failed on %s: could not get local copy of "%s"',
+                                       wfHostname(), $image->getName() ) );
+                       return new MediaTransformError( 'thumbnail_error',
+                               $scalerParams['clientWidth'], $scalerParams['clientHeight'] );
+               }
 
                # Try a hook
                $mto = null;
@@ -701,7 +708,6 @@ class BitmapHandler extends ImageHandler {
                imagejpeg( $dst_image, $thumbPath, 95 );
        }
 
-
        /**
         * Returns whether the current scaler supports rotation (im and gd do)
         *
index 7c39c81..00b4298 100644 (file)
@@ -116,7 +116,7 @@ class BitmapMetadataHandler {
        function getMetadataArray() {
                // this seems a bit ugly... This is all so its merged in right order
                // based on the MWG recomendation.
-               $temp = Array();
+               $temp = array();
                krsort( $this->metaPriority );
                foreach ( $this->metaPriority as $pri ) {
                        foreach ( $pri as $type ) {
@@ -153,7 +153,7 @@ class BitmapMetadataHandler {
 
                $seg = JpegMetadataExtractor::segmentSplitter( $filename );
                if ( isset( $seg['COM'] ) && isset( $seg['COM'][0] ) ) {
-                       $meta->addMetadata( Array( 'JPEGFileComment' => $seg['COM'] ), 'native' );
+                       $meta->addMetadata( array( 'JPEGFileComment' => $seg['COM'] ), 'native' );
                }
                if ( isset( $seg['PSIR'] ) && count( $seg['PSIR'] ) > 0 ) {
                        foreach ( $seg['PSIR'] as $curPSIRValue ) {
index 9a2794a..50dd266 100644 (file)
@@ -319,7 +319,7 @@ class Exif {
         * Make $this->mFilteredExifData
         */
        function makeFilteredData() {
-               $this->mFilteredExifData = Array();
+               $this->mFilteredExifData = array();
 
                foreach ( array_keys( $this->mRawExifData ) as $section ) {
                        if ( !in_array( $section, array_keys( $this->mExifTags ) ) ) {
index 91c4c9a..390b217 100644 (file)
@@ -105,7 +105,7 @@ class FormatMetadata extends ContextSource {
                        // This seems ugly to wrap non-array's in an array just to unwrap again,
                        // especially when most of the time it is not an array
                        if ( !is_array( $tags[$tag] ) ) {
-                               $vals = Array( $vals );
+                               $vals = array( $vals );
                        }
 
                        // _type is a special value to say what array type
@@ -977,7 +977,7 @@ class FormatMetadata extends ContextSource {
                                        $defaultItem = $vals['x-default'];
                                        unset( $vals['x-default'] );
                                }
-                               foreach( $priorityLanguages as $pLang ) {
+                               foreach ( $priorityLanguages as $pLang ) {
                                        if ( isset( $vals[$pLang] ) ) {
                                                $isDefault = false;
                                                if ( $vals[$pLang] === $defaultItem ) {
@@ -1479,6 +1479,7 @@ class FormatMetadata extends ContextSource {
 
                // If revision deleted, exit immediately
                if ( $file->isDeleted( File::DELETED_FILE ) ) {
+                       wfProfileOut( __METHOD__ );
                        return array();
                }
 
@@ -1506,7 +1507,7 @@ class FormatMetadata extends ContextSource {
                        // This is an API-specific function so it would be cleaner to call it from
                        // outside fetchExtendedMetadata, but this way we don't need to redo the
                        // computation on a cache hit.
-                       $this->sanitizeArrayForXml($extendedMetadata);
+                       $this->sanitizeArrayForXml( $extendedMetadata );
                        $valueToCache = array( 'data' => $extendedMetadata, 'timestamp' => wfTimestampNow() );
                        $wgMemc->set( $cacheKey, $valueToCache, $maxCacheTime );
                }
@@ -1628,7 +1629,7 @@ class FormatMetadata extends ContextSource {
 
                // choose the language best matching user or site settings
                $priorityLanguages = $this->getPriorityLanguages();
-               foreach( $priorityLanguages as $lang ) {
+               foreach ( $priorityLanguages as $lang ) {
                        if ( isset( $value[$lang] ) ) {
                                return $value[$lang];
                        }
@@ -1640,9 +1641,9 @@ class FormatMetadata extends ContextSource {
                }
 
                // otherwise just return any one language
-               unset($value['_type']);
-               if (!empty($value)) {
-                       return reset($value);
+               unset( $value['_type'] );
+               if ( !empty( $value ) ) {
+                       return reset( $value );
                }
 
                // this should not happen; signal error
index 544dd21..dc163ac 100644 (file)
@@ -40,7 +40,7 @@ class IPTC {
         */
        static function parse( $rawData ) {
                $parsed = iptcparse( $rawData );
-               $data = Array();
+               $data = array();
                if ( !is_array( $parsed ) ) {
                                return $data;
                }
@@ -225,7 +225,7 @@ class IPTC {
                                        if ( isset( $parsed['2#060'] ) ) {
                                                $time = $parsed['2#060'];
                                        } else {
-                                               $time = Array();
+                                               $time = array();
                                        }
                                        $timestamp = self::timeHelper( $val, $time, $c );
                                        if ( $timestamp ) {
@@ -239,7 +239,7 @@ class IPTC {
                                        if ( isset( $parsed['2#063'] ) ) {
                                                $time = $parsed['2#063'];
                                        } else {
-                                               $time = Array();
+                                               $time = array();
                                        }
                                        $timestamp = self::timeHelper( $val, $time, $c );
                                        if ( $timestamp ) {
@@ -252,7 +252,7 @@ class IPTC {
                                        if ( isset( $parsed['2#035'] ) ) {
                                                $time = $parsed['2#035'];
                                        } else {
-                                               $time = Array();
+                                               $time = array();
                                        }
                                        $timestamp = self::timeHelper( $val, $time, $c );
                                        if ( $timestamp ) {
@@ -265,7 +265,7 @@ class IPTC {
                                        if ( isset( $parsed['2#038'] ) ) {
                                                $time = $parsed['2#038'];
                                        } else {
-                                               $time = Array();
+                                               $time = array();
                                        }
                                        $timestamp = self::timeHelper( $val, $time, $c );
                                        if ( $timestamp ) {
index e079003..b6586d0 100644 (file)
@@ -213,7 +213,6 @@ abstract class ImageHandler extends MediaHandler {
                return $image->getWidth() * $image->getHeight();
        }
 
-
        /**
         * @param $file File
         * @return string
index ddb8efd..c53c829 100644 (file)
@@ -138,8 +138,8 @@ abstract class MediaHandler {
         * @return string version string
         */
        static function getMetadataVersion() {
-               $version = Array( '2' ); // core metadata version
-               wfRunHooks( 'GetMetadataVersion', Array( &$version ) );
+               $version = array( '2' ); // core metadata version
+               wfRunHooks( 'GetMetadataVersion', array( &$version ) );
                return implode( ';', $version );
        }
 
index 2e33bb9..831e043 100644 (file)
@@ -45,7 +45,7 @@ class SVGReader {
 
        private $reader = null;
        private $mDebug = false;
-       private $metadata = Array();
+       private $metadata = array();
 
        /**
         * Constructor
index 7eb3d19..3b31053 100644 (file)
@@ -155,7 +155,7 @@ class XMPReader {
 
                $data = $this->results;
 
-               wfRunHooks( 'XMPGetResults', Array( &$data ) );
+               wfRunHooks( 'XMPGetResults', array( &$data ) );
 
                if ( isset( $data['xmp-special']['AuthorsPosition'] )
                        && is_string( $data['xmp-special']['AuthorsPosition'] )
index f0b2cb5..afc9ece 100644 (file)
@@ -35,7 +35,7 @@ class XMPInfo {
                if ( !self::$ranHooks ) {
                        // This is for if someone makes a custom metadata extension.
                        // For example, a medical wiki might want to decode DICOM xmp properties.
-                       wfRunHooks( 'XMPGetInfo', Array( &self::$items ) );
+                       wfRunHooks( 'XMPGetInfo', array( &self::$items ) );
                        self::$ranHooks = true; // Only want to do this once.
                }
                return self::$items;
index acf2703..919b8b3 100644 (file)
@@ -248,13 +248,13 @@ class SqlBagOStuff extends BagOStuff {
                                        $db = $this->getDB( $row->serverIndex );
                                        if ( $this->isExpired( $db, $row->exptime ) ) { // MISS
                                                $this->debug( "get: key has expired, deleting" );
-                                               $db->begin( __METHOD__ );
+                                               $db->commit( __METHOD__, 'flush' );
                                                # Put the expiry time in the WHERE condition to avoid deleting a
                                                # newly-inserted value
                                                $db->delete( $row->tableName,
                                                        array( 'keyname' => $key, 'exptime' => $row->exptime ),
                                                        __METHOD__ );
-                                               $db->commit( __METHOD__ );
+                                               $db->commit( __METHOD__, 'flush' );
                                                $values[$key] = false;
                                        } else { // HIT
                                                $values[$key] = $this->unserialize( $db->decodeBlob( $row->value ) );
@@ -296,7 +296,7 @@ class SqlBagOStuff extends BagOStuff {
 
                                $encExpiry = $db->timestamp( $exptime );
                        }
-                       $db->begin( __METHOD__ );
+                       $db->commit( __METHOD__, 'flush' );
                        // (bug 24425) use a replace if the db supports it instead of
                        // delete/insert to avoid clashes with conflicting keynames
                        $db->replace(
@@ -307,7 +307,7 @@ class SqlBagOStuff extends BagOStuff {
                                        'value' => $db->encodeBlob( $this->serialize( $value ) ),
                                        'exptime' => $encExpiry
                                ), __METHOD__ );
-                       $db->commit( __METHOD__ );
+                       $db->commit( __METHOD__, 'flush' );
                } catch ( DBError $e ) {
                        $this->handleWriteError( $e, $serverIndex );
                        return false;
@@ -341,7 +341,7 @@ class SqlBagOStuff extends BagOStuff {
                                }
                                $encExpiry = $db->timestamp( $exptime );
                        }
-                       $db->begin( __METHOD__ );
+                       $db->commit( __METHOD__, 'flush' );
                        // (bug 24425) use a replace if the db supports it instead of
                        // delete/insert to avoid clashes with conflicting keynames
                        $db->update(
@@ -357,7 +357,7 @@ class SqlBagOStuff extends BagOStuff {
                                ),
                                __METHOD__
                        );
-                       $db->commit( __METHOD__ );
+                       $db->commit( __METHOD__, 'flush' );
                } catch ( DBQueryError $e ) {
                        $this->handleWriteError( $e, $serverIndex );
 
@@ -376,12 +376,12 @@ class SqlBagOStuff extends BagOStuff {
                list( $serverIndex, $tableName ) = $this->getTableByKey( $key );
                try {
                        $db = $this->getDB( $serverIndex );
-                       $db->begin( __METHOD__ );
+                       $db->commit( __METHOD__, 'flush' );
                        $db->delete(
                                $tableName,
                                array( 'keyname' => $key ),
                                __METHOD__ );
-                       $db->commit( __METHOD__ );
+                       $db->commit( __METHOD__, 'flush' );
                } catch ( DBError $e ) {
                        $this->handleWriteError( $e, $serverIndex );
                        return false;
@@ -400,7 +400,7 @@ class SqlBagOStuff extends BagOStuff {
                try {
                        $db = $this->getDB( $serverIndex );
                        $step = intval( $step );
-                       $db->begin( __METHOD__ );
+                       $db->commit( __METHOD__, 'flush' );
                        $row = $db->selectRow(
                                $tableName,
                                array( 'value', 'exptime' ),
@@ -409,14 +409,14 @@ class SqlBagOStuff extends BagOStuff {
                                array( 'FOR UPDATE' ) );
                        if ( $row === false ) {
                                // Missing
-                               $db->commit( __METHOD__ );
+                               $db->commit( __METHOD__, 'flush' );
 
                                return null;
                        }
                        $db->delete( $tableName, array( 'keyname' => $key ), __METHOD__ );
                        if ( $this->isExpired( $db, $row->exptime ) ) {
                                // Expired, do not reinsert
-                               $db->commit( __METHOD__ );
+                               $db->commit( __METHOD__, 'flush' );
 
                                return null;
                        }
@@ -434,7 +434,7 @@ class SqlBagOStuff extends BagOStuff {
                                // Race condition. See bug 28611
                                $newValue = null;
                        }
-                       $db->commit( __METHOD__ );
+                       $db->commit( __METHOD__, 'flush' );
                } catch ( DBError $e ) {
                        $this->handleWriteError( $e, $serverIndex );
                        return null;
@@ -524,7 +524,7 @@ class SqlBagOStuff extends BagOStuff {
                                                        $maxExpTime = $row->exptime;
                                                }
 
-                                               $db->begin( __METHOD__ );
+                                               $db->commit( __METHOD__, 'flush' );
                                                $db->delete(
                                                        $this->getTableNameByShard( $i ),
                                                        array(
@@ -533,7 +533,7 @@ class SqlBagOStuff extends BagOStuff {
                                                                'keyname' => $keys
                                                        ),
                                                        __METHOD__ );
-                                               $db->commit( __METHOD__ );
+                                               $db->commit( __METHOD__, 'flush' );
 
                                                if ( $progressCallback ) {
                                                        if ( intval( $totalSeconds ) === 0 ) {
@@ -566,9 +566,9 @@ class SqlBagOStuff extends BagOStuff {
                        try {
                                $db = $this->getDB( $serverIndex );
                                for ( $i = 0; $i < $this->shards; $i++ ) {
-                                       $db->begin( __METHOD__ );
+                                       $db->commit( __METHOD__, 'flush' );
                                        $db->delete( $this->getTableNameByShard( $i ), '*', __METHOD__ );
-                                       $db->commit( __METHOD__ );
+                                       $db->commit( __METHOD__, 'flush' );
                                }
                        } catch ( DBError $e ) {
                                $this->handleWriteError( $e, $serverIndex );
@@ -684,12 +684,12 @@ class SqlBagOStuff extends BagOStuff {
                        }
 
                        for ( $i = 0; $i < $this->shards; $i++ ) {
-                               $db->begin( __METHOD__ );
+                               $db->commit( __METHOD__, 'flush' );
                                $db->query(
                                        'CREATE TABLE ' . $db->tableName( $this->getTableNameByShard( $i ) ) .
                                        ' LIKE ' . $db->tableName( 'objectcache' ),
                                        __METHOD__ );
-                               $db->commit( __METHOD__ );
+                               $db->commit( __METHOD__, 'flush' );
                        }
                }
        }
index 8190a8a..a4203b0 100644 (file)
  * @ingroup Parser
  */
 class CacheTime {
+       /** @var  array|bool ParserOptions which have been taken into account to
+        * produce output or false if not available.
+        */
+       public $mUsedOptions;
 
        var     $mVersion = Parser::VERSION,  # Compatibility check
                $mCacheTime = '',             # Time when this object was generated, or -1 for uncacheable. Used in ParserCache.
index 44c7458..f57d412 100644 (file)
@@ -427,7 +427,7 @@ class CoreParserFunctions {
         * @param mixed $value value to match
         * @return boolean true on successful match
         */
-       static private function matchAgainstMagicword( $magicword, $value ) {
+       private static function matchAgainstMagicword( $magicword, $value ) {
                if ( strval( $value ) === '' ) {
                        return false;
                }
index 7053f13..7043b4a 100644 (file)
@@ -220,10 +220,10 @@ class ParserCache {
        }
 
        /**
-        * @param $parserOutput ParserOutput
-        * @param $article Article
-        * @param $popts ParserOptions
-        * @param $cacheTime Time when the cache was generated
+        * @param ParserOutput $parserOutput
+        * @param Article $article
+        * @param ParserOptions $popts
+        * @param string $cacheTime Time when the cache was generated
         */
        public function save( $parserOutput, $article, $popts, $cacheTime = null ) {
                $expire = $parserOutput->getCacheExpiry();
index e12f32d..8393216 100644 (file)
@@ -493,8 +493,6 @@ class ParserOptions {
         * so users sharign the options with vary for the same page share
         * the same cached data safely.
         *
-        * Replaces User::getPageRenderingHash()
-        *
         * Extensions which require it should install 'PageRenderingHash' hook,
         * which will give them a chance to modify this key based on their own
         * settings.
index 502f0fd..2950227 100644 (file)
@@ -83,7 +83,7 @@ class ParserOutput extends CacheTime {
                        $text = str_replace( array( Parser::TOC_START, Parser::TOC_END ), '', $text );
                } else {
                        $text = preg_replace(
-                               '#'. preg_quote( Parser::TOC_START ) . '.*?' . preg_quote( Parser::TOC_END ) . '#s',
+                               '#' . preg_quote( Parser::TOC_START ) . '.*?' . preg_quote( Parser::TOC_END ) . '#s',
                                '',
                                $text
                        );
index 3138f48..57020a1 100644 (file)
@@ -160,7 +160,6 @@ class Preprocessor_DOM implements Preprocessor {
                        $xml = $this->preprocessToXml( $text, $flags );
                }
 
-
                // Fail if the number of elements exceeds acceptable limits
                // Do not attempt to generate the DOM
                $this->parser->mGeneratedPPNodeCount += substr_count( $xml, '<' );
index 0a1f3b1..982c6ae 100644 (file)
@@ -23,7 +23,8 @@
 
 /**
  * ProfilerSimpleUDP class, that sends out messages for 'udpprofile' daemon
- * (the one from mediawiki/trunk/udpprofile SVN )
+ * (the one from
+ *  http://git.wikimedia.org/tree/operations%2Fsoftware.git/master/udpprofile)
  * @ingroup Profiler
  */
 class ProfilerSimpleUDP extends ProfilerSimple {
index f4cb992..144ec95 100644 (file)
@@ -44,8 +44,8 @@ class JSONRCFeedFormatter implements RCFeedFormatter {
                                break;
 
                        case RC_NEW:
-                               $packet['length'] = array( 'old' => NULL, 'new' => $attrib['rc_new_len'] );
-                               $packet['revision'] = array( 'old' => NULL, 'new' => $attrib['rc_this_oldid'] );
+                               $packet['length'] = array( 'old' => null, 'new' => $attrib['rc_new_len'] );
+                               $packet['revision'] = array( 'old' => null, 'new' => $attrib['rc_this_oldid'] );
                                break;
 
                        case RC_LOG:
index 6380efc..f529568 100644 (file)
@@ -68,7 +68,8 @@ class ResourceLoader {
         */
        public function preloadModuleInfo( array $modules, ResourceLoaderContext $context ) {
                if ( !count( $modules ) ) {
-                       return; // or else Database*::select() will explode, plus it's cheaper!
+                       // Or else Database*::select() will explode, plus it's cheaper!
+                       return;
                }
                $dbr = wfGetDB( DB_SLAVE );
                $skin = $context->getSkin();
@@ -451,7 +452,7 @@ class ResourceLoader {
                wfProfileIn( __METHOD__ );
                $errors = '';
 
-               // Split requested modules into two groups, modules and missing
+               // Find out which modules are missing and instantiate the others
                $modules = array();
                $missing = array();
                foreach ( $context->getModules() as $name ) {
@@ -527,7 +528,7 @@ class ResourceLoader {
                }
 
                // Save response to file cache unless there are errors
-               if ( isset( $fileCache ) && !$errors && !$missing ) {
+               if ( isset( $fileCache ) && !$errors && !count( $missing ) ) {
                        // Cache single modules...and other requests if there are enough hits
                        if ( ResourceFileCache::useFileCache( $context ) ) {
                                if ( $fileCache->isCacheWorthy() ) {
@@ -704,21 +705,24 @@ class ResourceLoader {
        /**
         * Generates code for a response
         *
-        * @param $context ResourceLoaderContext: Context in which to generate a response
+        * @param $context ResourceLoaderContext Context in which to generate a response
         * @param array $modules List of module objects keyed by module name
-        * @param array $missing List of unavailable modules (optional)
-        * @return String: Response data
+        * @param array $missing List of requested module names that are unregistered (optional)
+        * @return string Response data
         */
        public function makeModuleResponse( ResourceLoaderContext $context,
-               array $modules, $missing = array()
+               array $modules, array $missing = array()
        ) {
                $out = '';
                $exceptions = '';
-               if ( $modules === array() && $missing === array() ) {
+               $states = array();
+
+               if ( !count( $modules ) && !count( $missing ) ) {
                        return '/* No modules requested. Max made me put this here */';
                }
 
                wfProfileIn( __METHOD__ );
+
                // Pre-fetch blobs
                if ( $context->shouldIncludeMessages() ) {
                        try {
@@ -734,6 +738,10 @@ class ResourceLoader {
                        $blobs = array();
                }
 
+               foreach ( $missing as $name ) {
+                       $states[$name] = 'missing';
+               }
+
                // Generate output
                $isRaw = false;
                foreach ( $modules as $name => $module ) {
@@ -838,8 +846,8 @@ class ResourceLoader {
                                // Add exception to the output as a comment
                                $exceptions .= self::formatException( $e );
 
-                               // Register module as missing
-                               $missing[] = $name;
+                               // Respond to client with error-state instead of module implementation
+                               $states[$name] = 'error';
                                unset( $modules[$name] );
                        }
                        $isRaw |= $module->isRaw();
@@ -848,14 +856,17 @@ class ResourceLoader {
 
                // Update module states
                if ( $context->shouldIncludeScripts() && !$context->getRaw() && !$isRaw ) {
-                       // Set the state of modules loaded as only scripts to ready
                        if ( count( $modules ) && $context->getOnly() === 'scripts' ) {
-                               $out .= self::makeLoaderStateScript(
-                                       array_fill_keys( array_keys( $modules ), 'ready' ) );
+                               // Set the state of modules loaded as only scripts to ready as
+                               // they don't have an mw.loader.implement wrapper that sets the state
+                               foreach ( $modules as $name => $module ) {
+                                       $states[$name] = 'ready';
+                               }
                        }
-                       // Set the state of modules which were requested but unavailable as missing
-                       if ( is_array( $missing ) && count( $missing ) ) {
-                               $out .= self::makeLoaderStateScript( array_fill_keys( $missing, 'missing' ) );
+
+                       // Set the state of modules we didn't respond to with mw.loader.implement
+                       if ( count( $states ) ) {
+                               $out .= self::makeLoaderStateScript( $states );
                        }
                }
 
index 9ed181e..8183999 100644 (file)
@@ -585,7 +585,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         */
        public function getAllStyleFiles() {
                $files = array();
-               foreach( (array)$this->styles as $key => $value ) {
+               foreach ( (array)$this->styles as $key => $value ) {
                        if ( is_array( $value ) ) {
                                $path = $key;
                        } else {
@@ -745,6 +745,8 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * recompiles as necessary.
         *
         * @since 1.22
+        * @throws Exception If Less encounters a parse error
+        * @throws MWException If Less compilation returns unexpection result
         * @param string $fileName File path of LESS source
         * @return string: CSS source
         */
index dbcb3d7..02e1dda 100644 (file)
@@ -201,7 +201,6 @@ class RevisionDeleter {
                return call_user_func( array( self::$allowedTypes[$typeName], 'suggestTarget' ), $target, $ids );
        }
 
-
        /**
         * Checks if a revision still exists in the revision table.
         * If it doesn't, returns the corresponding ar_timestamp field
index a082049..388705d 100644 (file)
@@ -49,6 +49,16 @@ class SpecialAllpages extends IncludableSpecialPage {
         */
        protected $maxPageLength = 70;
 
+       /**
+        * Maximum number of pages in a hierarchical ("top level") list.
+        *
+        * Traversal of the entire page list by spidering the top levels is thought
+        * to require O(N^3) DB CPU time where N is the number of pages on the wiki.
+        * See bug 56840. If this limit is exceeded, the behaviour becomes like a
+        * simple alphabetic pager.
+        */
+       protected $maxTopLevelPages = 50000;
+
        /**
         * Determines, which message describes the input field 'nsfrom'.
         *
@@ -201,6 +211,14 @@ class SpecialAllpages extends IncludableSpecialPage {
                $lines = $wgMemc->get( $key );
 
                $count = $dbr->estimateRowCount( 'page', '*', $where, __METHOD__ );
+
+               // Don't show a hierarchical list if the number of pages is very large,
+               // since generating it will cause a lot of scanning
+               if ( $count > $this->maxTopLevelPages ) {
+                       $this->showChunk( $namespace, $from, $to, $hideredirects );
+                       return;
+               }
+
                $maxPerSubpage = intval( $count / $this->maxLineCount );
                $maxPerSubpage = max( $maxPerSubpage, $this->maxPerPage );
 
index 8b96e6c..43a4d2c 100644 (file)
@@ -99,7 +99,7 @@ class SpecialChangePassword extends UnlistedSpecialPage {
                                                'wpLoginToken' => $token,
                                                'wpPassword' => $request->getVal( 'wpNewPassword' ),
                                        ) + $request->getValues( 'wpRemember', 'returnto', 'returntoquery' );
-                                       $login = new LoginForm( new FauxRequest( $data, true ) );
+                                       $login = new LoginForm( new DerivativeRequest( $request, $data, true ) );
                                        $login->setContext( $this->getContext() );
                                        $login->execute( null );
                                }
index 1fe9819..f4c6f51 100644 (file)
@@ -735,6 +735,11 @@ class ContribsPager extends ReverseChronologicalPager {
                # Get the current user name for accounts
                $join_cond['user'] = Revision::userJoinCond();
 
+               $options = array();
+               if ( $index ) {
+                       $options['USE INDEX'] = array( 'revision' => $index );
+               }
+
                $queryInfo = array(
                        'tables' => $tables,
                        'fields' => array_merge(
@@ -744,7 +749,7 @@ class ContribsPager extends ReverseChronologicalPager {
                                        'page_latest', 'page_is_redirect', 'page_len' )
                        ),
                        'conds' => $conds,
-                       'options' => array( 'USE INDEX' => array( 'revision' => $index ) ),
+                       'options' => $options,
                        'join_conds' => $join_cond
                );
 
@@ -766,10 +771,10 @@ class ContribsPager extends ReverseChronologicalPager {
                $condition = array();
                $join_conds = array();
                $tables = array( 'revision', 'page', 'user' );
+               $index = false;
                if ( $this->contribs == 'newbie' ) {
                        $max = $this->mDb->selectField( 'user', 'max(user_id)', false, __METHOD__ );
                        $condition[] = 'rev_user >' . (int)( $max - $max / 100 );
-                       $index = 'user_timestamp';
                        # ignore local groups with the bot right
                        # @todo FIXME: Global groups may have 'bot' rights
                        $groupsWithBotPermission = User::getGroupsWithPermission( 'bot' );
diff --git a/includes/specials/SpecialExpandTemplates.php b/includes/specials/SpecialExpandTemplates.php
new file mode 100644 (file)
index 0000000..b566b91
--- /dev/null
@@ -0,0 +1,229 @@
+<?php
+/**
+ * Implements Special:ExpandTemplates
+ *
+ * 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
+ */
+
+/**
+ * A special page that expands submitted templates, parser functions,
+ * and variables, allowing easier debugging of these.
+ *
+ * @ingroup SpecialPage
+ */
+class SpecialExpandTemplates extends SpecialPage {
+
+       /** @var boolean whether or not to show the XML parse tree */
+       protected $generateXML;
+
+       /** @var boolean whether or not to remove comments in the expanded wikitext */
+       protected $removeComments;
+
+       /** @var boolean whether or not to remove <nowiki> tags in the expanded wikitext */
+       protected $removeNowiki;
+
+       /** @var maximum size in bytes to include. 50MB allows fixing those huge pages */
+       const MAX_INCLUDE_SIZE = 50000000;
+
+       function __construct() {
+               parent::__construct( 'ExpandTemplates' );
+       }
+
+       /**
+        * Show the special page
+        */
+       function execute( $subpage ) {
+               global $wgParser, $wgUseTidy, $wgAlwaysUseTidy;
+
+               $this->setHeaders();
+
+               $request = $this->getRequest();
+               $titleStr = $request->getText( 'wpContextTitle' );
+               $title = Title::newFromText( $titleStr );
+
+               if ( !$title ) {
+                       $title = $this->getTitle();
+               }
+               $input = $request->getText( 'wpInput' );
+               $this->generateXML = $request->getBool( 'wpGenerateXml' );
+
+               if ( strlen( $input ) ) {
+                       $this->removeComments = $request->getBool( 'wpRemoveComments', false );
+                       $this->removeNowiki = $request->getBool( 'wpRemoveNowiki', false );
+                       $options = ParserOptions::newFromContext( $this->getContext() );
+                       $options->setRemoveComments( $this->removeComments );
+                       $options->setTidy( true );
+                       $options->setMaxIncludeSize( self::MAX_INCLUDE_SIZE );
+
+                       if ( $this->generateXML ) {
+                               $wgParser->startExternalParse( $title, $options, OT_PREPROCESS );
+                               $dom = $wgParser->preprocessToDom( $input );
+
+                               if ( method_exists( $dom, 'saveXML' ) ) {
+                                       $xml = $dom->saveXML();
+                               } else {
+                                       $xml = $dom->__toString();
+                               }
+                       }
+
+                       $output = $wgParser->preprocess( $input, $title, $options );
+               } else {
+                       $this->removeComments = $request->getBool( 'wpRemoveComments', true );
+                       $this->removeNowiki = $request->getBool( 'wpRemoveNowiki', false );
+                       $output = false;
+               }
+
+               $out = $this->getOutput();
+               $out->addWikiMsg( 'expand_templates_intro' );
+               $out->addHTML( $this->makeForm( $titleStr, $input ) );
+
+               if( $output !== false ) {
+                       if ( $this->generateXML && strlen( $output ) > 0 ) {
+                               $out->addHTML( $this->makeOutput( $xml, 'expand_templates_xml_output' ) );
+                       }
+
+                       $tmp = $this->makeOutput( $output );
+
+                       if ( $this->removeNowiki ) {
+                               $tmp = preg_replace(
+                                       array( '_&lt;nowiki&gt;_', '_&lt;/nowiki&gt;_', '_&lt;nowiki */&gt;_' ),
+                                       '',
+                                       $tmp
+                               );
+                       }
+
+                       if( ( $wgUseTidy && $options->getTidy() ) || $wgAlwaysUseTidy ) {
+                               $tmp = MWTidy::tidy( $tmp );
+                       }
+
+                       $out->addHTML( $tmp );
+                       $this->showHtmlPreview( $title, $output, $out );
+               }
+
+       }
+
+       /**
+        * Generate a form allowing users to enter information
+        *
+        * @param string $title Value for context title field
+        * @param string $input Value for input textbox
+        * @return string
+        */
+       private function makeForm( $title, $input ) {
+               $self = $this->getTitle();
+               $form  = Xml::openElement(
+                       'form',
+                       array( 'method' => 'post', 'action' => $self->getLocalUrl() )
+               );
+               $form .= "<fieldset><legend>" . $this->msg( 'expandtemplates' )->escaped() . "</legend>\n";
+
+               $form .= '<p>' . Xml::inputLabel(
+                       $this->msg( 'expand_templates_title' )->plain(),
+                       'wpContextTitle',
+                       'contexttitle',
+                       60,
+                       $title,
+                       array( 'autofocus' => true )
+               ) . '</p>';
+               $form .= '<p>' . Xml::label(
+                       $this->msg( 'expand_templates_input' )->text(),
+                       'input'
+               ) . '</p>';
+               $form .= Xml::textarea(
+                       'wpInput',
+                       $input,
+                       10,
+                       10,
+                       array( 'id' => 'input' )
+               );
+
+               $form .= '<p>' . Xml::checkLabel(
+                       $this->msg( 'expand_templates_remove_comments' )->text(),
+                       'wpRemoveComments',
+                       'removecomments',
+                       $this->removeComments
+               ) . '</p>';
+               $form .= '<p>' . Xml::checkLabel(
+                       $this->msg( 'expand_templates_remove_nowiki' )->text(),
+                       'wpRemoveNowiki',
+                       'removenowiki',
+                       $this->removeNowiki
+               ) . '</p>';
+               $form .= '<p>' . Xml::checkLabel(
+                       $this->msg( 'expand_templates_generate_xml' )->text(),
+                       'wpGenerateXml',
+                       'generate_xml',
+                       $this->generateXML
+               ) . '</p>';
+               $form .= '<p>' . Xml::submitButton(
+                       $this->msg( 'expand_templates_ok' )->text(),
+                       array( 'accesskey' => 's' )
+               ) . '</p>';
+               $form .= "</fieldset>\n";
+               $form .= Xml::closeElement( 'form' );
+
+               return $form;
+       }
+
+       /**
+        * Generate a nice little box with a heading for output
+        *
+        * @param string $output Wiki text output
+        * @param string $heading
+        * @return string
+        */
+       private function makeOutput( $output, $heading = 'expand_templates_output' ) {
+               $out = "<h2>" . $this->msg( $heading )->escaped() . "</h2>\n";
+               $out .= Xml::textarea(
+                       'output',
+                       $output,
+                       10,
+                       10,
+                       array( 'id' => 'output', 'readonly' => 'readonly' )
+               );
+
+               return $out;
+       }
+
+       /**
+        * Render the supplied wiki text and append to the page as a preview
+        *
+        * @param Title $title
+        * @param string $text
+        * @param OutputPage $out
+        */
+       private function showHtmlPreview( Title $title, $text, OutputPage $out ) {
+               global $wgParser;
+
+               $popts = ParserOptions::newFromContext( $this->getContext() );
+               $popts->setTargetLanguage( $title->getPageLanguage() );
+               $pout = $wgParser->parse( $text, $title, $popts );
+               $lang = $title->getPageViewLanguage();
+
+               $out->addHTML( "<h2>" . $this->msg( 'expand_templates_preview' )->escaped() . "</h2>\n" );
+               $out->addHTML( Html::openElement( 'div', array(
+                       'class' => 'mw-content-' . $lang->getDir(),
+                       'dir' => $lang->getDir(),
+                       'lang' => $lang->getHtmlCode(),
+               ) ) );
+
+               $out->addHTML( $pout->getText() );
+               $out->addHTML( Html::closeElement( 'div' ) );
+       }
+}
index d7d860d..1bc6c92 100644 (file)
@@ -411,7 +411,6 @@ class ImportReporter extends ContextSource {
        private $mOriginalPageOutCallback = null;
        private $mLogItemCount = 0;
 
-
        /**
         * @param WikiImporter $importer
         * @param $upload
index 5b0c56e..ed6e2a4 100644 (file)
@@ -73,14 +73,17 @@ class LinkSearchPage extends QueryPage {
                        // For protocols without '//' like 'mailto:'
                        $protocol = substr( $target2, 0, $pr_cl + 1 );
                        $target2 = substr( $target2, $pr_cl + 1 );
-               } elseif ( $protocol == '' && $target2 != '' ) {
+               } elseif ( $target2 != '' ) {
                        // default
                        $protocol = 'http://';
                }
                if ( $protocol != '' && !in_array( $protocol, $protocols_list ) ) {
-                       // unsupported protocol, show original search request
+                       // Unsupported protocol, show original search request
                        $target2 = $target;
-                       $protocol = '';
+                       // Since links with unsupported protocols don't end up in
+                       // externallinks, assume $protocol is actually part of a link
+                       // containing ':' or '//' and default to http as above.
+                       $protocol = 'http://';
                }
 
                $out->addWikiMsg(
index dff1cf7..7484995 100644 (file)
@@ -240,7 +240,7 @@ class ImageListPager extends TablePager {
                                }
                                $field = $prefix . substr( $field, 3 ) . ' AS ' . $field;
                        }
-                       $fields[array_search('top', $fields)] = "'no' AS top";
+                       $fields[array_search( 'top', $fields )] = "'no' AS top";
                } else {
                        if ( $this->mShowAll ) {
                                $fields[array_search( 'top', $fields )] = "'yes' AS top";
index 2c8792f..de05be4 100644 (file)
@@ -76,20 +76,19 @@ class ListredirectsPage extends QueryPage {
         * @param ResultWrapper $res
         */
        function preprocessResults( $db, $res ) {
-               $batch = new LinkBatch;
+               if ( !$res->numRows() ) {
+                       return;
+               }
 
+               $batch = new LinkBatch;
                foreach ( $res as $row ) {
                        $batch->add( $row->namespace, $row->title );
                        $batch->addObj( $this->getRedirectTarget( $row ) );
                }
-
                $batch->execute();
 
                // Back to start for display
-               if ( $res->numRows() > 0 ) {
-                       // If there are no rows we get an error seeking.
-                       $db->dataSeek( $res, 0 );
-               }
+               $res->seek( 0 );
        }
 
        protected function getRedirectTarget( $row ) {
index 2ffdd89..5265403 100644 (file)
@@ -98,6 +98,7 @@ class SpecialLog extends SpecialPage {
                # Some log types are only for a 'User:' title but we might have been given
                # only the username instead of the full title 'User:username'. This part try
                # to lookup for a user by that name and eventually fix user input. See bug 1697.
+               wfRunHooks( 'GetLogTypesOnUser', array( &$this->typeOnUser ) );
                if ( in_array( $opts->getValue( 'type' ), $this->typeOnUser ) ) {
                        # ok we have a type of log which expect a user title.
                        $target = Title::newFromText( $opts->getValue( 'page' ) );
index c486ba0..8e56574 100644 (file)
@@ -112,6 +112,8 @@ class SpecialPasswordReset extends FormSpecialPage {
                // from a FormSpecialPage class.
                $form->setWrapperLegend( false );
 
+               $form->addHiddenFields( $this->getRequest()->getValues( 'returnto', 'returntoquery' ) );
+
                $i = 0;
                if ( isset( $wgPasswordResetRoutes['username'] ) && $wgPasswordResetRoutes['username'] ) {
                        $i++;
index 0e022bf..14123a8 100644 (file)
@@ -87,7 +87,6 @@ class SpecialRandomInCategory extends SpecialPage {
                        $this->setCategory( $cat );
                }
 
-
                if ( !$this->category && $categoryStr ) {
                        $this->setHeaders();
                        $this->getOutput()->addWikiMsg( 'randomincategory-invalidcategory',
index 51e7450..23203ea 100644 (file)
@@ -685,7 +685,6 @@ class SpecialRecentChanges extends IncludableSpecialPage {
        /**
         * Creates the choose namespace selection
         *
-        * @todo Uses radio buttons (HASHAR)
         * @param FormOptions $opts
         * @return string
         */
index 825be6c..87705a8 100644 (file)
@@ -194,6 +194,9 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
        protected function showConvenienceLinks() {
                # Give a link to the logs/hist for this page
                if ( $this->targetObj ) {
+                       // Also set header tabs to be for the target.
+                       $this->getSkin()->setRelevantTitle( $this->targetObj );
+
                        $links = array();
                        $links[] = Linker::linkKnown(
                                SpecialPage::getTitleFor( 'Log' ),
index 8c8de8e..dd32656 100644 (file)
@@ -88,7 +88,9 @@ class SpecialSearch extends SpecialPage {
                $this->outputHeader();
                $out = $this->getOutput();
                $out->allowClickjacking();
-               $out->addModuleStyles( 'mediawiki.special' );
+               $out->addModuleStyles( array(
+                       'mediawiki.special', 'mediawiki.special.search', 'mediawiki.ui'
+               ) );
 
                // Strip underscores from title parameter; most of the time we'll want
                // text form here. But don't strip underscores from actual text params!
@@ -1093,10 +1095,14 @@ class SpecialSearch extends SpecialPage {
                $out .= Html::input( 'search', $term, 'search', array(
                        'id' => $this->profile === 'advanced' ? 'powerSearchText' : 'searchText',
                        'size' => '50',
-                       'autofocus'
+                       'autofocus',
+                       'class' => 'mw-ui-input',
                ) ) . "\n";
                $out .= Html::hidden( 'fulltext', 'Search' ) . "\n";
-               $out .= Xml::submitButton( $this->msg( 'searchbutton' )->text() ) . "\n";
+               $out .= Xml::submitButton(
+                       $this->msg( 'searchbutton' )->text(),
+                       array( 'class' => array( 'mw-ui-button', 'mw-ui-primary' ) )
+               ) . "\n";
                return $out . $this->didYouMeanHtml;
        }
 
index 47c89d0..0042b43 100644 (file)
@@ -144,6 +144,7 @@ class SpecialSpecialpages extends UnlistedSpecialPage {
                }
 
                if ( $includesRestrictedPages || $includesCachedPages ) {
+                       $out->wrapWikiMsg( "<h2 class=\"mw-specialpages-note-top\">$1</h2>", 'specialpages-note-top' );
                        $out->wrapWikiMsg( "<div class=\"mw-specialpages-notes\">\n$1\n</div>", 'specialpages-note' );
                }
        }
index b79aaa9..0700c49 100644 (file)
@@ -60,7 +60,7 @@ class SpecialUpload extends SpecialPage {
 
        /** User input variables from the root section **/
        public $mIgnoreWarning;
-       public $mWatchThis;
+       public $mWatchthis;
        public $mCopyrightStatus;
        public $mCopyrightSource;
 
@@ -75,8 +75,6 @@ class SpecialUpload extends SpecialPage {
        public $uploadFormTextTop;
        public $uploadFormTextAfterSummary;
 
-       public $mWatchthis;
-
        /**
         * Initialize instance variables from request and create an Upload handler
         */
@@ -517,11 +515,17 @@ class SpecialUpload extends SpecialPage {
                        return true;
                }
 
+               $desiredTitleObj = Title::makeTitleSafe( NS_FILE, $this->mDesiredDestName );
+               if ( $desiredTitleObj instanceof Title && $this->getUser()->isWatched( $desiredTitleObj ) ) {
+                       // Already watched, don't change that
+                       return true;
+               }
+
                $local = wfLocalFile( $this->mDesiredDestName );
                if ( $local && $local->exists() ) {
                        // We're uploading a new version of an existing file.
                        // No creation, so don't watch it if we're not already.
-                       return $this->getUser()->isWatched( $local->getTitle() );
+                       return false;
                } else {
                        // New page should get watched if that's our option.
                        return $this->getUser()->getOption( 'watchcreations' );
@@ -1011,7 +1015,7 @@ class UploadForm extends HTMLForm {
                                        'id' => 'wpWatchthis',
                                        'label-message' => 'watchthisupload',
                                        'section' => 'options',
-                                       'default' => $user->getOption( 'watchcreations' ),
+                                       'default' => $this->mWatch,
                                )
                        );
                }
index 87b6442..1373df1 100644 (file)
@@ -308,6 +308,8 @@ class SpecialUploadStash extends UnlistedSpecialPage {
                header( "Content-Type: $contentType", true );
                header( 'Content-Transfer-Encoding: binary', true );
                header( 'Expires: Sun, 17-Jan-2038 19:14:07 GMT', true );
+               // Bug 53032 - It shouldn't be a problem here, but let's be safe and not cache
+               header( 'Cache-Control: private' );
                header( "Content-Length: $size", true );
        }
 
index f40966c..9764c9f 100644 (file)
@@ -219,7 +219,7 @@ class LoginForm extends SpecialPage {
                        return;
                }
 
-               $status = $this->addNewaccountInternal();
+               $status = $this->addNewAccountInternal();
                if ( !$status->isGood() ) {
                        $error = $status->getMessage();
                        $this->mainLoginForm( $error->toString() );
@@ -865,7 +865,7 @@ class LoginForm extends SpecialPage {
         * @return Status object
         */
        function mailPasswordInternal( $u, $throttle = true, $emailTitle = 'passwordremindertitle', $emailText = 'passwordremindertext' ) {
-               global $wgCanonicalServer, $wgScript, $wgNewPasswordExpiry;
+               global $wgNewPasswordExpiry;
 
                if ( $u->getEmail() == '' ) {
                        return Status::newFatal( 'noemail', $u->getName() );
@@ -882,7 +882,11 @@ class LoginForm extends SpecialPage {
                $u->setNewpassword( $np, $throttle );
                $u->saveSettings();
                $userLanguage = $u->getOption( 'language' );
-               $m = $this->msg( $emailText, $ip, $u->getName(), $np, '<' . $wgCanonicalServer . $wgScript . '>',
+
+               $mainPage = Title::newMainPage();
+               $mainPageUrl = $mainPage->getCanonicalURL();
+
+               $m = $this->msg( $emailText, $ip, $u->getName(), $np, '<' . $mainPageUrl . '>',
                        round( $wgNewPasswordExpiry / 86400 ) )->inLanguage( $userLanguage )->text();
                $result = $u->sendMail( $this->msg( $emailTitle )->inLanguage( $userLanguage )->text(), $m );
 
index 9b36209..2c511f5 100644 (file)
@@ -49,15 +49,21 @@ class SpecialWatchlist extends SpecialPage {
                // Add feed links
                $wlToken = $user->getTokenFromOption( 'watchlisttoken' );
                if ( $wlToken ) {
-                       $this->addFeedLinks( array( 'action' => 'feedwatchlist', 'allrev' => 'allrev',
-                                                               'wlowner' => $user->getName(), 'wltoken' => $wlToken ) );
+                       $this->addFeedLinks( array(
+                               'action' => 'feedwatchlist',
+                               'allrev' => 1,
+                               'wlowner' => $user->getName(),
+                               'wltoken' => $wlToken,
+                       ) );
                }
 
                $this->setHeaders();
                $this->outputHeader();
 
-               $output->addSubtitle( $this->msg( 'watchlistfor2', $user->getName()
-                       )->rawParams( SpecialEditWatchlist::buildTools( null ) ) );
+               $output->addSubtitle(
+                       $this->msg( 'watchlistfor2', $user->getName() )
+                               ->rawParams( SpecialEditWatchlist::buildTools( null ) )
+               );
 
                $request = $this->getRequest();
 
@@ -194,10 +200,6 @@ class SpecialWatchlist extends SpecialPage {
                        $nonRevisionTypes = array( RC_LOG );
                        wfRunHooks( 'SpecialWatchlistGetNonRevisionTypes', array( &$nonRevisionTypes ) );
                        if ( $nonRevisionTypes ) {
-                               if ( count( $nonRevisionTypes ) === 1 ) {
-                                       // if only one use an equality instead of IN condition
-                                       $nonRevisionTypes = reset( $nonRevisionTypes );
-                               }
                                $conds[] = $dbr->makeList(
                                        array(
                                                'rc_this_oldid=page_latest',
index 4750af9..2f569d9 100644 (file)
@@ -113,17 +113,16 @@ class UsercreateTemplate extends BaseTemplate {
 
                        <?php
                        if ( $this->data['usedomain'] ) {
-                               $doms = "";
+                               $select = new XmlSelect( 'wpDomain', false, $this->data['domain'] );
+                               $select->setAttribute( 'tabindex', 4 );
                                foreach ( $this->data['domainnames'] as $dom ) {
-                                       $doms .= "<option>" . htmlspecialchars( $dom ) . "</option>";
+                                       $select->addOption( $dom );
                                }
                        ?>
                                <div id="mw-user-domain-section">
                                        <label for="wpDomain"><?php $this->msg( 'yourdomainname' ); ?></label>
                                        <div class="mw-input">
-                                               <select name="wpDomain" value="<?php $this->text( 'domain' ); ?>" tabindex="4">
-                                                       <?php echo $doms ?>
-                                               </select>
+                                               <?php echo $select->getHTML(); ?>
                                        </div>
                                </div>
                        <?php } ?>
index 5eb6094..38e071c 100644 (file)
@@ -113,16 +113,15 @@ class UserloginTemplate extends BaseTemplate {
 
                        <?php
                        if ( isset( $this->data['usedomain'] ) && $this->data['usedomain'] ) {
-                               $doms = "";
+                               $select = new XmlSelect( 'wpDomain', false, $this->data['domain'] );
+                               $select->setAttribute( 'tabindex', 3 );
                                foreach ( $this->data['domainnames'] as $dom ) {
-                                       $doms .= "<option>" . htmlspecialchars( $dom ) . "</option>";
+                                       $select->addOption( $dom );
                                }
                        ?>
                                <div id="mw-user-domain-section">
                                        <label for='wpDomain'><?php $this->msg( 'yourdomainname' ); ?></label>
-                                       <select name="wpDomain" value="<?php $this->text( 'domain' ); ?>" tabindex="3">
-                                               <?php echo $doms; ?>
-                                       </select>
+                                       <?php echo $select->getHTML(); ?>
                                </div>
                        <?php } ?>
 
index b162de2..183e7f3 100644 (file)
@@ -394,7 +394,6 @@ abstract class UploadBase {
                return true;
        }
 
-
        /**
         * Verifies that it's ok to include the uploaded file
         *
@@ -421,7 +420,6 @@ abstract class UploadBase {
                        }
                }
 
-
                $handler = MediaHandler::getHandler( $mime );
                if ( $handler ) {
                        $handlerStatus = $handler->verifyUpload( $this->mTempPath );
@@ -1097,7 +1095,6 @@ abstract class UploadBase {
                return false;
        }
 
-
        /**
         * Check a whitelist of xml encodings that are known not to be interpreted differently
         * by the server's xml parser (expat) and some common browsers.
index 091bd78..b572499 100644 (file)
@@ -127,7 +127,7 @@ class UploadFromChunks extends UploadFromFile {
                // Get a 0-byte temp file to perform the concatenation at
                $tmpFile = TempFSFile::factory( 'chunkedupload_', $ext );
                $tmpPath = false; // fail in concatenate()
-               if( $tmpFile ) {
+               if ( $tmpFile ) {
                        // keep alive with $this
                        $tmpPath = $tmpFile->bind( $this )->getPath();
                }
index c6de088..0995aed 100644 (file)
  * http://cr.yp.to/cdb.html
  */
 abstract class CdbReader {
+       /**
+        * The file handle
+        */
+       protected $handle;
+
        /**
         * Open a file and return a subclass instance
         *
@@ -34,13 +39,9 @@ abstract class CdbReader {
         * @return CdbReader
         */
        public static function open( $fileName ) {
-               if ( self::haveExtension() ) {
-                       return new CdbReaderDBA( $fileName );
-               } else {
-                       wfDebug( "Warning: no dba extension found, using emulation.\n" );
-
-                       return new CdbReaderPHP( $fileName );
-               }
+               return self::haveExtension() ?
+                       new CdbReaderDBA( $fileName ) :
+                       new CdbReaderPHP( $fileName );
        }
 
        /**
@@ -61,14 +62,16 @@ abstract class CdbReader {
        }
 
        /**
-        * Construct the object and open the file
+        * Create the object and open the file
+        *
+        * @param $fileName string
         */
-       abstract function __construct( $fileName );
+       abstract public function __construct( $fileName );
 
        /**
         * Close the file. Optional, you can just let the variable go out of scope.
         */
-       abstract function close();
+       abstract public function close();
 
        /**
         * Get a value with a given key. Only string values are supported.
@@ -83,6 +86,23 @@ abstract class CdbReader {
  * Native and pure PHP implementations are provided.
  */
 abstract class CdbWriter {
+       /**
+        * The file handle
+        */
+       protected $handle;
+
+       /**
+        * File we'll be writing to when we're done
+        * @var string
+        */
+       protected $realFileName;
+
+       /**
+        * File we write to temporarily until we're done
+        * @var string
+        */
+       protected $tmpFileName;
+
        /**
         * Open a writer and return a subclass instance.
         * The user must have write access to the directory, for temporary file creation.
@@ -92,13 +112,9 @@ abstract class CdbWriter {
         * @return CdbWriterDBA|CdbWriterPHP
         */
        public static function open( $fileName ) {
-               if ( CdbReader::haveExtension() ) {
-                       return new CdbWriterDBA( $fileName );
-               } else {
-                       wfDebug( "Warning: no dba extension found, using emulation.\n" );
-
-                       return new CdbWriterPHP( $fileName );
-               }
+               return CdbReader::haveExtension() ?
+                       new CdbWriterDBA( $fileName ) :
+                       new CdbWriterPHP( $fileName );
        }
 
        /**
@@ -106,7 +122,7 @@ abstract class CdbWriter {
         *
         * @param $fileName string
         */
-       abstract function __construct( $fileName );
+       abstract public function __construct( $fileName );
 
        /**
         * Set a key to a given value. The value will be converted to string.
@@ -120,68 +136,25 @@ abstract class CdbWriter {
         * goes out of scope, to write out the final hashtables.
         */
        abstract public function close();
-}
-
-/**
- * Reader class which uses the DBA extension
- */
-class CdbReaderDBA {
-       var $handle;
 
-       function __construct( $fileName ) {
-               $this->handle = dba_open( $fileName, 'r-', 'cdb' );
-               if ( !$this->handle ) {
-                       throw new MWException( 'Unable to open CDB file "' . $fileName . '"' );
-               }
-       }
-
-       function close() {
+       /**
+        * If the object goes out of scope, close it for sanity
+        */
+       public function __destruct() {
                if ( isset( $this->handle ) ) {
-                       dba_close( $this->handle );
+                       $this->close();
                }
-               unset( $this->handle );
        }
 
-       function get( $key ) {
-               return dba_fetch( $key, $this->handle );
+       /**
+        * Are we running on Windows?
+        */
+       protected function isWindows() {
+               return substr( php_uname(), 0, 7 ) == 'Windows';
        }
 }
 
 /**
- * Writer class which uses the DBA extension
+ * Exception for Cdb errors
  */
-class CdbWriterDBA {
-       var $handle, $realFileName, $tmpFileName;
-
-       function __construct( $fileName ) {
-               $this->realFileName = $fileName;
-               $this->tmpFileName = $fileName . '.tmp.' . mt_rand( 0, 0x7fffffff );
-               $this->handle = dba_open( $this->tmpFileName, 'n', 'cdb_make' );
-               if ( !$this->handle ) {
-                       throw new MWException( 'Unable to open CDB file for write "' . $fileName . '"' );
-               }
-       }
-
-       function set( $key, $value ) {
-               return dba_insert( $key, $value, $this->handle );
-       }
-
-       function close() {
-               if ( isset( $this->handle ) ) {
-                       dba_close( $this->handle );
-               }
-               if ( wfIsWindows() ) {
-                       unlink( $this->realFileName );
-               }
-               if ( !rename( $this->tmpFileName, $this->realFileName ) ) {
-                       throw new MWException( 'Unable to move the new CDB file into place.' );
-               }
-               unset( $this->handle );
-       }
-
-       function __destruct() {
-               if ( isset( $this->handle ) ) {
-                       $this->close();
-               }
-       }
-}
+class CdbException extends MWException {}
diff --git a/includes/utils/CdbDBA.php b/includes/utils/CdbDBA.php
new file mode 100644 (file)
index 0000000..efcaf21
--- /dev/null
@@ -0,0 +1,75 @@
+<?php
+/**
+ * DBA-based CDB reader/writer
+ *
+ * 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
+ */
+
+/**
+ * Reader class which uses the DBA extension
+ */
+class CdbReaderDBA extends CdbReader {
+       public function __construct( $fileName ) {
+               $this->handle = dba_open( $fileName, 'r-', 'cdb' );
+               if ( !$this->handle ) {
+                       throw new CdbException( 'Unable to open CDB file "' . $fileName . '"' );
+               }
+       }
+
+       public function close() {
+               if ( isset( $this->handle ) ) {
+                       dba_close( $this->handle );
+               }
+               unset( $this->handle );
+       }
+
+       public function get( $key ) {
+               return dba_fetch( $key, $this->handle );
+       }
+}
+
+/**
+ * Writer class which uses the DBA extension
+ */
+class CdbWriterDBA extends CdbWriter {
+       public function __construct( $fileName ) {
+               $this->realFileName = $fileName;
+               $this->tmpFileName = $fileName . '.tmp.' . mt_rand( 0, 0x7fffffff );
+               $this->handle = dba_open( $this->tmpFileName, 'n', 'cdb_make' );
+               if ( !$this->handle ) {
+                       throw new CdbException( 'Unable to open CDB file for write "' . $fileName . '"' );
+               }
+       }
+
+       public function set( $key, $value ) {
+               return dba_insert( $key, $value, $this->handle );
+       }
+
+       public function close() {
+               if ( isset( $this->handle ) ) {
+                       dba_close( $this->handle );
+               }
+               if ( $this->isWindows() ) {
+                       unlink( $this->realFileName );
+               }
+               if ( !rename( $this->tmpFileName, $this->realFileName ) ) {
+                       throw new CdbException( 'Unable to move the new CDB file into place.' );
+               }
+               unset( $this->handle );
+       }
+}
index e7bb4bc..c178ffe 100644 (file)
@@ -69,7 +69,7 @@ class CdbFunctions {
         *
         * @param $s string
         *
-        * @return
+        * @return int
         */
        public static function hash( $s ) {
                $h = 5381;
@@ -103,9 +103,6 @@ class CdbReaderPHP extends CdbReader {
        /** The filename */
        var $fileName;
 
-       /** The file handle */
-       var $handle;
-
        /* number of hash slots searched under this key */
        var $loop;
 
@@ -129,18 +126,18 @@ class CdbReaderPHP extends CdbReader {
 
        /**
         * @param $fileName string
-        * @throws MWException
+        * @throws CdbException
         */
-       function __construct( $fileName ) {
+       public function __construct( $fileName ) {
                $this->fileName = $fileName;
                $this->handle = fopen( $fileName, 'rb' );
                if ( !$this->handle ) {
-                       throw new MWException( 'Unable to open CDB file "' . $this->fileName . '".' );
+                       throw new CdbException( 'Unable to open CDB file "' . $this->fileName . '".' );
                }
                $this->findStart();
        }
 
-       function close() {
+       public function close() {
                if ( isset( $this->handle ) ) {
                        fclose( $this->handle );
                }
@@ -176,7 +173,7 @@ class CdbReaderPHP extends CdbReader {
        }
 
        /**
-        * @throws MWException
+        * @throws CdbException
         * @param $length
         * @param $pos
         * @return string
@@ -184,7 +181,7 @@ class CdbReaderPHP extends CdbReader {
        protected function read( $length, $pos ) {
                if ( fseek( $this->handle, $pos ) == -1 ) {
                        // This can easily happen if the internal pointers are incorrect
-                       throw new MWException(
+                       throw new CdbException(
                                'Seek failed, file "' . $this->fileName . '" may be corrupted.' );
                }
 
@@ -194,7 +191,7 @@ class CdbReaderPHP extends CdbReader {
 
                $buf = fread( $this->handle, $length );
                if ( $buf === false || strlen( $buf ) !== $length ) {
-                       throw new MWException(
+                       throw new CdbException(
                                'Read from CDB file failed, file "' . $this->fileName . '" may be corrupted.' );
                }
 
@@ -204,13 +201,13 @@ class CdbReaderPHP extends CdbReader {
        /**
         * Unpack an unsigned integer and throw an exception if it needs more than 31 bits
         * @param $s
-        * @throws MWException
+        * @throws CdbException
         * @return mixed
         */
        protected function unpack31( $s ) {
                $data = unpack( 'V', $s );
                if ( $data[1] > 0x7fffffff ) {
-                       throw new MWException(
+                       throw new CdbException(
                                'Error in CDB file "' . $this->fileName . '", integer too big.' );
                }
 
@@ -291,15 +288,13 @@ class CdbReaderPHP extends CdbReader {
  * CDB writer class
  */
 class CdbWriterPHP extends CdbWriter {
-       var $handle, $realFileName, $tmpFileName;
-
        var $hplist;
        var $numentries, $pos;
 
        /**
         * @param $fileName string
         */
-       function __construct( $fileName ) {
+       public function __construct( $fileName ) {
                $this->realFileName = $fileName;
                $this->tmpFileName = $fileName . '.tmp.' . mt_rand( 0, 0x7fffffff );
                $this->handle = fopen( $this->tmpFileName, 'wb' );
@@ -315,16 +310,9 @@ class CdbWriterPHP extends CdbWriter {
                }
        }
 
-       function __destruct() {
-               if ( isset( $this->handle ) ) {
-                       $this->close();
-               }
-       }
-
        /**
-        * @param $key
-        * @param $value
-        * @return
+        * @param string $key
+        * @param string $value
         */
        public function set( $key, $value ) {
                if ( strval( $key ) === '' ) {
@@ -338,14 +326,14 @@ class CdbWriterPHP extends CdbWriter {
        }
 
        /**
-        * @throws MWException
+        * @throws CdbException
         */
        public function close() {
                $this->finish();
                if ( isset( $this->handle ) ) {
                        fclose( $this->handle );
                }
-               if ( wfIsWindows() && file_exists( $this->realFileName ) ) {
+               if ( $this->isWindows() && file_exists( $this->realFileName ) ) {
                        unlink( $this->realFileName );
                }
                if ( !rename( $this->tmpFileName, $this->realFileName ) ) {
@@ -355,7 +343,7 @@ class CdbWriterPHP extends CdbWriter {
        }
 
        /**
-        * @throws MWException
+        * @throws CdbException
         * @param $buf
         */
        protected function write( $buf ) {
@@ -366,7 +354,7 @@ class CdbWriterPHP extends CdbWriter {
        }
 
        /**
-        * @throws MWException
+        * @throws CdbException
         * @param $len
         */
        protected function posplus( $len ) {
@@ -396,7 +384,7 @@ class CdbWriterPHP extends CdbWriter {
        }
 
        /**
-        * @throws MWException
+        * @throws CdbException
         * @param $keylen
         * @param $datalen
         */
@@ -412,7 +400,7 @@ class CdbWriterPHP extends CdbWriter {
        }
 
        /**
-        * @throws MWException
+        * @throws CdbException
         */
        protected function finish() {
                // Hack for DBA cross-check
@@ -491,13 +479,13 @@ class CdbWriterPHP extends CdbWriter {
         * Clean up the temp file and throw an exception
         *
         * @param $msg string
-        * @throws MWException
+        * @throws CdbException
         */
        protected function throwException( $msg ) {
                if ( $this->handle ) {
                        fclose( $this->handle );
                        unlink( $this->tmpFileName );
                }
-               throw new MWException( $msg );
+               throw new CdbException( $msg );
        }
 }
index b18fb80..8885d0e 100644 (file)
--- a/index.php
+++ b/index.php
@@ -42,7 +42,7 @@ if ( !function_exists( 'version_compare' ) || version_compare( phpversion(), '5.
 
 # Initialise common code.  This gives us access to GlobalFunctions, the
 # AutoLoader, and the globals $wgRequest, $wgOut, $wgUser, $wgLang and
-# $wgContLang, amongst others; it does *not* load $wgTitle
+# $wgContLang, amongst others
 require __DIR__ . '/includes/WebStart.php';
 
 $mediaWiki = new MediaWiki();
index 6bbd8bf..2038bac 100644 (file)
@@ -3325,11 +3325,13 @@ class Language {
                                $length -= $eLength;
                                $string = substr( $string, 0, $length ); // xyz...
                                $string = $this->removeBadCharLast( $string );
+                               $string = rtrim( $string );
                                $string = $string . $ellipsis;
                        } else {
                                $length += $eLength;
                                $string = substr( $string, $length ); // ...xyz
                                $string = $this->removeBadCharFirst( $string );
+                               $string = ltrim( $string );
                                $string = $ellipsis . $string;
                        }
                }
index 96a71a0..d4c38af 100644 (file)
@@ -70,7 +70,7 @@ class LanguageConverter {
        public $mMaxDepth = 10;
        public $mVarSeparatorPattern;
 
-       const CACHE_VERSION_KEY = 'VERSION 6';
+       const CACHE_VERSION_KEY = 'VERSION 7';
 
        /**
         * Constructor
index 0bf96d4..c5c7d23 100644 (file)
        'lmo' => 'lumbaart',    # Lombard
        'ln' => 'lingála',             # Lingala
        'lo' => 'ລາວ',    # Laotian
+       'lrc' => 'لوری',    # Northern Luri
        'loz' => 'Silozi', # Lozi
        'lt' => 'lietuvių',    # Lithuanian
        'ltg' => 'latgaļu',    # Latgalian
index 3da7711..072e857 100644 (file)
@@ -28,7 +28,6 @@
  */
 class LanguageBs extends Language {
 
-
        /**
         * Convert from the nominative form of a noun to some other case
         * Invoked with {{GRAMMAR:case|word}}
index 5a7bbf3..4e08613 100644 (file)
@@ -727,7 +727,7 @@ class LanguageKk_cyrl extends Language {
                $lastLetter[0] = $ar[count( $ar ) - 1];
 
                // Find the last vowel in the word
-               $lastLetter[1] = NULL;
+               $lastLetter[1] = null;
                foreach ( $wordReversed as $xvalue ) {
                        foreach ( $allVowels as $yvalue ) {
                                if ( strcmp( $xvalue, $yvalue ) == 0 ) {
@@ -737,7 +737,7 @@ class LanguageKk_cyrl extends Language {
                                        continue;
                                }
                        }
-                       if ( $lastLetter[1] !== NULL ) {
+                       if ( $lastLetter[1] !== null ) {
                                break;
                        } else {
                                continue;
index f37e2d5..7ea67f2 100644 (file)
@@ -67,7 +67,6 @@ class LanguageOs extends Language {
                # Variable for ending
                $ending = '';
 
-
                # CHecking if the $word is in plural form
                if ( preg_match( '/тæ$/u', $word ) ) {
                        $word = mb_substr( $word, 0, -1 );
index 887f05c..8d2fe16 100644 (file)
@@ -21,7 +21,6 @@
  * @ingroup Language
  */
 
-
 /**
  * Turkish (Türkçe)
  *
index fc1e8a8..f362329 100644 (file)
@@ -66,7 +66,7 @@ class LanguageTyv extends Language {
                $wordReversed = array_reverse( $ar[0] ); // Here's an array with the order of the letters in the word reversed so we can find a match quicker *shrug*
 
                // Find the last vowel in the word
-               $wordLastVowel = NULL;
+               $wordLastVowel = null;
                foreach ( $wordReversed as $xvalue ) {
                        foreach ( $allVowels as $yvalue ) {
                                if ( strcmp( $xvalue, $yvalue ) == 0 ) {
@@ -76,7 +76,7 @@ class LanguageTyv extends Language {
                                        continue;
                                }
                        }
-                       if ( $wordLastVowel !== NULL ) {
+                       if ( $wordLastVowel !== null ) {
                                break;
                        } else {
                                continue;
index 7b9dcc3..dfb6411 100644 (file)
@@ -13,6 +13,8 @@
  * @author Ezagren
  * @author Fadli Idris
  * @author Meno25
+ * @author Rachmat.Wahidi
+ * @author Sayed Muddasir
  * @author Si Gam Acèh
  */
 
@@ -163,62 +165,62 @@ $messages = array(
 'tog-hideminor' => 'Peusom neuandam bacut bak neuubah barô',
 'tog-hidepatrolled' => 'Peusom neuandam teurunda bak neuubah barô',
 'tog-newpageshidepatrolled' => 'Peusom laman teurunda nibak dapeuta ôn barô',
-'tog-extendwatchlist' => 'Peuhah dapeuta keunalön keu peuleumah ban dum neuubah, kon nyang barô mantöng',
-'tog-usenewrc' => 'Peusaho neuandam bak neuleumah neuubah barô ngon dapeuta keunalon meunurot ôn',
-'tog-numberheadings' => 'Bôh numbô nan keudroë',
+'tog-extendwatchlist' => 'Peuhah dapeuta keunalön keu peuleumah ban dum neuubah, kön nyang barô mantöng',
+'tog-usenewrc' => 'Peusaho neuandam bak neuleumah neuubah barô ngön dapeuta keunalön meunurôt ôn',
+'tog-numberheadings' => 'Bôh numbôi nan keudroë',
 'tog-showtoolbar' => 'Peuleumah bateuëng alat andam',
-'tog-editondblclick' => 'Andam ôn ngon duwa go teugon',
-'tog-editsection' => 'Peujeuet andam bideueng rot hubong [andam]',
-'tog-editsectiononrightclick' => 'Peujeuet andam bideueng ngon teugon blah uneun bak nan bideueng',
-'tog-showtoc' => 'Peuleumah dapeuta asoe (keu on-on nyang na leubeh nibak 3 boh aneuk ulee)',
-'tog-rememberpassword' => 'Ingat lôn tamong bak peuramban nyoë (keu paleng trep $1 {{PLURAL:$1|uroë|uroë}})',
-'tog-watchcreations' => 'Tamah halaman nyang lonpeugot u dapeuta keunalon',
-'tog-watchdefault' => 'Tamah halaman nyang lon-andam u dapeuta keunalon',
-'tog-watchmoves' => 'Tamah halaman nyang lonpupinah u dapeuta keunalon',
-'tog-watchdeletion' => 'Tamah halaman nyang lonsampoh u dapeuta keunalon',
-'tog-minordefault' => 'Boh tanda mandum neuandam sibagoe neuandam bacut ngon baku',
-'tog-previewontop' => 'Peuleumah hase yoh goh kutak andam',
-'tog-previewonfirst' => 'Peuleumah hase bak neuandam phon',
-'tog-nocache' => 'Pumate pumeugot beun on peuramban nyoe',
-'tog-enotifwatchlistpages' => "Peu'ek surat-e keu lon meunyo saboh halaman nyang lonkalon meuubah",
-'tog-enotifusertalkpages' => "Peu'ek keu lon surat-e meunyo on marit lon meuubah",
-'tog-enotifminoredits' => "Peu'ek cit surat-e keu lon bak neuubah ubit",
-'tog-enotifrevealaddr' => 'Peuleumah alamat surat-e lon bak neubrithee surat-e',
+'tog-editondblclick' => 'Andam laman ngön duwa gö teugön',
+'tog-editsection' => 'Peujeuet andam bideuëng röt hubông [andam]',
+'tog-editsectiononrightclick' => 'Peujeuët andam bideueng ngön teugön blah uneun bak nan bideueng',
+'tog-showtoc' => 'Peuleumah dapeuta asoe (keu laman-laman nyang na leubèh nibak 3 boh aneuk ulèë)',
+'tog-rememberpassword' => 'Ingat lôn tamöng bak peuramban nyoë (keu paléng trép $1 {{PLURAL:$1|uroë}})',
+'tog-watchcreations' => 'Tamah laman nyang lôn peugöt u dapeuta keunalön',
+'tog-watchdefault' => 'Tamah laman nyang lôn-andam u dapeuta keunalon',
+'tog-watchmoves' => 'Tamah laman nyang lôn peupinah u dapeuta keunalon',
+'tog-watchdeletion' => 'Tamah laman nyang lôn sampôh u dapeuta keunalon',
+'tog-minordefault' => 'Bôh tanda mandum neuandam sibagoe neuandam bacut ngön baku',
+'tog-previewontop' => 'Peuleumah hasé yôh goh plôk andam',
+'tog-previewonfirst' => 'Peuleumah hasé bak neuandam phôn',
+'tog-nocache' => 'Pumaté pumeugöt beun laman peuramban nyoe',
+'tog-enotifwatchlistpages' => "Peu'ék surat-e keu lôn meunyo saboh halaman nyang lôn kalon meuubah",
+'tog-enotifusertalkpages' => "Peu'ek keu lôn surat-e meunyo ôn marit lôn meuubah",
+'tog-enotifminoredits' => "Peu'ék cit surat-e keu lôn bak neuubah ubit",
+'tog-enotifrevealaddr' => 'Peuleumah alamat surat-e lôn bak neubrithèë surat-e',
 'tog-shownumberswatching' => 'Peuleumah jumeulah ureueng kalon',
 'tog-oldsig' => 'Tanda jaroe jinoe:',
-'tog-fancysig' => 'Peujeuet tanda jaroe sibagoe naseukah wiki (hana hubong keudroe)',
-'tog-uselivepreview' => 'Nguy peuleumah hase langsong (baci)',
-'tog-forceeditsummary' => 'Peuingat lon meunyo plok neuringkaih neuandam mantong soh',
+'tog-fancysig' => 'Peujeuet tanda jaroe sibagoe naseukah wiki (hana hubông keudroe)',
+'tog-uselivepreview' => 'Ngui peuleumah hasé langsông (baci)',
+'tog-forceeditsummary' => 'Peuingat lôn meunyo plôk neuringkaih neuandam mantöng soh',
 'tog-watchlisthideown' => 'Peusöm nyang lôn andam nibak dapeuta keunalön',
-'tog-watchlisthidebots' => 'Peusöm nyang teu andam nibak sagoö nyang bak dapeuta keunalön',
-'tog-watchlisthideminor' => 'Peusöm Andam Bacut bak dapeuta keunalön',
-'tog-watchlisthideliu' => 'Peusöm andam ureuëng nguy nyang tamöng nibak dapeuta keunalön',
-'tog-watchlisthideanons' => 'Peusöm andam ureuëng nguy hana taturi nibak dapeuta keunalön',
-'tog-watchlisthidepatrolled' => 'Peusom neuandam teukaway bak dapeuta keunalon',
-'tog-ccmeonemails' => "Peu'ek keu lon seunalen surat-e nyang lonpeu'ek keu ureueng la'en",
-'tog-diffonly' => 'Bek peuleumah asoe halaman di yup beunida neuandam',
+'tog-watchlisthidebots' => 'Peusöm nyang teuandam nibak dapeuta keunalön',
+'tog-watchlisthideminor' => 'Peusom Andam Bacut bak dapeuta keunalön',
+'tog-watchlisthideliu' => 'Peusom andam ureuëng ngui nyang tamöng nibak dapeuta keunalön',
+'tog-watchlisthideanons' => 'Peusöm andam ureuëng ngui hana taturi nibak dapeuta keunalön',
+'tog-watchlisthidepatrolled' => 'Peusom neuandam teukawai bak dapeuta keunalön',
+'tog-ccmeonemails' => "Peu'ék keu lôn seunalén surat-e nyang lôn peu'ék keu ureueng la'én",
+'tog-diffonly' => 'Bek peuleumah asoë laman di yup beunida neuandam',
 'tog-showhiddencats' => 'Peuleumah kawan teusom',
 'tog-norollbackdiff' => "Bek peudeuh beunida 'oh lheueh geupeuriwang",
-'tog-useeditwarning' => 'Neupeuingat lôn meunyoë meukubah ôn andam ngon hana teukeubah',
-'tog-prefershttps' => 'Sabè neunguy seunambông teulindông meunyoë neutamöng log',
+'tog-useeditwarning' => 'Neupeuingat lôn meunyö meukubah ôn andam ngön hana teukeubah',
+'tog-prefershttps' => 'Sabé neungui seunambông teulindông meunyö neutamöng log',
 
-'underline-always' => 'Sabe',
+'underline-always' => 'Sabé',
 'underline-never' => "H'an tom",
-'underline-default' => 'Kulet atawa ngon peuhah web teupasang',
+'underline-default' => 'Kulét atawa ngön peuhah wèb teupasang',
 
 # Font style option in Special:Preferences
-'editfont-style' => 'Gaya seunurat komputer bak plok andam',
+'editfont-style' => 'Gaya seunurat komputer bak plôk andam',
 'editfont-default' => 'Bawaan penjelajah web',
 'editfont-monospace' => 'Seunurat Monospace',
 'editfont-sansserif' => 'Seunurat Sans-serif',
 'editfont-serif' => 'Seunurat Serif',
 
 # Dates
-'sunday' => 'Aleuhat',
+'sunday' => 'Aleuhad',
 'monday' => 'Seulanyan',
 'tuesday' => 'Seulasa',
 'wednesday' => 'Rabu',
-'thursday' => 'Hameh',
+'thursday' => 'Hamèh',
 'friday' => "Jeumeu'at",
 'saturday' => 'Sabtu',
 'sun' => 'Aleu',
@@ -232,7 +234,7 @@ $messages = array(
 'february' => 'Buleuën Duwa',
 'march' => 'Buleuën Lhèë',
 'april' => 'Buleuën Peuët',
-'may_long' => 'Buleuën Limong',
+'may_long' => 'Buleuën Limöng',
 'june' => 'Buleuën Nam',
 'july' => 'Buleuën Tujôh',
 'august' => 'Buleuën Lapan',
@@ -244,7 +246,7 @@ $messages = array(
 'february-gen' => 'Buleuën Duwa',
 'march-gen' => 'Buleuën Lhèë',
 'april-gen' => 'Buleuën Peuët',
-'may-gen' => 'Buleuën Limong',
+'may-gen' => 'Buleuën Limöng',
 'june-gen' => 'Buleuën Nam',
 'july-gen' => 'Buleuën Tujôh',
 'august-gen' => 'Buleuën Lapan',
@@ -256,7 +258,7 @@ $messages = array(
 'feb' => 'Duwa',
 'mar' => 'Lhèë',
 'apr' => 'Peuët',
-'may' => 'Limong',
+'may' => 'Limöng',
 'jun' => 'Nam',
 'jul' => 'Tujôh',
 'aug' => 'Lapan',
@@ -278,7 +280,7 @@ $messages = array(
 'december-date' => '$1 Buleuën Duwa Blaih',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|Kawan|Kawan}}',
+'pagecategories' => '{{PLURAL:$1|Kawan}}',
 'category_header' => 'Teunuléh lam kawan "$1"',
 'subcategories' => 'Aneuk kawan',
 'category-media-header' => 'Peukakaih lam kawan "$1"',
@@ -286,15 +288,15 @@ $messages = array(
 'hidden-categories' => '{{PLURAL:$1|Kawan teusom|Kawan teusom}}',
 'hidden-category-category' => 'Kawan teusom',
 'category-subcat-count' => '{{PLURAL:$2|Kawan nyoë  cit na saboh yupkawan nyoë.|Kawan nyoë na {{PLURAL:$1|yupkawan|$1 yupkawan}} nyoë, dari ban dum $2.}}',
-'category-subcat-count-limited' => 'Kawan nyoe na {{PLURAL:$1|aneuk kawan|$1 aneuk kawan}} lagee di yup.',
+'category-subcat-count-limited' => 'Kawan nyoë na {{PLURAL:$1|aneuk kawan|$1 aneuk kawan}} lagèë di yup.',
 'category-article-count' => '{{PLURAL:$2|Kawan nyoë cit na saboh ôn nyoë.|Kawan nyoë na  {{PLURAL:$1|ôn|$1 ôn }}, dari ban dum $2.}}',
-'category-article-count-limited' => 'Kawan nyoe na {{PLURAL:$1|saboh halaman|$1 halaman}} lagee di yup.',
-'category-file-count' => '{{PLURAL:$2|Kawan nyoe cit na beureukaih nyoe sagay.|{{PLURAL:$1|beureukaih|$1 beureukaih}} nyoe na lam kawan nyoe, nibak ban dum $2.}}',
-'category-file-count-limited' => 'Kawan nyoe na {{PLURAL:$1|beureukaih|$1 beureukaih}} lagee di yup.',
+'category-article-count-limited' => 'Kawan nyoë na {{PLURAL:$1|saboh halaman|$1 halaman}} lagèë di yup.',
+'category-file-count' => '{{PLURAL:$2|Kawan nyoë cit na beureukaih nyoë sagay.|{{PLURAL:$1|beureukaih|$1 beureukaih}} nyoë na lam kawan nyoë, nibak ban dum $2.}}',
+'category-file-count-limited' => 'Kawan nyoe na {{PLURAL:$1|beureukaih|$1 beureukaih}} lagèë di yup.',
 'listingcontinuesabbrev' => 'samb.',
-'index-category' => 'On nyang geuindex',
-'noindex-category' => 'On nyang hana geuindex',
-'broken-file-category' => 'On ngon gamba reuloh',
+'index-category' => 'Laman nyang geuindex',
+'noindex-category' => 'Laman nyang hana geuindex',
+'broken-file-category' => 'Laman ngön gamba reulöh',
 
 'about' => 'Bhaih',
 'article' => 'Teunuléh',
@@ -302,30 +304,30 @@ $messages = array(
 'cancel' => 'Peubateuë',
 'moredotdotdot' => 'Lom...',
 'morenotlisted' => 'Dapeuta nyoe hana leungkap',
-'mypage' => 'Ôn',
+'mypage' => 'Laman',
 'mytalk' => 'Marit',
 'anontalk' => 'Peugah haba IP nyoë.',
-'navigation' => 'Navigasi',
-'and' => '&#32;ngon',
+'navigation' => 'Keumudoë',
+'and' => '&#32;ngön',
 
 # Cologne Blue skin
 'qbfind' => 'Mita',
 'qbbrowse' => 'Lop',
 'qbedit' => 'Andam',
-'qbpageoptions' => 'Ôn nyoe',
-'qbmyoptions' => 'Ôn lôn',
-'qbspecialpages' => 'Ôn kusuih',
-'faq' => 'FAQ',
+'qbpageoptions' => 'Laman nyoe',
+'qbmyoptions' => 'Laman lôn',
+'qbspecialpages' => 'Laman kusuih',
+'faq' => 'Teunanyöng Umom',
 'faqpage' => 'Project:FAQ',
 
 # Vector skin
 'vector-action-addsection' => 'Tamah bhaih',
 'vector-action-delete' => 'Sampôh',
-'vector-action-move' => 'Peupinah',
+'vector-action-move' => 'Pupinah',
 'vector-action-protect' => 'Peulindông',
 'vector-action-undelete' => 'Bateuë sampôh',
 'vector-action-unprotect' => 'Gantoe neulindông',
-'vector-simplesearch-preference' => 'Peuudep beunteueng mita biasa (kulet Vector khong)',
+'vector-simplesearch-preference' => 'Peuudép beunteueng mita biasa (kulét Vèctor khöng)',
 'vector-view-create' => 'Peugöt',
 'vector-view-edit' => 'Andam',
 'vector-view-history' => 'Eu riwayat',
@@ -344,67 +346,67 @@ $messages = array(
 'searchbutton' => 'Mita',
 'go' => 'Jak u',
 'searcharticle' => 'Jak u',
-'history' => 'Riwayat ôn',
+'history' => 'Riwayat laman',
 'history_short' => 'Riwayat',
-'updatedmarker' => 'geuubah yoh seunaweue keuneulheueh lon phon kon',
+'updatedmarker' => 'geuubah yôh seunaweue keuneulheueh lôn phôn kön',
 'printableversion' => 'Seunalén rakam',
 'permalink' => 'Peunawôt teutap',
 'print' => 'Rakam',
-'view' => 'Beuet',
+'view' => 'Beuët',
 'edit' => 'Andam',
 'create' => 'Peugöt',
-'editthispage' => 'Andam ôn nyoë',
-'create-this-page' => 'Peugèt Ã´n nyoe',
+'editthispage' => 'Andam laman nyoë',
+'create-this-page' => 'Peugöt laman nyoë',
 'delete' => 'Sampôh',
-'deletethispage' => 'Sampôh ôn nyoe',
-'undeletethispage' => 'Bèk neusampôh ôn nyoë',
+'deletethispage' => 'Sampôh laman nyoë',
+'undeletethispage' => 'Bèk neusampôh laman nyoë',
 'undelete_short' => 'Bateuë sampôh {{PLURAL:$1|one edit|$1 edits}}',
-'viewdeleted_short' => 'Eu {{PLURAL:$1|saboh neuandam|$1 neuandam}} nyang geusampoh',
+'viewdeleted_short' => 'Eu {{PLURAL:$1|saboh neuandam|$1 neuandam}} nyang geusampôh',
 'protect' => 'Peulindông',
 'protect_change' => 'ubah',
-'protectthispage' => 'Peulindong on nyoe',
-'unprotect' => 'Gantoe neulindong',
-'unprotectthispage' => 'Gantoe neulindông ôn nyoë',
-'newpage' => 'Ôn barô',
-'talkpage' => 'Peugah haba bhah ôn nyoë',
+'protectthispage' => 'Peulindông laman nyoë',
+'unprotect' => 'Gantoë neulindông',
+'unprotectthispage' => 'Gantoë neulindông laman nyoë',
+'newpage' => 'Laman barô',
+'talkpage' => 'Peugah haba bhah laman nyoë',
 'talkpagelinktext' => 'Marit',
-'specialpage' => 'Ôn kusuih',
+'specialpage' => 'Laman kusuih',
 'personaltools' => 'Peukakaih droë',
-'postcomment' => 'Beunagi baro',
-'articlepage' => 'Eu ôn asoë',
+'postcomment' => 'Beunagi barô',
+'articlepage' => 'Eu asoë laman',
 'talk' => 'Marit',
-'views' => 'Ôn',
+'views' => 'Seuneudeuih',
 'toolbox' => 'Alat',
-'userpage' => 'Eu on ureueng nguy',
-'projectpage' => 'Eu ôn buët',
-'imagepage' => 'Eu on beureukaih',
-'mediawikipage' => 'Eu on peusan sistem',
-'templatepage' => 'Eu on seunaleuek',
-'viewhelppage' => 'Eu on beunantu',
-'categorypage' => 'Eu ôn kawan',
-'viewtalkpage' => 'Eu on marit',
+'userpage' => 'Eu laman ureuëng ngui',
+'projectpage' => 'Eu laman buët',
+'imagepage' => 'Eu laman beureukaih',
+'mediawikipage' => 'Eu laman peusan sistem',
+'templatepage' => 'Eu laman seunaleuëk',
+'viewhelppage' => 'Eu laman beunantu',
+'categorypage' => 'Eu laman kawan',
+'viewtalkpage' => 'Eu laman marit',
 'otherlanguages' => 'Bahsa la’én',
 'redirectedfrom' => '(Geupeupinah nibak $1)',
-'redirectpagesub' => 'Ôn peuninah',
+'redirectpagesub' => 'Laman peuninah',
 'lastmodifiedat' => 'Laman nyoë seuneulheuëh geuubah bak $1 poh $2.',
-'viewcount' => 'On nyoe ka geusaweue {{PLURAL:$1|sigo|$sigo}}.<br />',
-'protectedpage' => 'Ôn teupeulindông',
+'viewcount' => 'Laman nyoë ka geusaweuë {{PLURAL:$1|sigo|$sigo}}.<br />',
+'protectedpage' => 'Laman teupeulindông',
 'jumpto' => 'Grôp u:',
-'jumptonavigation' => 'navigasi',
+'jumptonavigation' => 'keumudoë',
 'jumptosearch' => 'mita',
-'view-pool-error' => "Meu'ah, server teungoh sibuk jinoe
-Le that ureueng nyang meuh'eut jak eu on nyoe
-Neupreh si'at yoh goh neubaci lom
+'view-pool-error' => "Meu'ah, server teungöh sibôk jinoe
+Le that ureueng nyang meuh'eut jak eu laman nyoe
+Neuprèh si'at yôh goh neubaci lom
 
 $1",
-'pool-timeout' => 'Liwat watee preh gunci',
-'pool-queuefull' => 'Seunapat neupreh peunoh',
-'pool-errorunknown' => 'Salah hana meukon',
+'pool-timeout' => 'Liwat watèë prèh gunci',
+'pool-queuefull' => 'Seunapat neuprèh peunoh',
+'pool-errorunknown' => 'Salah hana meukön',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
 'aboutsite' => 'Bhaih {{SITENAME}}',
 'aboutpage' => 'Project:Bhaih',
-'copyright' => "Asoë na meunurot $1 keucuali meunyo na hay la'en nyang geupeugah",
+'copyright' => "Asoë na meunurôt $1 keucuali meunyö na hay la'én nyang geupeugah",
 'copyrightpage' => '{{ns:project}}:Hak karang',
 'currentevents' => 'Haba barô',
 'currentevents-url' => 'Project:Haba barô',
@@ -421,11 +423,11 @@ $1",
 'privacypage' => 'Project:Jaga rahsia',
 
 'badaccess' => 'Salah khut/hak tamöng',
-'badaccess-group0' => 'Droeneuh hana geupeuidin keu neupeulaku buet nyang neulakee',
-'badaccess-groups' => 'Buet nyang neulakee geupeubatah keu ureueng nguy lam {{PLURAL:$2|kawan|salah saboh nibak kawan}}: $1.',
+'badaccess-group0' => 'Droeneuh hana geupeuidin keu neupeulaku buët nyang neulakèë',
+'badaccess-groups' => 'Buët nyang neulakèë geupeubatah keu ureuëng ngui lam {{PLURAL:$2|kawan|salah saboh nibak kawan}}: $1.',
 
-'versionrequired' => 'Peureulee MediaWiki versi $1',
-'versionrequiredtext' => "MediaWiki versi $1 geupeureulee keu neunguy on nyoe. Neu'eu [[Special:Version|on versi]]",
+'versionrequired' => 'Peureulèë MediaWiki vèrsi $1',
+'versionrequiredtext' => "MediaWiki versi $1 geupeureulèë keu neungui laman nyoë. Neu'eu [[Special:Version|on versi]]",
 
 'ok' => 'Ka göt',
 'retrievedfrom' => 'Geurumpok nibak "$1"',
@@ -435,7 +437,7 @@ $1",
 'youhavenewmessagesfromusers' => "Droeneuh na $1 nibak {{PLURAL:$3|ureueng nguy la'en|$3 ureueng nguy}} ($2).",
 'youhavenewmessagesmanyusers' => "Droeneuh na $1 nibak ureueng nguy la'en ($2)",
 'newmessageslinkplural' => '{{PLURAL:$1|saboh peusan baro|peusan baro}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|neuubah}} keuneulheueh',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|neuubah}} keuneulheuëh',
 'youhavenewmessagesmulti' => 'Droëneuh na padum boh peusan barô bak $1',
 'editsection' => 'andam',
 'editold' => 'andam',
@@ -451,23 +453,23 @@ $1",
 'thisisdeleted' => 'Eu atawa peuriwang $1?',
 'viewdeleted' => 'Eu $1?',
 'restorelink' => '$1 {{PLURAL:$1|neuandam|neuandam}} nyang ka geusampoh',
-'feedlinks' => 'Umpeuen:',
-'feed-invalid' => 'Jeuneh neulakee umpeuen hana paih',
-'feed-unavailable' => 'Umpeuen sindikasi hana',
+'feedlinks' => 'Umpeuën:',
+'feed-invalid' => 'Jeunèh neulakèë umpeuën hana paih',
+'feed-unavailable' => 'Umpeuën sindikasi hana',
 'site-rss-feed' => 'Umpeuën RSS $1',
 'site-atom-feed' => 'Umpeuën Atôm $1',
 'page-rss-feed' => 'Umpeuën RSS "$1"',
 'page-atom-feed' => 'Umpeuën Atom "$1"',
-'red-link-title' => '$1 (ôn goh na)',
-'sort-descending' => 'Peuurot tren',
-'sort-ascending' => 'Peuurot ek',
+'red-link-title' => '$1 (laman hana)',
+'sort-descending' => 'Peuurôt tren',
+'sort-ascending' => 'Peuurôt ék',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main' => 'Ôn',
+'nstab-main' => 'Laman',
 'nstab-user' => 'Ureuëng ngui',
-'nstab-media' => 'Ôn media',
-'nstab-special' => 'Kusuih',
-'nstab-project' => 'Buët ôn',
+'nstab-media' => 'Laman media',
+'nstab-special' => 'Laman kusuih',
+'nstab-project' => 'Laman buët',
 'nstab-image' => 'Beureukaih',
 'nstab-mediawiki' => 'Peusan',
 'nstab-template' => 'Seunaleuëk',
@@ -475,58 +477,59 @@ $1",
 'nstab-category' => 'Kawan',
 
 # Main script and global functions
-'nosuchaction' => 'Hana buet nyan',
-'nosuchactiontext' => 'Buet nyang geulakee le URL nyan hana sah. Droeneuh kadang salah neukeutik URL, atawa neuseutot saboh neuhubong nyang hana beutoy. Hay nyoe kadang jeuet keu lageuem saboh bug bak alat leumiek nyang geunguy le {{SITENAME}}.',
-'nosuchspecialpage' => 'Hana on kusuih lagee nyan',
-'nospecialpagetext' => "<strong>Droeneuh ka neulakee on kusuih nyang hana sah.</strong>
-Dapeuta on kusuih nyang sah jeuet neu'eu bak [[Special:SpecialPages|{{int:specialpages}}]].",
+'nosuchaction' => 'Hana buët nyan',
+'nosuchactiontext' => 'Buët nyang geulakèë lé URL nyan hana sah. Droeneuh kadang salah neukeutik URL, atawa neuseutöt saboh neuhubông nyang hana beutôi. Hai nyoë kadang jeuët keu lageuëm saboh bug bak alat leumiëk nyang geungui lé {{SITENAME}}.',
+'nosuchspecialpage' => 'Hana laman kusuih lagèë nyan',
+'nospecialpagetext' => "<strong>Droeneuh ka neulakèë laman kusuih nyang hana sah.</strong>
+Dapeuta laman kusuih nyang sah jeuet neu'eu bak [[Special:SpecialPages|{{int:specialpages}}]].",
 
 # General errors
 'error' => 'Seunalah',
 'databaseerror' => 'Kesalahan basis data',
 'databaseerror-text' => 'Saboh salah bak nè data ka teujadi. Nyoë meuhat na nyang han paih bak peukakaih droëneuh',
-'databaseerror-textcl' => 'Teunanyong basis data teungoh kacho',
-'databaseerror-query' => 'Teunanyong: $1',
+'databaseerror-textcl' => 'Teunanyöng basis data teungöh kacho',
+'databaseerror-query' => 'Teunanyöng: $1',
 'databaseerror-function' => 'Guna: $1',
 'databaseerror-error' => 'Salah: $1',
-'laggedslavemode' => 'Peuneugah: On nyoe kadang hana neuubah baro',
-'readonly' => 'Basis data geurok',
-'enterlockreason' => 'Pasoe daleh neurok ngon pajan jeuet geupeuhah',
-'readonlytext' => "Basis data hat nyoe geurok keu teunamong baro ngon geunantoe la'en, kadang keu peulara basis data rutin, lheueh nyan baro lagee biasa teuma.
+'laggedslavemode' => 'Peuneugah: Laman nyoë kadang hana neuubah barô',
+'readonly' => 'Basis data geurôk',
+'enterlockreason' => 'Pasoë dalèh neurôk ngön pajan jeuët geupeuhah',
+'readonlytext' => "Basis data hat nyoë geurôk keu teunamöng barô ngön geunantoë la'én, kadang keu peulara basis data rutin, lheuëh nyan barô lagèë biasa teuma.
 
-Ureueng uroh nyang rok nyoe geupeutaba jeuneulaih nyoe: $1",
-'missing-article' => 'Basis data h’an jeuët jiteumèë naseukah nibak ôn nyang sipatôtjih na, nakeuh "$1" $2.
+Ureueng urôh nyang rôk nyoe geupeutaba jeuneulaih nyoe: $1",
+'missing-article' => 'Basis data hana jiteumèë naseukah nibak laman nyang sipatôtjih na, nyakni "$1" $2.
 
-Nyoë biasajih sabab hubông useuëng u geunantoë away nyang ka teusampôh.
+Hai nyoë kayém jipeusabab lé peunawôt useuëng u laman nyang ka geusampôh.
 
-Meunyo kön nyoë sababjih, Droëneuh kadang ka neuteumèë saboh bug lam software. Neutulông peugah bhah nyoë bak salah sidroë [[Special:ListUsers/sysop|Nyang urôh]], ngön neupeugah alamat URL nyang neusaweuë.',
+Meunyö kön nyoë sababjih, droëneuh kadang ka neuteumeung saboh \'\'bug\'\' lam peukakaih leumiëk.
+Neutulông bri thèë hai nyoë keu salah sidroë [[Special:ListUsers/sysop|ureuëng urôih]], ngön neupeugah alamat URL-jih.',
 'missingarticle-rev' => '(revisi#: $1)',
 'missingarticle-diff' => '(Bida: $1, $2)',
-'readonly_lag' => 'Basis data ka geurok otomatis silawet basis data sekunder teungoh geupeusinkron ngon basis data utama',
+'readonly_lag' => 'Basis data ka geurôk otomatis silawét basis data sekunder teungöh geupeusinkron ngön basis data utama',
 'internalerror' => 'Salah bak dalam',
 'internalerror_info' => 'Salah bak dalam: $1',
-'fileappenderrorread' => 'H\'an jitem beuet "$1" \'oh geutamah',
-'fileappenderror' => 'H\'an jeuet jipasoe "$1" u "$2"',
-'filecopyerror' => 'H\'an jeuet salen beureukaih "$1" u "$2".',
-'filerenameerror' => 'H\'an jeuet boh nan beureukaih "$1" u "$2".',
-'filedeleteerror' => 'H\'an jeuet sampoh beureukaih "$1".',
-'directorycreateerror' => 'H\'an jeuet peugot direktori "$1".',
-'filenotfound' => 'Beureukaih "$1" hana meurumpok.',
-'fileexistserror' => 'H\'an jeuet geusalen u beureukaih "$1": Beureukaih ka na.',
+'fileappenderrorread' => 'H\'an jitém beuet "$1" \'oh geutamah',
+'fileappenderror' => 'H\'an jeuet jipasoë "$1" u "$2"',
+'filecopyerror' => 'H\'an jeuet salén beureukaih "$1" u "$2".',
+'filerenameerror' => 'H\'an jeuët bôh nan beureukaih "$1" u "$2".',
+'filedeleteerror' => 'H\'an jeuët sampôh beureukaih "$1".',
+'directorycreateerror' => 'H\'an jeuet peugöt direktori "$1".',
+'filenotfound' => 'Beureukaih "$1" hana meurumpök.',
+'fileexistserror' => 'H\'an jeuet geusalén u beureukaih "$1": Beureukaih ka na.',
 'unexpected' => 'Yum hana geuharap: "$1"="$2".',
-'formerror' => "Reuloh: H'an jeuet peu'et formulir.",
-'badarticleerror' => "Buet nyoe h'an jeuet geupeulaku bak on nyoe.",
-'cannotdelete' => 'On atawa beureukaih "$1" h\'an jeuet geusampoh.
-Kadang ka na soe sampoh.',
-'cannotdelete-title' => 'H\'an jeuet sampoh on "$1"',
-'delete-hook-aborted' => "Seunampoh geupeubateue le kaw'et parser.
+'formerror' => "Reulöh: H'an jeuet peu'ék formulir.",
+'badarticleerror' => "Buet nyoe h'an jeuët geupeulaku bak laman nyoe.",
+'cannotdelete' => 'Laman atawa beureukaih "$1" h\'an jeuët geusampôh.
+Kadang ka na soe sampôh.',
+'cannotdelete-title' => 'H\'an jeuet sampôh laman "$1"',
+'delete-hook-aborted' => "Seunampôh geupeubateuë lé kaw'ét parser.
 Hana jeuneulaih.",
-'no-null-revision' => 'H\'an jeuet peugot revisi null baro keu halaman "$1"',
-'badtitle' => 'Nan hana sah',
-'badtitletext' => 'Nan ôn nyang neulakèë hana sah, soh, atawa nan antarabahsa atawa antarawiki nyang salah sambông.',
-'perfcached' => 'Data di yup nyoe geupeusom ngon kadang kon data baro. {{PLURAL:$1|saboh hase|$1 hase}} maksimum na lam beujana.',
-'perfcachedts' => 'Data di yup nyoe geupeusom, ngon geupeubaro seuneulheueh bak $1. {{PLURAL:$4|saboh hase|$4 hase}} paleng le na lam beujana.',
-'querypage-no-updates' => "Beunaro keu on nyoe hat nyoe teungoh h'an jeuet.
+'no-null-revision' => 'H\'an jeuet peugöt revisi null barô keu halaman "$1"',
+'badtitle' => 'Nan hana beutôi',
+'badtitletext' => 'Nan laman nyang neulakèë hana sah, soh, atawa nan antarabahsa atawa antarawiki nyang salah sambông.',
+'perfcached' => 'Data di yup nyoe geupeusom ngön kadang kön data barô. {{PLURAL:$1|saboh hase|$1 hase}} maksimum na lam beujana.',
+'perfcachedts' => 'Data di yup nyoe geupeusom, ngön geupeubarô seuneulheueh bak $1. {{PLURAL:$4|saboh hase|$4 hase}} paléng le na lam beujana.',
+'querypage-no-updates' => "Beunarô keu laman nyoe hat nyoe teungöh h'an jeuët.
 Data sinoe h'an geupasoe ulang.",
 'wrong_wfQuery_params' => 'Parameter salah u wfQuery()<br />
 Meunafaat: $1<br />
@@ -534,24 +537,37 @@ Neulakee: $2',
 'viewsource' => 'Eu nè',
 'viewsource-title' => 'Eu ne keu $1',
 'actionthrottled' => 'Buet geupeubataih',
-'actionthrottledtext' => 'Sibagoe saboh seunipat lawan-spam, droeneuh geupeubataih nibak neupeulaku buet nyoe le that go lam watee paneuk, ngon droeneuh ka leubeh nibak bataih.
-Neuci lom lam padum minet.',
-'protectedpagetext' => 'Laman nyoe ka geupeulindong mangat bek jeuet geuandam',
+'actionthrottledtext' => 'Sibagoe saboh seunipat lawan-spam, droeneuh geupeubataih nibak neupeulaku buet nyoe le that gö lam watèë paneuk, ngön droeneuh ka leubèh nibak bataih.
+Neuci lom lam padum minèt.',
+'protectedpagetext' => 'Laman nyoe ka geupeulindông mangat bèk jeuet geuandam',
 'viewsourcetext' => 'Droëneuh  jeuët neu’eu',
-'viewyourtext' => 'Droëneuh meuidzin kalon ngon neucok nè andam droëneuh u ôn nyoë',
-'protectedinterface' => 'Halaman nyoe na teks muka keu muka keu peukakaih leumiek ngon geupeulindong mangat bek jeuet jipeureuloh.
+'viewyourtext' => 'Droëneuh meuidzin kalön ngön neucok nè andam droëneuh u laman nyoë',
+'protectedinterface' => 'Halaman nyoe na tèks muka keu muka keu peukakaih leumiëk ngön geupeulindông mangat bek jeuet jipeureuloh.
 Keu neuk tamah atawa ubah teujeumah keu ban dum wiki, neungui [//translatewiki.net/ translatewiki.net], proyek lokalisasi MediaWiki.',
-'ns-specialprotected' => 'Ôn khusuih bèk neuandam',
-'exception-nologin' => 'Hana tamong lom',
+'mycustomcssprotected' => 'Droëneuh hana hak neuandam halaman CSS nyoe.',
+'mycustomjsprotected' => 'Droëneuh hana idin neuandam halaman JavaScript nyoe.',
+'mypreferencesprotected' => 'Droeneuh hana izin keu neuandam geunalak droeneuh.',
+'ns-specialprotected' => 'Laman khusuih bèk neuandam',
+'titleprotected' => 'Nan nyoe ka geupeulindông nibak neuandam lé [[User:$1|$1]].
+Dalèhjih nakeuh "\'\'$2\'\'".',
+'invalidtitle-knownnamespace' => 'Nan nyang hana sah ngön ruweueng nan "$2" ngön "$3"',
+'exception-nologin' => 'Hana tamöng lom',
+'exception-nologin-text' => 'halaman atawa buët nyoe beu neutamöng dilèë bak wiki nyoe.',
+
+# Virus scanner
+'virus-unknownscanner' => 'Antivirus hana meuturi:',
 
 # Login and logout pages
+'logouttext' => "'''Droeneuh ka neutubiet log.'''
+
+Beuneuteupue meunyoe na padum-padum laman nyang deuh lagèe na neutamöng log, sampoe ka lheuh neupeugléh ''cache''.",
 'welcomeuser' => 'Seulamat trôk teuka, $1 !',
 'welcomecreation-msg' => 'Nan droëneuh ka geupeugöt. 
 Bèk tuwo neuatô [[Special:Preferences|geunalak {{SITENAME}}]] droëneuh.',
-'yourname' => 'Ureuëng nguy:',
-'userlogin-yourname' => 'Ureuëng nguy',
-'userlogin-yourname-ph' => 'Peutamöng nan ureuëng nguy droëneuh',
-'createacct-another-username-ph' => 'Pasoë nan ureuëng nguy droëneuh',
+'yourname' => 'Ureuëng ngui:',
+'userlogin-yourname' => 'Ureuëng ngui',
+'userlogin-yourname-ph' => 'Peutamöng nan ureuëng ngui droëneuh',
+'createacct-another-username-ph' => 'Pasoë nan ureuëng ngui droëneuh',
 'yourpassword' => 'Lageuëm:',
 'userlogin-yourpassword' => 'Lageuëm rahsia',
 'userlogin-yourpassword-ph' => 'Pasoë lageuëm rahsia droëneuh',
@@ -559,9 +575,9 @@ Bèk tuwo neuatô [[Special:Preferences|geunalak {{SITENAME}}]] droëneuh.',
 'yourpasswordagain' => 'Pasoë lom lageuëm rahsia:',
 'createacct-yourpasswordagain' => 'Peunyo lageuëm rahsia',
 'createacct-yourpasswordagain-ph' => 'Pasoë lom lageuëm rahsia',
-'remembermypassword' => 'Ingat lôn tamong bak peuramban nyoë (keu paleng trep $1 {{PLURAL:$1|uroë|uroë}})',
+'remembermypassword' => 'Ingat lôn tamöng bak peuramban nyoë (keu paléng trép $1 {{PLURAL:$1|uroë|days}})',
 'userlogin-remembermypassword' => 'Peubiyeuë lôn tamöng',
-'userlogin-signwithsecure' => 'Nguy server aman',
+'userlogin-signwithsecure' => 'Ngui server aman',
 'yourdomainname' => 'Domain droeneuh:',
 'password-change-forbidden' => 'Droëneuh h‘an jeuët neuubah lageuëm rahsia bak wiki nyoë.',
 'externaldberror' => 'Na seunalah bak peusahèh basis data luwa atawa droëneuh hana geubri idin keu neupeubarô akun luwa droëneuh',
@@ -572,65 +588,87 @@ Bèk tuwo neuatô [[Special:Preferences|geunalak {{SITENAME}}]] droëneuh.',
 'userloginnocreate' => 'Tamöng',
 'logout' => 'Teubiët',
 'userlogout' => 'Teubiët',
-'notloggedin' => 'Hana tamong lom',
+'notloggedin' => 'Hana tamöng lom',
 'userlogin-noaccount' => 'Goh lom neudapeuta?',
 'userlogin-joinproject' => 'Neugabông ngön {{SITENAME}}',
-'nologin' => "Goh na nan ureuëng nguy? '''$1'''.",
+'nologin' => 'Goh lom neudapeuta? $1.',
 'nologinlink' => 'Peudapeuta nan barô',
 'createaccount' => 'Peudapeuta nan barô',
-'gotaccount' => "Ka lheuëh neudapeuta? '''$1'''.",
-'gotaccountlink' => 'Tamong',
-'userlogin-resetlink' => 'Tuwo ngon rincian tamong Droeneuh?',
+'gotaccount' => 'Ka lheuëh neudapeuta? $1.',
+'gotaccountlink' => 'Tamöng',
+'userlogin-resetlink' => 'Tuwo rincian tamöng droëneuh?',
 'userlogin-resetpassword-link' => 'Tuwö lageuëm rahsia?',
-'helplogin-url' => 'Help:Tamong',
+'helplogin-url' => 'Help:Tamöng',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Bantu tamöng]]',
-'userlogin-loggedin' => 'Droëneuh ka neutamöng seubagoë $1. Neunguy blangko di yup keu neutamöng seubagoë ureuëng nguy la’én',
+'userlogin-loggedin' => 'Droëneuh ka neutamöng seubagoë $1. Neungui blangko di yup keu neutamöng seubagoë ureuëng ngui la’én',
 'userlogin-createanother' => 'Peudapeuta nan barô',
 'createacct-join' => 'Neupasoë keutrangan bhaih droëneuh di yup nyoë',
-'createacct-another-join' => 'Neupasoë keutrangan nan ureuëng nguy barô di yup nyoë',
+'createacct-another-join' => 'Neupasoë keutrangan nan ureuëng ngui barô di yup nyoë',
 'createacct-emailrequired' => 'Alamat surat-e',
 'createacct-emailoptional' => 'Alamat surat-e (hana wajéb)',
 'createacct-email-ph' => 'Neupasoë alamat surat-e droëneuh',
 'createacct-another-email-ph' => 'Pasoë alamat surat-e',
-'createaccountmail' => 'Neunguy lageuëm rahsia beurangkapeuë keu si’at nyoë. Lheuëh nyan neupeu’ét u surat-e nyang droëneuh meuh’eut',
+'createaccountmail' => 'Neungui lageuëm rahsia beurangkapeuë keu si’at nyoë. Lheuëh nyan neupeu’et u surat-e nyang droëneuh meuh’eut',
 'createacct-realname' => 'Nan aseuli (hana wajéb)',
 'createaccountreason' => 'Choë:',
 'createacct-reason' => 'Choë:',
-'createacct-reason-ph' => 'Pakön droëneuh neupeugöt nan ureuëng nguy la’én',
+'createacct-reason-ph' => 'Pakön droëneuh neupeugöt nan ureuëng ngui la’én',
 'createacct-captcha' => 'Paréksa aman',
 'createacct-imgcaptcha-ph' => "Pasoë seunurat nyang neu'eu di ateuëh",
 'createacct-submit' => 'Peudapeuta nan barô',
-'createacct-another-submit' => 'Peugöt nan ureuëng nguy la’én',
+'createacct-another-submit' => 'Peugöt nan ureuëng ngui la’én',
 'createacct-benefit-heading' => '{{SITENAME}} geupeugöt lé ureuëng lagèë droëneuh.',
 'createacct-benefit-body1' => '{{PLURAL:$1|andam}}',
 'createacct-benefit-body2' => '{{PLURAL:$1|$1 halaman}}',
 'createacct-benefit-body3' => '{{PLURAL:$1|ureuëng tuléh}} seuneulheuëh',
 'badretype' => 'Lageuëm rahsia nyang neupasoë salah.',
-'userexists' => "Nan ureuëng nguy nyang neupasoë ka na soë nguy.
+'userexists' => "Nan ureuëng ngui nyang neupasoë ka na soë ngui.
 Neupiléh nan nyang la'én.",
-'loginerror' => 'Salah bak tamong',
+'loginerror' => 'Salah bak tamöng',
 'createacct-error' => 'Peudapeuta nan barô hana meuhasé',
 'createaccounterror' => 'H‘an jeuët peudapeuta nan: $1',
-'loginsuccesstitle' => 'Meuhasé tamong',
-'loginsuccess' => "'''Droëneuh  jinoë ka neutamong di {{SITENAME}} sibagoë \"\$1\".'''",
-'nosuchuser' => 'Hana ureuëng nguy ngön nan "$1".
-Nan ureuëng nguy jipeubida harah rayek.
+'nocookiesnew' => "Nan ureueng ngui nyoe ka meupeugöt, tapi goh meutamöng.
+{{SITENAME}} jingui ''cookies'' keu peutamöng ureueng ngui.
+''Cookies'' droeneuh hana meupeuudép.
+Neupeuudép ''cookies'' dilèe, lheuh nyan neutamöng ngön nan ureueng ngui ngön lageuem rahsia droeneuh.",
+'noname' => 'Nan ureuëng ngui nyang Droënueh peutamöng hana sah.',
+'loginsuccesstitle' => 'Meuhasé tamöng',
+'loginsuccess' => "'''Droëneuh  jinoë ka neutamöng di {{SITENAME}} sibagoë \"\$1\".'''",
+'nosuchuser' => 'Hana ureuëng ngui ngön nan "$1".
+Nan ureuëng ngui jipeubida haraih rayek.
 Tulông neuparéksa keulayi neuija Droëneuh, atawa [[Special:UserLogin/signup|neudapeuta barô]].',
-'nosuchusershort' => 'Hana ureuëng nguy ngön nan "$1".
+'nosuchusershort' => 'Hana ureuëng ngui ngön nan "$1".
 Préksa keulayi neu’ija Droëneuh.',
 'nouserspecified' => 'Neupasoë nan Droëneuh.',
+'login-userblocked' => 'Ureuëng ngui nyoë ka teublokir, hana idin/hanjeut tamöng.',
 'wrongpassword' => 'Lageuëm nyang neupasoë salah. Neuci lom.',
 'wrongpasswordempty' => 'Droëneuh hana neupasoë lageuëm. Neuci lom.',
-'passwordtooshort' => "Lageuëm paléng h'an haroh na {{PLURAL:$1|1 karakter|$1 karakter}}.",
+'passwordtooshort' => "Lageuëm paléng h'an harôh na {{PLURAL:$1|1 karakter|$1 karakter}}.",
+'password-name-match' => 'Lageuëm Droeuneuh beubida nibak nan Ureuëng ngui.',
+'password-login-forbidden' => 'Ngui nan ureuëng ngui ngön lageuëm nyoë ka jitham.',
 'mailmypassword' => "Peu'ét lageuëm rahsia barô u surat-e",
 'passwordremindertitle' => 'Lageuëm seumeuntara barô keu {{SITENAME}}',
-'passwordremindertext' => 'Salah sidroë (kadang Droëneuh, ngön alamat IP $1) geulakèë lageuëm barô keu {{SITENAME}} ($4). Lageuëm si\'at keu ureuëng nguy "$2" ka geupeuna ngon ka geuato jeuet keu "$3". Meunyo nyoe nakeuh meukeusud droeneuh, droeneuh peureulee neutamong ngon neupileh lageuem baro jinoe. Lageuem siat droeneuh meung abeh lam {{PLURAL:$5|siuroe|$5 uroe}}.
-
-Meunyo ureueng la\'en nyang peugot neulakee nyoe, atawa meunyo droeneuh ka neuingat lageuem droeneuh, ngon droeneuh h\'an ek neugantoe le, droeneuh jeuet hana neupeureumeuen peusan nyoe ngon neulanjut neunguy lageuem awayneuh.',
-'noemail' => 'Hana alamat surat-e nyang teucatat keu ureuëng nguy "$1".',
-'passwordsent' => 'Lageuëm barô ka geupeu\'ét u surat-e nyang geupeudapeuta keu "$1". Neutamong teuma lheuëh neuteurimong surat-e nyan.',
-'eauthentsent' => 'Saboh surat èlèktronik keu peunyoë ka geukirém u alamat surat èlèktronik Droëneuh. Droëneuh beuneuseutöt préntah lam surat nyan keu neupeunyoë meunyo alamat nyan nakeuh beutôy atra Droëneuh. {{SITENAME}} h‘an geupeuudép surat Droëneuh meunyo langkah nyoë hana neupeulaku lom.',
+'passwordremindertext' => 'Salah sidroë (kadang Droëneuh, ngön alamat IP $1) geulakèë lageuëm barô keu {{SITENAME}} ($4). Lageuëm si\'at keu ureuëng ngui "$2" ka geupeuna ngön ka geuatô jeuet keu "$3". Meunyö nyoe nakeuh meukeusud droeneuh, droeneuh peureulèë neutamöng ngön neupiléh lageuëm barô jinoe. Lageuem siat droeneuh meung abéh lam {{PLURAL:$5|siuroe|$5 uroe}}.
+
+Meunyö ureuëng la\'én nyang peugöt neulakèë nyoe, atawa meunyö droeneuh ka neuingat lageuëm droeneuh, ngön droeneuh h\'an ék neugantoë lé, droeneuh jeuet hana neupeureumeuën peusan nyoe ngön neulanjut neungui lageuem awaineuh.',
+'noemail' => 'Hana alamat surat-e nyang teucatat keu ureuëng ngui "$1".',
+'noemailcreate' => 'Droeneuh suwah neuseudia alamt surat-e nyang jeut ngui.',
+'passwordsent' => 'Lageuëm barô ka geupeu\'et u surat-e nyang geupeudapeuta keu "$1". Neutamöng teuma lheuëh neuteurimöng surat-e nyan.',
+'eauthentsent' => 'Saboh surat-e keu peunyö ka geukirém u alamat surat-e Droëneuh. Droëneuh beuneuseutöt préntah lam surat nyan keu neupeunyö meunyö alamat nyan nakeuh beutôi atra Droëneuh. {{SITENAME}} h‘an geupeuudép surat Droëneuh meunyö langkah nyoë hana neupeubuet lom.',
+'cannotchangeemail' => 'Alamat surat-e han jeut geugantoe bak wiki nyoe.',
+'emaildisabled' => 'Situs nyoe han jeut geukirém surat-e.',
+'accountcreated' => 'Ureuëng ngui ka teupeugöt',
+'accountcreatedtext' => 'Ureuëng ngui keu [[{{ns:User}}:$1|$1]]([[{{ns:User talk}}:$1|talk]]) ka teupeugöt.',
+'createaccount-title' => 'Peugöt ureuëng ngui keu {{SITENAME}}',
+'usernamehasherror' => 'Nan ureueng ngui han jeut na tanda pageue',
+'login-throttled' => 'Droeneuh ka lé that neuujoe tamöng.
+Neuprèh $1 sigohlom neuujoe lom.',
 'loginlanguagelabel' => 'Bahsa: $1',
+'createacct-another-realname-tip' => 'Nan aseuli hana meucéh neupasoe.
+Meunyö neupasoe, euntreuk nan droëneuh nyan geupeuleumah mangat jitupeue soe nyang tuléh.',
+
+# Email sending
+'user-mail-no-addy' => 'Ujoe kirém surat-e ngön hana alamat surat-e.',
 
 # Change password dialog
 'resetpass' => 'Gantoë lageuëm rahsia',
@@ -644,36 +682,55 @@ Meunyo ureueng la\'en nyang peugot neulakee nyoe, atawa meunyo droeneuh ka neuin
 'resetpass-no-info' => "Droëneuh suwah neutamöng mangat jeuët neu'eu laman nyoë",
 'resetpass-submit-loggedin' => 'Gantoë lageuëm rahsia',
 'resetpass-submit-cancel' => 'Pubateuë',
+'resetpass-temp-password' => 'Lageuem rahsia keu siat:',
+
+# Special:PasswordReset
+'passwordreset-username' => 'Ureueng ngui:',
+'passwordreset-capture' => 'Eu hasé surat-e?',
+'passwordreset-email' => 'Alamat surat-e:',
+'passwordreset-emailtitle' => 'Teuneurang nan ureueng ngui bak {{SITENAME}}',
+
+# Special:ChangeEmail
+'changeemail' => 'Gantoe alamat surat-e',
+'changeemail-header' => 'Gantoe alamat surat-e',
+'changeemail-no-info' => "Droeneuh suwah neutamöng mangat jeuet neu'eu laman nyoe",
+'changeemail-oldemail' => 'Alamat surat-e jinoe:',
+'changeemail-newemail' => 'Alamat surat-e barô:',
+'changeemail-none' => '(hana)',
+'changeemail-password' => 'Lageuem rahsia {{SITENAME}} droeneuh:',
+'changeemail-submit' => 'Gantoe surat-e',
+'changeemail-cancel' => 'Peubateue',
 
 # Edit page toolbar
 'bold_sample' => 'Rakam teubai',
-'bold_tip' => 'Haraih teubay',
+'bold_tip' => 'Haraih teubai',
 'italic_sample' => 'Rakam singèt naseukah nyoë',
 'italic_tip' => 'Rakam singèt',
-'link_sample' => 'Nan hubông',
+'link_sample' => 'Nan peunawôt',
 'link_tip' => 'Peunawôt dalam',
-'extlink_sample' => 'http://www.example.com nan hubông',
+'extlink_sample' => 'http://www.example.com nan peunawôt',
 'extlink_tip' => 'Peunawôt luwa (neubôh http:// bak awai)',
 'headline_sample' => 'Naseukah nan',
 'headline_tip' => 'Aneuk beunagi tingkat 1',
 'nowiki_sample' => 'Bèk format naseukah nyoë',
 'nowiki_tip' => 'Bèk seutot beuntuk wiki',
 'image_tip' => 'Pasoë beureukaih',
-'media_tip' => 'Hubông beureukaih',
+'media_tip' => 'Peunawôt beureukaih',
 'sig_tip' => 'Tanda jaroë Droëneuh ngön tanda watèë',
 'hr_tip' => 'Garéh data',
 
 # Edit pages
-'summary' => 'Ehtisa:',
+'summary' => 'Éhtisa:',
 'subject' => 'Bhah/nan:',
 'minoredit' => 'Nyoë lôn andam bacut',
-'watchthis' => 'Kalön ôn nyoë',
-'savearticle' => 'Keubah ôn',
+'watchthis' => 'Kalön laman nyoë',
+'savearticle' => 'Keubah laman',
 'preview' => 'Eu dilèë',
 'showpreview' => 'Peuleumah hasé',
 'showdiff' => 'Peuleumah neuubah',
 'anoneditwarning' => 'Droëneuh   hana teudapeuta tamong. Alamat IP Droëneuh   teucatat lam tarèh (riwayat away) ôn nyoë.',
 'summary-preview' => 'Eu dilèë neuringkaih:',
+'blockedtitle' => 'Ureueng ngui geutheun',
 'blockedtext' => "'''Nan ureuëng nguy atawa alamat IP Droëneuh  ka geutheun.'''
 
 Geutheun lé $1. Dalèh jih nakeuh ''$2''.
@@ -687,78 +744,152 @@ Droëneuh   jeuët neutanyong bak $1 atawa [[{{MediaWiki:Grouppage-sysop}}|nyang
 Droëneuh   h’an jeuët neunguy alat 'Kirém surat-e ureuëng nguy nyoë' keucuali ka neupasoë alamat surat-e nyang sah di [[Special:Preferences|Geunalak]] Droëneuh ngön Droëneuh ka geutheun keu nguy nyan.
 
 Alamat IP Droëneuh nakeuh $3, ngön ID neutheun nakeuh $5. Tulông peuseureuta salah saboh atawa ban duwa beurita nyoë bak tiëp teunanyöng nyang neupeugöt.",
+'autoblockedtext' => "'''Nan ureuëng nguy atawa alamat IP Droëneuh  ka geutheun.'''
+
+Geutheun lé $1. Dalèh jih nakeuh ''$2''.
+
+* Geutheun yôh: $8
+* Neutheun maté tanggay bak: $6
+* Nyang geutheun: $7
+
+Droëneuh   jeuët neutanyong bak $1 atawa [[{{MediaWiki:Grouppage-sysop}}|nyang urôh nyang la’én]] keu peugah haba bhah nyoë.
+
+Droëneuh   h’an jeuët neunguy alat 'Kirém surat-e ureuëng nguy nyoë' keucuali ka neupasoë alamat surat-e nyang sah di [[Special:Preferences|Geunalak]] Droëneuh ngön Droëneuh ka geutheun keu nguy nyan.
+
+Alamat IP Droëneuh nakeuh $3, ngön ID neutheun nakeuh $5. Tulông peuseureuta salah saboh atawa ban duwa beurita nyoë bak tiëp teunanyöng nyang neupeugöt.",
+'blockednoreason' => 'hana dalèh nyang geubri',
+'whitelistedittext' => 'Droeneuh suwah $1 keu neuandam ôn.',
+'nosuchsectiontitle' => 'Bideueng hana geutumèe',
+'loginreqtitle' => 'Droeneuh payah neutamöng log.',
+'loginreqlink' => 'tamöng',
+'loginreqpagetext' => "Droeneuh payah $1 keu neu'eu ôn-ôn la'én.",
+'accmailtitle' => 'Lageuem rahsia ka meukirém',
 'newarticle' => '(Barô)',
-'newarticletext' => "Droëneuh   ka neuseutot u ôn nyang goh na. Keu peugöt ôn nyan, neukeutik asoë ôn di  kutak di yup nyoë (ngiëng [[{{MediaWiki:Helppage}}|ôn bantu]] keu beurita leubèh lanjut). Meunyo Droëneuh  hana neusaja ka trôk keunoë, teugon '''back''' nyang na bak layeuë.",
-'noarticletext' => 'Hana naseukah jinoë lam ôn nyoë.
+'newarticletext' => "Droëneuh ka neuseutöt peunawôt u laman nyang goh na.
+Keu neupeugöt laman nyan, neukeutik lam plôk di yup (eu [[{{MediaWiki:Helppage}}|laman beunantu]] keu haba leubèh le).
+Meunyö droëneuh trôk keunoë hana neusaja, neuteugön tèk '''back''' bak ''browser'''droëneuh.",
+'anontalkpagetext' => "----''Nyoe nakeuh ôn marit ureueng ngui nyang hana tamöng atawa hana geungui.''
+Saweub nyan, kamoe payah meukubah alamat IP-geuh keu meuparéksa. 
+Alamat IP mungkén jingui lé padum-padum droe ureueng.
+Meunyoe droeneuh ureueng nyang hana tamöng nyan, tulông [[Special:UserLogin/signup|peugöt nan ureueng ngui]] atawa [[Special:UserLogin|tamöng log]] mangat meuteugah nibak bhah nyang hana meuphôm bak uroe la'én.",
+'noarticletext' => 'Hana naseukah jinoë lam laman nyoë.
 Ji Droëneuh jeuët [[Special:Search/{{PAGENAME}}|neumita keu nan ôn nyoë]] bak ôn-ôn la’én, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} log nyang na hubôngan], atawa [{{fullurl:{{FULLPAGENAME}}|action=edit}} neu\'andam ôn nyoë]</span>.',
-'noarticletext-nopermission' => 'Hana asoë bak ôn nyoë jinoë.
-Droëneuh jeuët [[Special:Search/{{PAGENAME}}|neumita keu nan ôn nyoë]] bak ôn-ôn la\'én,
-atawa <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} neumita log nyang na meuhubông]</span>, tapi Droëneuh hana idin keu neupeugöt ôn nyoë',
+'noarticletext-nopermission' => 'Hana asoë bak laman nyoë jinoë.
+Droëneuh jeuët [[Special:Search/{{PAGENAME}}|neumita keu nan ôn nyoë]] bak laman-laman la\'én,
+atawa <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} neumita log nyang na meuhubông]</span>, tapi Droëneuh hana idin keu neupeugöt laman nyoë',
+'userpage-userdoesnotexist-view' => 'Ureueng ngui "$1" hana teudapeuta.',
 'updated' => '(Seubarô)',
 'note' => "'''Hareutoë:'''",
 'previewnote' => "'''Beu neuingat meunyo laman nyoë goh lom neukeubah!'''",
 'editing' => 'Andam $1',
+'creating' => 'Teungöh meupeugöt $1',
 'editingsection' => 'Andam $1 (bideuëng)',
+'editingcomment' => 'Andam $1 (bideuëng)',
+'storedversion' => 'Riwayat meukubah',
+'yourdiff' => 'Bida',
 'copyrightwarning' => "Beu neuingat bahwa ban mandum nyang Droëneuh   tuléh keu {{SITENAME}} geukira geupeuteubiët di yup $2 (ngiëng $1 keu leubèh jeulah). Meunyoë Droëneuh h‘an neutém teunuléh Droëneuh  ji’andam ngön jiba ho ho la’én, bèk neupasoë teunuléh Droëneuh  keunoë.<br />Droëneuh  neumeujanji chit meunyoë teunuléh nyoë nakeuh atra neutuléh keudroë, atawa neucok nibak nè nè atra umôm atawa nè bibeuëh la’én.
 '''BÈK NEUPASOË TEUNULÉH NYANG GEUPEULINDÔNG HAK KARANG NYANG HANA IDIN'''",
-'templatesused' => '{{PLURAL:$1|Templat|Templat}} nyang geunguy bak ôn nyoë:',
-'templatesusedpreview' => '{{PLURAL:$1|Templat|Templat}} nyang geunguy bak eu dilèë nyoë:',
+'templatesused' => '{{PLURAL:$1|Templat|Templates}} nyang geungui bak laman nyoë:',
+'templatesusedpreview' => '{{PLURAL:$1|Templat|Templates}} nyang geungui bak eu dilèë nyoë:',
 'template-protected' => '(geulindông)',
 'template-semiprotected' => '(siteungoh-lindông)',
-'hiddencategories' => 'Ôn nyoë nakeuh anggèëta nibak {{PLURAL:$1|1 kawan teusom |$1 kawan teusom}}:',
-'nocreatetext' => '{{SITENAME}} ka jikot bak peugöt ôn barô. Ji Droëneuh   jeuët neuriwang teuma ngön neu’andam ôn nyang ka na, atawa [[Special:UserLogin|neutamong atawa neudapeuta]].',
+'hiddencategories' => 'Laman nyoë nakeuh anggèëta nibak {{PLURAL:$1|1 kawan teusom |$1 kawan teusom}}:',
+'nocreatetext' => '{{SITENAME}} ka jiköt bak peugöt laman barô. Ji Droëneuh   jeuët neuriwang teuma ngön neu’andam laman nyang ka na, atawa [[Special:UserLogin|neutamong atawa neudapeuta]].',
+'nocreate-loggedin' => 'Droeneuh hana khut keu neupeugöt laman-laman barô.',
+'sectioneditnotsupported-title' => 'Andam bideung hana meudukông',
+'sectioneditnotsupported-text' => 'Andam bideung hana meudukông bak ôn nyoe.',
+'permissionserrors' => 'Salah khut/hak tamöng',
+'permissionserrorstext' => 'Droëneuh hana hak tamöng keu $2, muroë {{PLURAL:$1|choë|choë}} nyoë:',
 'permissionserrorstext-withaction' => 'Droëneuh hana hak tamöng keu $2, muroë {{PLURAL:$1|choë|choë}} nyoë:',
-'recreate-moveddeleted-warn' => "'''Ingat: Droëneuh neupeugöt ulang saboh ôn nyang ka tom geusampôh. ''',
-
-Neutimang-timang dilèë peuë ék patôt neupeulanjut atra nyang teungoh neu’andam.
-Nyoë pat nakeuh log seunampôh nibak ôn nyoë:",
-'moveddeleted-notice' => 'Ôn nyoë ka geusampôh.
-Log seunampôh ngon log peuninah ôn nyoë geupeuseudiya di yup nyoe keu keuneubah.',
+'recreate-moveddeleted-warn' => "'''Ingat: Droëneuh neupeugöt ulang saboh laman nyang ka tom geusampôh. ''',
+
+Neutimang-timang dilèë peuë ék patôt neupeulanjut atra nyang teungöh neu’andam.
+Nyoë pat nakeuh log seunampôh nibak laman nyoë:",
+'moveddeleted-notice' => 'Laman nyoë ka geusampôh.
+Log seunampôh ngön log pinah laman nyoë geupeuseudia di yup nyoë keu keuneubah.',
+'log-fulllog' => 'Eu ban dum ceunatat',
+'edit-hook-aborted' => "Seunampôh geupeubateuë lé kaw'ét parser.
+Hana jeuneulaih.",
+'edit-gone-missing' => 'Han jeut peubarô ôn.
+Ôn nyoe mungkén ka geusampôh.',
+'postedit-confirmation' => 'Neuandam droeneuh ka meukubah.',
+'edit-already-exists' => 'Han jeut peugöt ôn barô.
+Ôn nyoe ka lheuh na.',
 
 # Parser/template warnings
 'post-expand-template-inclusion-warning' => "'''Ingat:''' Seunipat seunaleuëk nyang neunguy rayek that.
 Ladôm seunaleuëk hana geupeurôh",
-'post-expand-template-inclusion-category' => 'Ôn ngön seunipat seunaleuëk nyang leubèh bataih',
-'post-expand-template-argument-warning' => "'''Ingat:''' On nyoe na paleng h'an saboh alasan seunaleuek nyang na sunipat ekspansi nyang raya that.
-Alasan-alasan nyan hana geupeureumeuen.",
-'post-expand-template-argument-category' => 'On ngon alasan seunaleuek nyang hana geupeureumeuen',
+'post-expand-template-inclusion-category' => 'Laman ngön seunipat seunaleuëk nyang leubèh bataih',
+'post-expand-template-argument-warning' => "'''Ingat:''' Laman nyoe na paléng h'an saboh alasan seunaleuëk nyang na sunipat èkspansi nyang raya that.
+Alasan-alasan nyan hana geupeureumeuën.",
+'post-expand-template-argument-category' => 'Laman ngön dalèh seunaleuëk nyang hana geupeureumeuën',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Han jeut peugöt nan ureueng ngui',
+'cantcreateaccount-text' => "Peuneugöt nan ureueng ngui nibak alamat IP ('''$1''') ka geutheun lé [[User:$3|$3]].
+
+Dalèh $3 nyoe nakeuh ''$2''",
 
 # History pages
-'viewpagelogs' => 'Eu log ôn nyoë',
+'viewpagelogs' => 'Eu log laman nyoë',
+'nohistory' => 'Hana riwayat neuandam awai keu ôn nyoe.',
 'currentrev' => 'Geunantoë jinoë',
 'currentrev-asof' => 'Geunantoë barô bak $1',
 'revisionasof' => 'Geunantoë tiëp $1',
 'revision-info' => 'Geunantoë tiëp $1; $2',
-'previousrevision' => '←Geunantoë sigohlomjih',
+'previousrevision' => '← Geunantoë awai',
 'nextrevision' => 'Geunantoë lheuëh nyan→',
 'currentrevisionlink' => 'Geunantoë jinoë',
 'cur' => 'jin',
-'last' => 'akhé',
+'next' => 'u keu',
+'last' => 'sigohlom',
 'page_first' => 'phôn',
 'page_last' => 'keuneulheuëh',
 'histlegend' => "Piléh duwa teuneugön radiô, lheuëh nyan teugön teuneugön ''peubandéng'' keu peubandéng seunalén. Teugön saboh tanggay keu eu seunalén ôn bak tanggay nyan.<br />(skr) = bida ngön seunalén jinoë, (akhé) = bida ngön seunalén sigohlomjih. '''u''' = andam ubeut, '''b''' = andam bot, → = andam bideuëng, ← = ehtisa keudroë",
-'history-fieldset-title' => 'Eu riwayat away',
-'history-show-deleted' => 'Nyang geusampoh mantong',
+'history-fieldset-title' => 'Eu riwayat awai',
+'history-show-deleted' => 'Nyang geusampôh mantöng',
 'histfirst' => 'paléng trép',
 'histlast' => 'paléng barô',
+'historyempty' => '(soh)',
 
 # Revision feed
+'history-feed-title' => 'Riwayat neupeupah',
+'history-feed-description' => 'Riwayat neupeupah keu ôn nyoe bak wiki',
 'history-feed-item-nocomment' => '$1 bak $2',
 
 # Revision deletion
+'rev-deleted-comment' => '(mohtasa neuandam geusampôh)',
+'rev-deleted-user' => '(nan ureueng ngui geusampôh)',
+'rev-deleted-user-contribs' => '[nan ureueng ngui atawa alamat IP geusampôh - neuandam geupeusom bak dapeuta beuneuri]',
 'rev-delundel' => 'peuleumah/peusom',
+'rev-showdeleted' => 'peudeuh',
+'revdelete-show-file-submit' => 'Nyoe',
+'revdelete-hide-comment' => 'Mohtasa neuandam',
+'revdelete-radio-same' => '(bèk neugantoe)',
+'revdelete-radio-set' => 'Deuh',
+'revdelete-radio-unset' => 'Teusom',
+'revdelete-log' => 'Dalèh:',
 'revdel-restore' => 'Gantoë seuneudeuih',
 'revdel-restore-deleted' => 'geunantoe nyang ka geusampôh',
 'revdel-restore-visible' => 'geunantoë nyang deuih',
+'pagehist' => 'Taréh laman',
+'deletedhist' => 'Taréh nyang meusampôh',
+
+# History merging
+'mergehistory-from' => 'Asai ôn:',
+'mergehistory-invalid-source' => 'Asai ôn payah nan nyang beutôi.',
+'mergehistory-reason' => 'Dalèh:',
 
 # Merge log
+'mergelog' => 'Peugabông log',
 'revertmerge' => 'Hana jadèh peugabông',
 
 # Diffs
 'history-title' => 'Riwayat geunantoë nibak "$1"',
 'lineno' => 'Baréh $1:',
 'compareselectedversions' => 'Peubandéng curak teupiléh',
-'editundo' => 'peubateuë',
+'editundo' => 'pubateuë',
+'diff-empty' => '(Hana bida)',
 'diff-multi' => '({{PLURAL:$1|Saboh|$1}} geunantoë antara nyang geupeugot le {{PLURAL:$2|sidroe|$2}} ureueng nguy hana geupeuleumah)',
 
 # Search results
@@ -767,17 +898,17 @@ Alasan-alasan nyan hana geupeureumeuen.",
 'searchresulttext' => 'Keu beurita leubèh le bhah meunita bak {{SITENAME}}, eu [[{{MediaWiki:Helppage}}|ôn beunantu]].',
 'searchsubtitle' => 'Droëneuh neumita \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|ban dum ôn nyang geupuphôn ngön "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|bandum ôn nyang teuhubông u "$1"]])',
 'searchsubtitleinvalid' => "Droëneuh neumita '''$1'''",
-'notitlematches' => 'Hana nan ôn nyang pah',
-'notextmatches' => 'Hana naseukah ôn nyang pah',
+'notitlematches' => 'Hana nan laman nyang pah',
+'notextmatches' => 'Hana naseukah laman nyang pah',
 'prevn' => '{{PLURAL:$1|$1}} sigohlomjih',
 'nextn' => '{{PLURAL:$1|$1}} lheuëh nyan',
 'prevn-title' => '$1 {{PLURAL:$1|hasé|hasé}} sigohlomjih',
 'nextn-title' => '$1 {{PLURAL:$1|hasé}} lheuëh nyan',
-'shown-title' => 'Peuleumah $1 {{PLURAL:$1|hasé}} tiëp ôn',
+'shown-title' => 'Peuleumah $1 {{PLURAL:$1|hasé}} tiëp laman',
 'viewprevnext' => 'Eu ($1 {{int:pipe-separator}} $2)($3)',
-'searchmenu-exists' => "'''Na on ngon nan \"[[:\$1]]\" bak wiki nyoe.'''",
-'searchmenu-new' => "'''Peugöt ôn \"[[:\$1]]\" bak wiki nyoë!'''",
-'searchprofile-articles' => 'Ôn asoë',
+'searchmenu-exists' => "'''Na laman ngön nan \"[[:\$1]]\" bak wiki nyoe.'''",
+'searchmenu-new' => "'''Peugöt laman \"[[:\$1]]\" bak wiki nyoë!'''",
+'searchprofile-articles' => 'Laman asoë',
 'searchprofile-project' => 'Laman Beunantu ngön Buët',
 'searchprofile-images' => 'Multimedia',
 'searchprofile-everything' => 'Ban dum',
@@ -785,12 +916,12 @@ Alasan-alasan nyan hana geupeureumeuen.",
 'searchprofile-articles-tooltip' => 'Mita bak $1',
 'searchprofile-project-tooltip' => 'Mita bak $1',
 'searchprofile-images-tooltip' => 'Mita beureukaih',
-'searchprofile-everything-tooltip' => 'Mita ban dum ôn asoë (rôh ôn marit)',
+'searchprofile-everything-tooltip' => 'Mita ban dum laman asoë (rôh ôn marit)',
 'searchprofile-advanced-tooltip' => 'Mita bak ruweuëng nan meupat-pat',
 'search-result-size' => '$1 ({{PLURAL:$2|1 narit|$2 narit}})',
 'search-result-category-size' => '{{PLURAL:$1|1 anggeeta|$1 anggeeta}} ({{PLURAL:$2|1 aneuk kawan|$2 aneuk kawan}}, {{PLURAL:$3|1 beureukaih|$3 beureukaih}})',
 'search-redirect' => '(peuninah $1)',
-'search-section' => '(beunagi $1)',
+'search-section' => '(bideuëng $1)',
 'search-suggest' => 'Kadang meukeusud Droëneuh nakeuh: $1',
 'search-interwiki-caption' => 'Buët la’én',
 'search-interwiki-default' => 'Hasé $1:',
@@ -806,34 +937,148 @@ Neubaci puphôn neulakèë droëneuh ngön ''all:'' keu jak mita ban dum asoë (
 'powersearch-ns' => 'Mita bak ruweuëng nan:',
 'powersearch-redir' => 'Dapeuta peuninah',
 'powersearch-field' => 'Mita',
+'powersearch-toggleall' => 'Ban dum',
+'powersearch-togglenone' => 'Hana',
 
 # Preferences page
 'preferences' => 'Galak',
 'mypreferences' => 'Atô',
+'prefs-edits' => 'Jumeulah neuandam:',
+'prefsnologin' => 'Hana tamöng lom',
+'changepassword' => 'Gantoe lageuem rahsia',
+'prefs-skin' => 'Kulét',
+'skin-preview' => 'Eu dilèe',
+'datedefault' => 'Hana geunalak',
+'prefs-beta' => 'Fitur bèta',
+'prefs-datetime' => 'Uroe ngön jeum',
+'prefs-user-pages' => 'Laman ureueng ngui',
+'prefs-personal' => 'Profil ureueng ngui',
 'prefs-rc' => 'Ban meuubah',
-'prefs-email' => 'Peunileh surat-e',
+'prefs-watchlist' => 'Dapeuta keunalön',
+'prefs-watchlist-days' => 'Jumeulah uroe nyang meupeudeuh bak dapeuta keunalön:',
+'prefs-watchlist-days-max' => '{{PLURAL:$1|uroë}}',
+'prefs-misc' => "La'én-la'én",
+'prefs-resetpass' => 'Gantoe lageuem rahsia',
+'prefs-changeemail' => 'Gantoe alamat surat-e',
+'prefs-setemail' => 'Pasoe alamat surat-e',
+'prefs-email' => 'Peuniléh surat-e',
+'prefs-rendering' => 'Seuneudeuh',
+'saveprefs' => 'Kubah',
+'resetprefs' => 'Peugléh neuubah nyang goh meukubah',
+'prefs-editing' => 'Neuandam',
+'rows' => 'Baréh:',
 'searchresultshead' => 'Mita',
+'resultsperpage' => 'Hasé lam saboh laman:',
+'stub-threshold-disabled' => 'Geupeumaté',
+'timezoneuseoffset' => "La'én (peuteuntèe bidajih)",
+'timezoneoffset' => 'Bida:',
+'timezoneregion-america' => 'Amirika',
+'timezoneregion-antarctica' => 'Antartika',
+'timezoneregion-atlantic' => 'Laôt Atlantik',
+'timezoneregion-europe' => 'Ierupa',
+'timezoneregion-indian' => 'Laôt India',
+'timezoneregion-pacific' => 'Laôt Pasifik',
+'allowemail' => "Peuudép surat-e nibak ureueng ngui la'én",
+'prefs-searchoptions' => 'Mita',
+'prefs-namespaces' => 'Ruweuëng nan',
+'defaultns' => 'Atawa neumita lam ruweueng nan nyoe:',
+'default' => 'meuneumat',
+'prefs-files' => 'Beureukaih',
 'youremail' => 'Surat-e:',
+'prefs-registration' => 'Watèe neudapeuta:',
 'yourrealname' => 'Nan aseuli:',
+'yourlanguage' => 'Bahsa:',
+'yournick' => 'Tanda jaroe barô:',
+'prefs-help-signature' => 'Komèntar bak ôn marit suwah neubôh "<nowiki>~~~~</nowiki>", nyang eunteuk meugantoe keu tanda jaroe droeneuh ngön watèe jinoe.',
+'badsiglength' => 'Tanda jaroe droeneuh panyang that.
+Panyangjih bèk leubèh nibak $1 {{PLURAL:$1|haraih|haraih}}.',
+'gender-unknown' => 'Hana geupeunyata',
+'gender-male' => 'Ureueng agam',
+'gender-female' => 'Ureueng inöng',
+'email' => 'Surat-e',
 'prefs-help-realname' => '* Nan aseuli hana meucéh neupasoë.
-Meunyo neupasoë, euntreuk nan Droëneuh nyan geupeuleumah mangat jitupeuë soë nyang tuléh.',
-'prefs-help-email' => 'Alamat surat-e hana meuceh na, tapi geupeureulee keu seumeugot ulang lageuem, meunyo droeneuh tuwoe lageuem.',
-'prefs-help-email-others' => "Droeneuh jeuet cit neupileh neupubiyeue ureueng la'en geupeu'et surat keu droeneuh rot surat-e rot seunambat bak on ureueng nguy atawa on marit.
-Surat-e droeneuh h'an geupeugah keu ureueng nyan.",
+Meunyö neupasoë, euntreuk nan Droëneuh nyan geupeuleumah mangat jitupeuë soë nyang tuléh.',
+'prefs-help-email' => 'Alamat surat-e hana meucéh na, tapi geupeureulèë keu seumeugöt ulang lageuem, meunyö droeneuh tuwö lageuëm.',
+'prefs-help-email-others' => "Droeneuh jeuet cit neupiléh neupubiyeuë ureuëng la'én geupeu'et surat keu droeneuh röt surat-e röt seunambat bak laman ureueng ngui atawa on mariët.
+Surat-e droeneuh h'an geupeugah keu ureuëng nyan.",
+'prefs-help-email-required' => 'Peureulèe alamat surat-e.',
+'prefs-signature' => 'Tanda jaroe',
+'prefs-dateformat' => 'Format uroe/watèe',
+'prefs-timeoffset' => 'Bida watèe',
+'prefs-advancedediting' => 'Peuniléh umom',
+'prefs-editor' => 'Ureueng andam',
+'prefs-preview' => 'Eu dilèe',
+'prefs-diffs' => 'Bida',
+'prefs-help-prefershttps' => 'Geunalak nyoe geupeudeuh watèe neutamöng lom.',
+
+# User preference: email validation using jQuery
+'email-address-validity-valid' => 'Alamat surat-e sah',
+'email-address-validity-invalid' => 'Pasoe alamat surat-e nyang sah',
+
+# User rights
+'userrights-user-editname' => 'Pasoe nan ureueng ngui:',
+'editusergroup' => 'Ubah kawan ureueng ngui',
+'editinguser' => "Gantoe khut ureueng ngui '''[[User:$1|$1]]''' $2",
+'userrights-editusergroup' => 'Ubah kawan ureueng ngui',
+'saveusergroups' => 'Ubah kawan ureueng ngui',
+'userrights-groupsmember' => 'Anggèeta nibak:',
+'userrights-reason' => 'Dalèh:',
+'userrights-no-interwiki' => "Droeneuh hana izin keu neuubah khut ureueng ngui bak wiki la'én.",
+'userrights-notallowed' => 'Droeneuh hana izin keu neutamah atawa neupeugadöh khut ureueng ngui.',
+'userrights-changeable-col' => 'Kawan nyang jeut neugantoe',
+'userrights-unchangeable-col' => 'Kawan nyang han jeut neugantoe',
 
 # Groups
+'group' => 'Kawan:',
+'group-user' => 'Ureueng-ureueng ngui',
+'group-autoconfirmed' => 'Ureueng ngui nyang meu-konfirmasi otomatis',
 'group-sysop' => 'Ureuëng urôh',
-
+'group-bureaucrat' => 'Birôkrat',
+'group-suppress' => 'Ureueng kalön',
+'group-all' => '(ban dum)',
+
+'group-user-member' => '{{GENDER:$1|ureueng ngui}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|ureueng ngui meu-konfirmasi otomatis}}',
+'group-bot-member' => '{{GENDER:$1|bot}}',
+'group-sysop-member' => '{{GENDER:$1|ureueng urôh}}',
+'group-bureaucrat-member' => '{{GENDER:$1|birôkrat}}',
+'group-suppress-member' => '{{GENDER:$1|ureueng kalön}}',
+
+'grouppage-user' => '{{ns:project}}:Ureueng ngui',
+'grouppage-autoconfirmed' => '{{ns:project}}:Ureueng ngui meu-konfirmasi otomatis',
+'grouppage-bot' => '{{ns:project}}:Bots',
 'grouppage-sysop' => '{{ns:project}}:Ureuëng urôh',
+'grouppage-bureaucrat' => '{{ns:project}}:Birôkrat',
+'grouppage-suppress' => '{{ns:project}}:Ureueng kalön',
+
+# Rights
+'right-read' => 'Beuet laman',
+'right-edit' => 'Andam laman',
+'right-createpage' => 'Peugöt laman barô (nyang kön laman marit)',
+'right-createtalk' => 'Peugöt ôn marit',
+'right-createaccount' => 'Peugöt nan ureueng ngui barô',
+'right-minoredit' => 'Bôh tanda seubagoe andam ubeut',
+'right-move' => 'Pinah laman',
+'right-move-subpages' => 'Pinah laman ngön ban dum aneuk laman',
+'right-move-rootuserpages' => 'Pinah laman ureueng ngui',
+'right-movefile' => 'Pinah beureukaih',
+'right-upload' => 'Peutamöng beureukaih',
+'right-upload_by_url' => 'Peutamöng beureukaih nibak URL',
+'right-delete' => 'Sampôh laman',
+'right-bigdelete' => 'Sampôh laman ngön ban dum riwayatjih',
+'right-browsearchive' => 'Mita laman nyang geusampôh',
 
 # Special:Log/newusers
-'newuserlogpage' => 'ureuëng nguy barô',
+'newuserlogpage' => 'Ureuëng ngui barô',
 
 # User rights log
 'rightslog' => 'Log neuubah hak peuhah',
 
 # Associated actions - in the sentence "You do not have permission to X"
+'action-read' => 'beuët laman nyoe',
 'action-edit' => 'andam laman nyoë',
+'action-createpage' => 'peugöt laman',
+'action-move' => 'Peupinah laman nyoë',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|neuubah}}',
@@ -841,13 +1086,11 @@ Surat-e droeneuh h'an geupeugah keu ureueng nyan.",
 'recentchanges' => 'Neuubah barô',
 'recentchanges-legend' => 'Peuniléh neuubah barô',
 'recentchanges-summary' => "Di yup nyoë nakeuh neuubah barô nyang na bak Wikipèdia nyoë.
-
-
-Hareutoë: (bida) = neuubah, (riwayat) = riwayat teumuléh, '''B''' = laman barô, '''u''' = neuandam ubeut, '''b''' = neuandam bot, (± ''bit'') = jumeulah asoë meutamah/meukureuëng, → = neuandam beunagi, ← = mohtasa otomatis.
+Hareutoë: (bida) = neuubah, (riwayat) = riwayat teumuléh, '''B''' = laman barô, '''u''' = neuandam ubeut, '''b''' = neuandam bot, (± ''bit'') = jeumeulah asoë meutamah/meukureuëng, → = neuandam bideuëng, ← = mohtasa otomatis.
 ----",
 'recentchanges-noresult' => 'Hana neuubah lam lheuëng watèë nyoë nyang paih ngön syarat',
-'recentchanges-feed-description' => 'Seutot neuubah barô lam wiki bak umpeuën nyoë.',
-'recentchanges-label-newpage' => 'Neuandam nyoe jipeugot on baro',
+'recentchanges-feed-description' => 'Seutöt neuubah barô lam wiki bak umpeuën nyoë.',
+'recentchanges-label-newpage' => 'Neuandam nyoë jipeugöt laman barô',
 'recentchanges-label-minor' => 'Nyoe neuandam ubeut',
 'recentchanges-label-bot' => 'Neuandam nyoe geupubuet le bot',
 'recentchanges-label-unpatrolled' => 'Neuandam nyoe goh lom geukalon',
@@ -856,8 +1099,8 @@ Hareutoë: (bida) = neuubah, (riwayat) = riwayat teumuléh, '''B''' = laman bar
 'rclistfrom' => 'Peudeuih neuubah barô yôh $1 kön',
 'rcshowhideminor' => '$1 andam bacut',
 'rcshowhidebots' => '$1 bot',
-'rcshowhideliu' => '$1 ureuëng nguy tamong',
-'rcshowhideanons' => '$1 ureuëng nguy hana nan',
+'rcshowhideliu' => '$1 ureuëng ngui tamöng',
+'rcshowhideanons' => '$1 ureuëng ngui hana nan',
 'rcshowhidepatr' => '$1 andam teurunda',
 'rcshowhidemine' => '$1 atra lôn andam',
 'rclinks' => 'Peudeuih $1 neuubah barô lam $2 uroë nyoë<br />$3',
@@ -868,47 +1111,99 @@ Hareutoë: (bida) = neuubah, (riwayat) = riwayat teumuléh, '''B''' = laman bar
 'minoreditletter' => 'b',
 'newpageletter' => 'B',
 'boteditletter' => 'b',
+'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|ureueng kalön|ureueng kalön}}]',
+'rc_categories_any' => 'Pue-pue mantöng',
+'rc-change-size-new' => '$1 {{PLURAL:$1|bita|bita}} lheuh meuandam',
+'newsectionsummary' => '/* $1 */ bideung barô',
 'rc-enhanced-expand' => 'Peuleumah rincian',
 'rc-enhanced-hide' => 'Peusom rincian',
+'rc-old-title' => 'sigohlom nyan geupeugöt "$1"',
 
 # Recent changes linked
-'recentchangeslinked' => 'Neuubah meuhubông',
+'recentchangeslinked' => "Neuubah meukaw'èt",
 'recentchangeslinked-feed' => 'Neuubah meuhubông',
 'recentchangeslinked-toolbox' => "Neuubah teukaw'èt",
-'recentchangeslinked-title' => 'Neuubah nyang meuhubông ngön $1',
+'recentchangeslinked-title' => "Neuubah nyang meukaw'èt ngön $1",
 'recentchangeslinked-summary' => "Nyoë nakeuh dapeuta neuubah nyang geupeugèt ban-ban nyoë keu on-on nyang meuhubông nibak ôn ka kusuih (atawa keu anggèëta kawan kusuih).
 Ôn-ôn bak [[Special:Watchlist|keunalon droeneuh]] geucitak '''teubay'''.",
-'recentchangeslinked-page' => 'Nan ôn:',
-'recentchangeslinked-to' => 'Peuleumah neu’ubah nibak ôn-ôn nyang meusambông ngön ôn nyang geubri',
+'recentchangeslinked-page' => 'Nan laman:',
+'recentchangeslinked-to' => 'Peuleumah neuubah nibak laman-laman nyang mupawôt ngön laman nyang geubri',
 
 # Upload
-'upload' => 'Peutamong beureukaih',
-'uploadbtn' => 'Peutamong beureukah',
+'upload' => 'Peutamöng beureukaih',
+'uploadbtn' => 'Peutamong beureukaih',
+'reuploaddesc' => 'Riwang u laman peutamöng',
+'uploadnologin' => 'Hana lom meutamöng',
+'uploadnologintext' => 'Droeneuh suwah $1 keu neupeutamöng beureukaih.',
+'uploadlog' => 'ceunatat peutamöng',
 'uploadlogpage' => 'Log peutamöng',
+'uploadlogpagetext' => 'Nyoe nakeuh dapeuta peutamöng barô.
+Eu [[Special:NewFiles|galeri beureukaih barô]] keu seuneudeuh barô.',
+'filename' => 'Nan beureukaih',
 'filedesc' => 'Ehtisa',
+'fileuploadsummary' => 'Éhtisa:',
+'filesource' => 'Nè',
+'uploadedfiles' => 'Beureukaih nyang meupeutamöng',
+'minlength1' => 'Nan beureukaih beuna saboh haraih.',
+'illegalfilename' => 'Nan beureukaih "$1" meuasoe seunurat nyang han jeut na bak nan. Tulông gantoe nan nyan sigohlom neupeutamöng lom.',
+'filename-toolong' => 'Nan beureukaih han jeut leubèh nibak 240 bita.',
+'badfilename' => 'Nan beureukaih ka meugantoe keu "$1".',
+'empty-file' => 'Beureukaih nyang neupeutamöng soh.',
+'file-too-large' => 'Beureukaih nyang neupeutamöng rayek that.',
+'filename-tooshort' => 'Nan beureukaih paneuk that.',
+'filetype-banned' => 'Jeunèh beureukaih nyoe geutheun.',
+'illegal-filename' => 'Nan beureukaih han jeut lagèe nyoe.',
+'savefile' => 'Kubah beureukaih',
 'uploadedimage' => 'peutamöng "[[$1]]"',
+'overwroteimage' => 'peutamöng vèrsi barô "[[$1]]"',
+'upload-source' => 'Asai beureukaih',
+'sourcefilename' => 'Asai nan beureukaih:',
+'sourceurl' => 'Asai URL:',
+'upload-maxfilesize' => 'Paléng rayek beureukaih: $1',
+'upload-description' => 'Teuneurang beureukaih',
+'watchthisupload' => 'Kalön beureukaih nyoe',
+'upload-success-subj' => 'Ka meupeutamöng',
+
+# img_auth script messages
+'img-auth-nofile' => 'Hana beureukaih "$1".',
 
-'license' => 'Jeuneh lisensi:',
-'license-header' => 'Jeuneh lisensi',
+'license' => 'Jeunèh lisensi:',
+'license-header' => 'Jeunèh lisensi',
 
 # Special:ListFiles
+'imgfile' => 'beureukaih',
 'listfiles' => 'Dapeuta beureukah',
+'listfiles_thumb' => 'Beuntuk ubeut',
+'listfiles_date' => 'Uroe',
+'listfiles_name' => 'Nan',
+'listfiles_user' => 'Ureueng ngui',
+'listfiles_size' => 'Rayek',
+'listfiles_description' => 'Teuneurang',
+'listfiles_count' => 'Vèrsi',
+'listfiles-show-all' => 'Peurôh vèrsi awai gamba',
+'listfiles-latestversion' => 'Vèrsi jinoe',
+'listfiles-latestversion-yes' => 'Nyoe',
+'listfiles-latestversion-no' => 'Kön',
 
 # File description page
 'file-anchor-link' => 'Beureukaih',
 'filehist' => 'Riwayat beureukaih',
 'filehist-help' => "Neuteugon bak uroë buleuën/watèë keu neu'eu beureukaih nyoë ‘oh watèë nyan.",
+'filehist-deleteall' => 'sampôh ban dum',
+'filehist-deleteone' => 'sampôh',
 'filehist-revert' => 'peuriwang',
 'filehist-current' => 'jinoë hat',
 'filehist-datetime' => 'Uroë buleuën/Watèë',
 'filehist-thumb' => 'Beuntuk ubeut',
 'filehist-thumbtext' => 'Beuntuk ubeut keu seunalén tiëp $1',
+'filehist-nothumb' => 'Hana beuntuk ubeut',
 'filehist-user' => 'Ureuëng ngui',
 'filehist-dimensions' => 'Dimènsi',
 'filehist-filesize' => 'Rayek beureukah',
 'filehist-comment' => "Seuneu'ôt",
+'filehist-missing' => 'Beureukaih hana meutumèe',
 'imagelinks' => 'Seuneungui beureukaih',
-'linkstoimage' => 'Ôn di yup nyoë na {{PLURAL:$1|hubông|$1 hubông}} u beureukah nyoë:',
+'linkstoimage' => '{{PLURAL:$1|laman}} di yup nyoë mupawôt u beureukaih nyoë:',
 'nolinkstoimage' => 'Hana laman nyang na meupawôt u beureukaih nyoë.',
 'sharedupload' => 'Beureukah nyoë dari $1 ngön kadang geunguy lé buët-buët la’én.',
 'sharedupload-desc-here' => "Beureukaih nyoe nejih nibak $1 ngon kadang geunguy le proyek-proyek la'en.
@@ -922,10 +1217,10 @@ Teuneurang bak [$2 on teuneurangjih] geupeuleumah di yup nyoe.",
 'listredirects' => 'Dapeuta peuninah',
 
 # Unused templates
-'unusedtemplates' => 'Templat nyang hana geunguy',
+'unusedtemplates' => 'Templat nyang hana geungui',
 
 # Random page
-'randompage' => 'Ôn beurangkari',
+'randompage' => 'Laman baranggari',
 
 # Random redirect
 'randomredirect' => 'Peuninah saban sakri',
@@ -937,7 +1232,7 @@ Teuneurang bak [$2 on teuneurangjih] geupeuleumah di yup nyoe.",
 
 'brokenredirects' => 'Peuninah reulöh',
 
-'withoutinterwiki' => 'Ôn tan na hubông bahsa',
+'withoutinterwiki' => 'Laman tan na hubông bahsa',
 
 'fewestrevisions' => 'Teunuléh ngön neu’ubah paléng dit',
 
@@ -945,32 +1240,36 @@ Teuneurang bak [$2 on teuneurangjih] geupeuleumah di yup nyoe.",
 'nbytes' => '$1 {{PLURAL:$1|bit|bit}}',
 'nlinks' => '$1 {{PLURAL:$1|hubông|hubông}}',
 'nmembers' => '$1 {{PLURAL:$1|asoë|asoë}}',
-'lonelypages' => 'Ôn tan hubông balék',
-'uncategorizedpages' => 'Ôn nyang hana rôh lam kawan',
-'uncategorizedcategories' => 'Kawan nyang hana rôh lam kawan',
-'uncategorizedimages' => 'Beureukah nyang hana rôh lam kawan',
-'uncategorizedtemplates' => 'Templat nyang hana rôh lam kawan',
-'unusedcategories' => 'Kawan nyang hana geunguy',
-'unusedimages' => 'Beureukah nyang hana geunguy',
-'wantedcategories' => 'Kawan nyang geuhawa',
-'wantedpages' => 'Ôn nyang geuh‘eut',
-'mostlinked' => 'Ôn nyang paléng kayém geusaweuë',
-'mostlinkedcategories' => 'Kawan nyang paléng kayém geunguy',
-'mostlinkedtemplates' => 'Templat nyang paléng kayém geunguy',
+'lonelypages' => 'Laman tan hubông balék',
+'uncategorizedpages' => 'Laman hana kawan',
+'uncategorizedcategories' => 'Kawan hana kawan',
+'uncategorizedimages' => 'Beureukaih hana kawan',
+'uncategorizedtemplates' => 'Seunaleuëk hana kawan',
+'unusedcategories' => 'Kawan hana geungui',
+'unusedimages' => 'Beureukaih hana geungui',
+'popularpages' => 'Laman jithèë',
+'wantedcategories' => "Kawan geuh'eut",
+'wantedpages' => 'Laman geuh‘eut',
+'wantedpages-badtitle' => 'Nan hana sah lam kawan hasé: $1',
+'wantedfiles' => "Beureukaih nyang geumeuh'eut",
+'mostlinked' => 'Laman nyang paléng kayém geutuju',
+'mostlinkedcategories' => 'Kawan nyang paléng kayém geutuju',
+'mostlinkedtemplates' => 'Templat nyang paléng kayém geutuju',
 'mostcategories' => 'Teunuléh ngön kawan paléng le',
 'mostimages' => 'Beureukah nyang paléng kayém geunguy',
 'mostrevisions' => 'Teunuléh ngön neu’ubah paléng le',
-'prefixindex' => 'Ban dum ôn ngön haraih away',
-'shortpages' => 'Ôn paneuk',
-'longpages' => 'Ôn panyang',
-'deadendpages' => 'Ôn buntu',
-'protectedpages' => 'Ôn nyang geulindông',
-'listusers' => 'Dapeuta ureuëng nguy',
+'prefixindex' => 'Ban dum laman ngön haraih awai',
+'shortpages' => 'Laman paneuk',
+'longpages' => 'Laman panyang',
+'deadendpages' => 'Laman buntu',
+'protectedpages' => 'Laman nyang geulindông',
+'listusers' => 'Dapeuta ureuëng ngui',
 'usercreated' => '{{GENDER:$3|Geupeugot}} bak $1 poh $2',
-'newpages' => 'Ôn barô',
-'ancientpages' => 'Teunuléh away',
-'move' => 'Peupinah',
-'movethispage' => 'Peupinah ôn nyoë',
+'newpages' => 'Laman barô',
+'newpages-username' => 'Ureuëng ngui:',
+'ancientpages' => 'Laman paléng awai',
+'move' => 'Pupinah',
+'movethispage' => 'Pupinah laman nyoë',
 'pager-newer-n' => '{{PLURAL:$1|1 leubèh barô |$1 leubèh barô}}',
 'pager-older-n' => '{{PLURAL:$1|1 leubèh awai|$1 leubèh awai}}',
 
@@ -986,29 +1285,82 @@ Teuneurang bak [$2 on teuneurangjih] geupeuleumah di yup nyoe.",
 'all-logs-page' => 'Ban dum log umom',
 
 # Special:AllPages
-'allpages' => 'Dapeuta ôn',
+'allpages' => 'Ban dum laman',
 'alphaindexline' => '$1 u $2',
-'nextpage' => 'Ôn lheuëh nyan ($1)',
-'prevpage' => 'Ôn sigohlomjih ($1)',
-'allpagesfrom' => 'Peuleumah ôn peuphôn nibak:',
-'allpagesto' => 'Peuleumah ôn geupeuakhé bak:',
+'nextpage' => 'Laman lheuëh nyan ($1)',
+'prevpage' => 'Laman sigohlomjih ($1)',
+'allpagesfrom' => 'Peuleumah laman peuphôn nibak:',
+'allpagesto' => 'Peuleumah laman geupeuakhé bak:',
 'allarticles' => 'Dapeuta teunuléh',
+'allpagesprev' => 'U likôt',
+'allpagesnext' => 'U keue',
 'allpagessubmit' => 'Mita',
-'allpagesprefix' => 'Peuleumah ôn ngön harah phôn:',
+'allpagesprefix' => 'Peuleumah laman ngön harah phôn:',
+'allpages-hide-redirects' => 'Peusom peuninah',
 
 # Special:Categories
 'categories' => 'Dapeuta kawan',
+'special-categories-sort-count' => 'atôe meunurôt jumeulah',
+'special-categories-sort-abc' => 'atôe meunurôt seunurat',
+
+# Special:DeletedContributions
+'deletedcontributions' => 'Beuneuri nyang geusampôh',
+'deletedcontributions-title' => 'Beuneuri nyang geusampôh',
+'sp-deletedcontributions-contribs' => 'beuneuri',
 
 # Special:LinkSearch
 'linksearch' => 'Mita seuneumat luwa',
+'linksearch-pat' => 'Pola mita:',
+'linksearch-ns' => 'Ruweueng nan:',
 'linksearch-ok' => 'Mita',
 'linksearch-line' => '$1 meupawôt nibak $2',
 
+# Special:ListUsers
+'listusersfrom' => 'Peuleumah ureueng ngui nyang neuawai ngön:',
+'listusers-submit' => 'Peuleumah',
+'listusers-noresult' => 'Hana ureueng ngui nyang meutumèe.',
+'listusers-blocked' => '(geutheun)',
+
+# Special:ActiveUsers
+'activeusers' => 'Dapeuta ureueng ngui udép',
+'activeusers-intro' => 'Nyoe nakeuh dapeuta ureueng ngui nyang na geuandam $1 {{PLURAL:$1|uroe|uroe}} u likôt.',
+'activeusers-count' => '$1 {{PLURAL:$1|buet|buet}} lam {{PLURAL:$3|uroe|$3 uroe}} u likôt',
+'activeusers-from' => 'Peuleumah ureueng ngui nyang neuawai ngön:',
+'activeusers-hidebots' => 'Peusom bot',
+'activeusers-hidesysops' => 'Peusom ureueng urôh',
+'activeusers-noresult' => 'Hana ureueng ngui nyang meutumèe.',
+
 # Special:ListGroupRights
+'listgrouprights' => 'Dapeuta khut ureueng ngui',
+'listgrouprights-key' => 'Teuneurang:
+* <span class="listgrouprights-granted">Khut nyang geubri</span>
+* <span class="listgrouprights-revoked">Khut nyang hana geubri</span>',
+'listgrouprights-group' => 'Kawan',
+'listgrouprights-rights' => 'Khut',
+'listgrouprights-helppage' => 'Beunantu:Khut kawan',
 'listgrouprights-members' => '(dapeuta anggèëta)',
+'listgrouprights-addgroup' => 'Tamah {{PLURAL:$2|kawan|kawan}}: $1',
+'listgrouprights-removegroup' => 'Sampôh {{PLURAL:$2|kawan|kawan}}: $1',
+'listgrouprights-addgroup-all' => 'Tamah ban dum kawan',
+'listgrouprights-removegroup-all' => 'Sampôh ban dum kawan',
 
 # Email user
-'emailuser' => 'Surat-e ureuëng nguy',
+'emailuser' => 'Surat-e ureuëng ngui',
+'emailuser-title-target' => "Peu'ét surat-e keu {{GENDER:$1|ureuëng ngui}} nyoë",
+'emailuser-title-notarget' => "Peu'ét surat-e",
+'emailpage' => "Peu'ét surat-e keu ureuëng ngui",
+'emailusername' => 'Ureueng ngui:',
+'emailusernamesubmit' => 'Kirém',
+'email-legend' => "Kirém surat-e keu ureueng ngui {{SITENAME}} la'én",
+'emailfrom' => 'Ureueng kirém:',
+'emailto' => 'Ureueng teurimöng:',
+'emailsubject' => 'Bhah:',
+'emailmessage' => 'Peusan:',
+'emailsend' => 'Kirém',
+'emailccme' => 'Kubah saboh seunalén surat-e lôn.',
+'emailccsubject' => 'Salén peusan droeneuh keu $1: $2',
+'emailsent' => 'Surat-e meukirém',
+'emailsenttext' => 'Surat-e droeneuh ka meukirém.',
 
 # Watchlist
 'watchlist' => 'Dapeuta keunalön',
@@ -1028,12 +1380,12 @@ Teuneurang bak [$2 on teuneurangjih] geupeuleumah di yup nyoe.",
 'unwatching' => 'Hana kalön...',
 
 # Delete
-'deletepage' => 'Sampôh ôn',
-'historywarning' => 'Ingat: Ôn nyang hawa neusampôh na riwayat:',
-'confirmdeletetext' => 'Droëneuh neuk neusampôh ôn atawa beureukah nyoë keu sabé. Meunan cit ban mandum riwayatjih nibak basis data. Neupeupaseuti meunyo Droëneuh cit keubiët meung neusampôh, neutupeuë ban mandum akébatjih, ngön peuë nyang neupeulaku nyoë nakeuh meunurôt [[{{MediaWiki:Policy-url}}|kebijakan{{SITENAME}}]].',
+'deletepage' => 'Sampôh laman',
+'historywarning' => "'''Peuneugah:''' Laman nyang keumeung neusampôh na riwayat ngön kureuëng leubèh $1 {{PLURAL:$1|geunantoë}}:",
+'confirmdeletetext' => 'Droëneuh neuk neusampôh laman atawa beureukaih nyoë keu sabé. Meunan cit ban mandum riwayatjih nibak basis data. Neupeupaseuti meunyo Droëneuh cit keubiët meung neusampôh, neutupeuë ban mandum akébatjih, ngön peuë nyang neupeulaku nyoë nakeuh meunurôt [[{{MediaWiki:Policy-url}}|kebijakan{{SITENAME}}]].',
 'actioncomplete' => 'Seuleusoë',
-'actionfailed' => 'Hana meuhase',
-'deletedtext' => '"$1" ka geusampôh. Eu $2 keu log paléng barô bak ôn nyang ka geusampôh.',
+'actionfailed' => 'Hana meuhasé',
+'deletedtext' => '"$1" ka geusampôh. Eu $2 keu log paléng barô bak laman nyang ka geusampôh.',
 'dellogpage' => 'Log seunampôh',
 'deletecomment' => 'Choë:',
 'deleteotherreason' => 'Nyang la’én/choë la’én:',
@@ -1055,12 +1407,14 @@ Teuneurang bak [$2 on teuneurangjih] geupeuleumah di yup nyoe.",
 'protect-locked-access' => "Nan dapeuta Droëneuh hana hak keu jak gantoë tingkat lindông ôn. Nyoë pat nakeuh konfigurasi atra jinoë keu ôn '''$1''':",
 'protect-cascadeon' => 'Ôn nyoë teungöh geulindông kareuna geupeuseureuta lam {{PLURAL:$1|ôn|ôn-ôn}} nyoë nyang ka geulindông ngön peuniléh lindông meuturôt geupeuudép.
 Droëneuh jeuët neugantoë tingkat lindông keu ôn nyoë, tapi nyan hana peungarôh keu lindông meuturôt.',
-'protect-default' => 'Peuidin ban dum ureuëng nguy',
-'protect-fallback' => 'Peureulèë hak peuhah "$1"',
-'protect-level-autoconfirmed' => 'Theun ureuëng nguy barô ngön hana teudapeuta',
+'protect-default' => 'Peuidin ban dum ureuëng ngui',
+'protect-fallback' => 'Peuidin ureuëng ngui ngön idin "$1" mantöng',
+'protect-level-autoconfirmed' => 'Peuidin ureuëng ngui nyang teudapeuta keudroë mantöng',
 'protect-level-sysop' => 'Peuidin ureuëng urôh mantöng',
 'protect-summary-cascade' => 'riti',
 'protect-expiring' => 'maté tanggay $1 (UTC)',
+'protect-expiring-local' => 'maté tanggai $1',
+'protect-expiry-indefinite' => 'sabé',
 'protect-cascade' => 'Peulindông ban mandum ôn nyang rôh lam ôn nyoë (lindông meuturôt).',
 'protect-cantedit' => 'Droëneuh h‘an jeuët neu’ubah tingkat lindông ôn nyoë kareuna Droëneuh hana hak keu neupeulaku nyan.',
 'protect-expiry-options' => '1 jeum:1 hour,1 uroë:1 day,1 minggu:1 week,2 minggu:2 weeks,1 buleuën:1 month,3 buleuën:3 months,6 buleuën:6 months,1 thôn:1 year,sabé:infinite',
@@ -1080,8 +1434,8 @@ Droëneuh jeuët neugantoë tingkat lindông keu ôn nyoë, tapi nyan hana peung
 'blanknamespace' => '(Keuë)',
 
 # Contributions
-'contributions' => 'Beuneuri {{GENDER:$1|ureuëng nguy}}',
-'contributions-title' => 'Beuneuri ureuëng nguy keu $1',
+'contributions' => 'Beuneuri {{GENDER:$1|ureuëng ngui}}',
+'contributions-title' => 'Beuneuri ureuëng ngui keu $1',
 'mycontris' => 'Beuneuri',
 'contribsub2' => 'Keu {{GENDER:$3|$1}} ($2)',
 'uctop' => '(jinoë)',
@@ -1095,32 +1449,32 @@ Droëneuh jeuët neugantoë tingkat lindông keu ôn nyoë, tapi nyan hana peung
 'sp-contributions-logs' => 'log',
 'sp-contributions-talk' => 'marit',
 'sp-contributions-search' => 'Mita soë nyang tuléh',
-'sp-contributions-username' => 'Alamat IP atawa nan ureuëng nguy:',
+'sp-contributions-username' => 'Alamat IP atawa nan ureuëng ngui:',
 'sp-contributions-toponly' => 'Peuleumah geunantoe nyang baro mantong',
 'sp-contributions-submit' => 'Mita',
 
 # What links here
 'whatlinkshere' => 'Peunawôt balék',
-'whatlinkshere-title' => 'Ôn nyang na neuhubông u $1',
-'whatlinkshere-page' => 'Ôn:',
+'whatlinkshere-title' => 'Laman nyang mupawôt u $1',
+'whatlinkshere-page' => 'Laman:',
 'linkshere' => "Laman-laman nyoë meupawôt u '''[[:$1]]''':",
 'nolinkshere' => "Hana halaman nyang teukaw'et u '''[[:$1]]'''.",
-'isredirect' => 'ôn peupinah',
+'isredirect' => 'laman peuninah',
 'istemplate' => 'ngön seunaleuëk',
-'isimage' => 'hubông beureukaih',
+'isimage' => 'peunawôt beureukaih',
 'whatlinkshere-prev' => '$1 {{PLURAL:$1|sigohlomjih|sigohlomjih}}',
 'whatlinkshere-next' => '$1 {{PLURAL:$1|lheuëh nyan|lheuëh nyan}}',
 'whatlinkshere-links' => '← peunawôt',
 'whatlinkshere-hideredirs' => '$1 peuninah',
 'whatlinkshere-hidetrans' => '$1 transklusi',
 'whatlinkshere-hidelinks' => '$1 peunawôt',
-'whatlinkshere-hideimages' => '$1 seuneumat beureukaih',
+'whatlinkshere-hideimages' => '$1 peunawôt beureukaih',
 'whatlinkshere-filters' => 'Saréng',
 
 # Block/unblock
-'blockip' => 'Theun ureuëng nguy',
+'blockip' => 'Theun ureuëng ngui',
 'ipboptions' => '2 jeum:2 hours,1 uroë:1 day,3 uroë:3 days,1 minggu:1 week,2 minggu:2 weeks,1 buleuën:1 month,3 buleuën:3 months,6 buleuën:6 months,1 thôn:1 year,sabé:infinite',
-'ipblocklist' => 'Ureuëng nguy teutheun',
+'ipblocklist' => 'Ureuëng ngui teutheun',
 'ipblocklist-submit' => 'Mita',
 'blocklink' => 'theun',
 'unblocklink' => 'peugadöh theun',
@@ -1143,10 +1497,10 @@ Nyoë jeuët geupeuakébat neu’ubah nyang h’an neuduga ngön kreuëh ngön b
 *Droëneuh hana neubôh tanda cunténg bak kutak di yup nyoë
 
 Lam masalah nyoë, meunyo neuhawa, Droëneuh jeuët neupeupinah atawa neupeugabông ôn keudroë.",
-'movearticle' => 'Peupinah ôn:',
+'movearticle' => 'Peupinah laman:',
 'newtitle' => 'U nan barô:',
-'move-watch' => 'Kalön ôn nyoë',
-'movepagebtn' => 'Peupinah ôn',
+'move-watch' => 'Kalön laman nyoë',
+'movepagebtn' => 'Peupinah laman',
 'pagemovedsub' => 'Peupinah meuhasé',
 'movepage-moved' => '\'\'\'"$1" ka geupeupinah u "$2".\'\'\'',
 'articleexists' => 'Ôn ngön nan nyan ka na atawa nan nyang neupiléh hana sah. Neupiléh nan la’én.',
@@ -1158,7 +1512,7 @@ Lam masalah nyoë, meunyo neuhawa, Droëneuh jeuët neupeupinah atawa neupeugab
 'revertmove' => 'peuriwang',
 
 # Export
-'export' => 'Èkspor ôn',
+'export' => 'Peuteubiët laman',
 
 # Namespace 8 related
 'allmessages' => 'Peusan sistem',
@@ -1173,62 +1527,63 @@ Lam masalah nyoë, meunyo neuhawa, Droëneuh jeuët neupeupinah atawa neupeugab
 'importlogpage' => 'Log impor',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage' => 'Ôn ureuëng nguy Droëneuh',
-'tooltip-pt-mytalk' => 'Ôn marit Droëneuh',
+'tooltip-pt-userpage' => 'Laman ureuëng ngui droëneuh',
+'tooltip-pt-mytalk' => 'Laman marit droëneuh',
 'tooltip-pt-preferences' => 'Geunalak',
 'tooltip-pt-watchlist' => 'Dapeuta laman nyang lônkalön',
 'tooltip-pt-mycontris' => 'Dapeuta beuneuri Droëneuh',
 'tooltip-pt-login' => 'Droëneuh geupadan keu tamong log, bah pih nyan hana geupeuwajéb.',
 'tooltip-pt-logout' => 'Teubiët',
-'tooltip-ca-talk' => 'Marit ôn asoë',
+'tooltip-ca-talk' => 'Marit laman asoë',
 'tooltip-ca-edit' => 'Droëneuh jeuët neuandam laman nyoë. Neungui tumbôi eu dilèë sigoh neukeubah.',
 'tooltip-ca-addsection' => 'Puphôn beunagi barô',
-'tooltip-ca-viewsource' => 'Ôn nyoë geupeulindông.
-Droëneuh jeuët neu’eu nèjih.',
-'tooltip-ca-history' => 'Seunalén awai nibak ôn nyoë',
-'tooltip-ca-protect' => 'Peulindông ôn nyoë',
-'tooltip-ca-delete' => 'Sampôh ôn nyoë',
-'tooltip-ca-move' => 'Peupinah ôn nyoë',
-'tooltip-ca-watch' => 'Peutamah ôn nyoë u dapeuta kalön Droëneuh',
-'tooltip-ca-unwatch' => 'Sampôh ôn nyoë nibak dapeuta keunalön Droëneuh',
+'tooltip-ca-viewsource' => 'Laman nyoë geulindông.
+Droëneuh jeuët neu’eu nèjih mantöng.',
+'tooltip-ca-history' => 'Geunantoë awai nibak laman nyoë',
+'tooltip-ca-protect' => 'Peulindông laman nyoë',
+'tooltip-ca-delete' => 'Sampôh laman nyoë',
+'tooltip-ca-move' => 'Pupinah laman nyoë',
+'tooltip-ca-watch' => 'Tamah laman nyoë u dapeuta kalön droëneuh',
+'tooltip-ca-unwatch' => 'Sampôh laman nyoë nibak dapeuta kalön droëneuh',
 'tooltip-search' => 'Mita {{SITENAME}}',
-'tooltip-search-go' => 'Mita saboh ôn ngon nan nyang peureuséh lagèë nyoë meunyo na',
-'tooltip-search-fulltext' => 'Mita ôn nyang na asoë lagèë nyoë',
+'tooltip-search-go' => 'Mita saboh laman ngon nan nyang peureuséh lagèë nyoë meunyo na',
+'tooltip-search-fulltext' => 'Mita laman nyang na asoë lagèë nyoë',
 'tooltip-p-logo' => 'Saweuë ôn keuë',
-'tooltip-n-mainpage' => 'Jak u ôn keuë',
+'tooltip-n-mainpage' => 'Saweuë ôn keuë',
 'tooltip-n-mainpage-description' => 'Saweuë ôn keuë',
 'tooltip-n-portal' => 'Bhaih buët, peuë nyang jeuët neupubuët, pat keu mita sipeuë hai',
 'tooltip-n-currentevents' => 'Mita haba barô',
 'tooltip-n-recentchanges' => 'Dapeuta neuubah barô lam wiki.',
-'tooltip-n-randompage' => 'Peuleumah ôn beurangkari',
+'tooltip-n-randompage' => 'Peudeuih laman baranggari',
 'tooltip-n-help' => 'Bak mita bantu.',
 'tooltip-t-whatlinkshere' => 'Dapeuta ban dum laman wiki nyang mupawôt keunoë',
 'tooltip-t-recentchangeslinked' => 'Neuubah barô lam laman nyang meupawôt nibak laman nyoë',
-'tooltip-feed-rss' => 'Umpeuën RSS keu ôn nyoë',
+'tooltip-feed-rss' => 'Umpeuën RSS keu laman nyoë',
 'tooltip-feed-atom' => 'Umpeuën Atom keu laman nyoë',
-'tooltip-t-contributions' => 'Eu dapeuta nyang ka geutuléh lé ureuëng nguy nyoë',
-'tooltip-t-emailuser' => "Peu'ét surat-e keu ureuëng nguy nyoë",
+'tooltip-t-contributions' => 'Dapeuta beuneuri ureuëng ngui nyoë',
+'tooltip-t-emailuser' => "Peu'ét surat-e keu ureuëng ngui nyoë",
 'tooltip-t-upload' => 'Peutamong beureukaih',
-'tooltip-t-specialpages' => 'Dapeuta ban dum ôn kusuih',
+'tooltip-t-specialpages' => 'Dapeuta ban dum laman kusuih',
 'tooltip-t-print' => 'Seunalén rakam laman nyoë',
 'tooltip-t-permalink' => 'Peunawôt teutap keu geunantoë laman nyoë',
-'tooltip-ca-nstab-main' => 'Eu ôn asoë',
-'tooltip-ca-nstab-user' => 'Eu ôn ureuëng nguy',
-'tooltip-ca-nstab-special' => 'Nyoë nakeuh ôn kusuih nyang h’an jeuët geu’andam.',
-'tooltip-ca-nstab-project' => 'Eu ôn buët',
-'tooltip-ca-nstab-image' => 'Eu ôn beureukaih',
+'tooltip-ca-nstab-main' => 'Eu laman asoë',
+'tooltip-ca-nstab-user' => 'Eu laman ureuëng ngui',
+'tooltip-ca-nstab-special' => 'Nyoë nakeuh laman kusuih nyang h’an jeuët geuandam.',
+'tooltip-ca-nstab-project' => 'Eu laman buët',
+'tooltip-ca-nstab-image' => 'Eu laman beureukaih',
 'tooltip-ca-nstab-template' => 'Eu seunaleuëk',
-'tooltip-ca-nstab-help' => 'Eu ôn beunantu',
-'tooltip-ca-nstab-category' => 'Eu ôn kawan',
+'tooltip-ca-nstab-help' => 'Eu laman beunantu',
+'tooltip-ca-nstab-category' => 'Eu laman kawan',
 'tooltip-minoredit' => 'Bôh tanda keu nyoë sibagoë andam bacut',
 'tooltip-save' => 'Keubah neuubah Droëneuh',
-'tooltip-preview' => 'Peuleumah neuubah Droëneuh, neunguy nyoë sigohlom neukeubah!',
+'tooltip-preview' => 'Peuleumah neuubah Droëneuh, neungui nyoë sigohlom neukeubah!',
 'tooltip-diff' => 'Peuleumah neuubah nyang ka Droëneuh peugöt',
-'tooltip-compareselectedversions' => 'Ngiëng bida antara duwa curak ôn nyang jipilèh.',
-'tooltip-watch' => 'Peutamah ôn nyoë u dapeuta keunalön Droëneuh',
-'tooltip-rollback' => 'Peuriwang neu’andam-neu’andam bak ôn nyoë u nyang tuléh keuneulheuëh lam sigo teugön',
+'tooltip-compareselectedversions' => 'Ngiëng bida nibak duwa geunantoë laman nyang teupiléh',
+'tooltip-watch' => 'Tamah laman nyoë u dapeuta kalön droëneuh',
+'tooltip-rollback' => 'Peuriwang neu’andam-neu’andam bak laman nyoë u nyang tuléh keuneulheuëh lam sigo teugön',
 'tooltip-undo' => 'Peuriwang geunantoë nyoë ngön peuhah plôk neu’andam ngön cara eu dilèë. Choë jeuët geupeutamah bak plôk ehtisa.',
 'tooltip-summary' => 'Pasoë éhtisa paneuk',
+'interlanguage-link-title' => '$1 – $2',
 
 # Info page
 'pageinfo-toolboxlink' => 'Teuneurang laman',
@@ -1276,13 +1631,29 @@ Data nyang la'én eunteuk teupeusom keudroë.
 
 # External editor support
 'edit-externally' => 'Andam beureukah nyoë ngön aplikasi luwa',
-'edit-externally-help' => '(Ngiëng [//meta.wikimedia.org/wiki/Help:External_editors arah atô] keu beurita leubèh lanjôt)',
+'edit-externally-help' => '(Ngiëng [//meta.wikimedia.org/wiki/Help:External_editors peurintah atô] keu haba leubèh lanjôt)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ban dum',
 'namespacesall' => 'ban dum',
 'monthsall' => 'ban dum',
 
+# Delete conflict
+'recreate' => 'Peugöt ulang',
+
+# action=purge
+'confirm_purge_button' => 'Ka göt',
+'confirm-purge-top' => 'Sampôh peuniyôh laman nyoë?',
+
+# action=watch/unwatch
+'confirm-watch-button' => 'Ka göt',
+'confirm-watch-top' => 'Tamah laman nyoë u dapeuta keunalön droëneuh?',
+'confirm-unwatch-button' => 'Ka göt',
+'confirm-unwatch-top' => 'Sampôh laman nyoë nibak dapeuta keunalön droëneuh?',
+
+# Multipage image navigation
+'imgmultipageprev' => '← laman sigohlomjih',
+
 # Auto-summaries
 'autosumm-new' => "Geupeugöt laman ngön asoë '$1'",
 
@@ -1309,21 +1680,52 @@ Neuci peudeuih hasé biasa.',
 'fileduplicatesearch-submit' => 'Mita',
 
 # Special:SpecialPages
-'specialpages' => 'Ôn kusuih',
+'specialpages' => 'Laman kusuih',
+'specialpages-note' => '* Laman kusuih lagèë biasa.
+* <span class="mw-specialpagerestricted">Laman kusuih meuhat.</span>',
+'specialpages-group-maintenance' => 'Beuneuri thèë plara',
+'specialpages-group-other' => "La'én-la'én",
+'specialpages-group-login' => 'Tamöng / dapeuta',
+'specialpages-group-changes' => 'Neuubah barô ngön log',
+'specialpages-group-media' => 'Beuneuri thèë ngön pumasoë beureukaih',
+'specialpages-group-users' => 'Ureuëng ngui ngön khut ureuëng ngui',
+'specialpages-group-highuse' => 'Laman kayém geusaweuë',
+'specialpages-group-pages' => 'Dapeuta laman',
+'specialpages-group-pagetools' => 'Alat laman',
+'specialpages-group-wiki' => 'Data ngön alat',
+'specialpages-group-redirects' => 'Mita ngön pupinah',
+'specialpages-group-spam' => 'Alat spam',
+
+# Special:BlankPage
+'blankpage' => 'Laman soh',
+'intentionallyblankpage' => 'Laman nyoë geusaja peusoh',
 
 # External image whitelist
 'external_image_whitelist' => '#Neupubiyeue bareh nyoe lagee na<pre>
-#Neunguy fragmen-fragmen ekspresi regular (bak bagian antara // mantong) di yup nyoe
-#fragmen-fragmen nyoe eunteuk geupeupaih ngon URL nibak gamba-gamba luwa (nyang geupeuhubong lansong)
+#Neunguy bagian-bagian ekspresi regular (bak bagian antara // mantong) di yup nyoe
+#Bagian-bagian nyoe eunteuk geupupaih ngon URL nibak gamba-gamba luwa (nyang geupeuhubong lansong)
 #Fragmen nyang paih eunteuk geupeuleumah sibagoe gamba, seuhjih keu link mantong
 #Bareh nyang geupuphon ngon # eunteuk geupeujeuet keu bareh beunalah
 #Nyoe hana geupubida haraih rayek ngon ubeut
 #Neupeuduek ban dum beunagi ekspresi biasa di yup bareh nyoe. Neupubiyeue bareh nyoe lagee na</pre>',
 
 # Special:Tags
-'tag-filter' => 'Filter [[Special:Tags|tag]]:',
+'tags' => 'Tag neuubah nyang sah',
+'tag-filter' => 'Saréng [[Special:Tags|tag]]:',
+'tag-filter-submit' => 'Saréng',
 
 # Search suggestions
 'searchsuggest-search' => 'Mita',
 
+# Durations
+'duration-seconds' => '{{PLURAL:$1|deutik}}',
+'duration-minutes' => '{{PLURAL:$1|minèt}}',
+'duration-hours' => '{{PLURAL:$1|jeum}}',
+'duration-days' => '{{PLURAL:$1|uroë}}',
+'duration-weeks' => "{{PLURAL:$1|jeumeu'at}}",
+'duration-years' => '{{PLURAL:$1|thôn}}',
+'duration-decades' => '{{PLURAL:$1|dekade}}',
+'duration-centuries' => '{{PLURAL:$1|abad}}',
+'duration-millennia' => '{{PLURAL:$1|milenium}}',
+
 );
index b777cdb..ef541ee 100644 (file)
@@ -1324,7 +1324,7 @@ $1",
 
 # External editor support
 'edit-externally' => 'عدل هذا الملف باستخدام تطبيق خارجي',
-'edit-externally-help' => '(انظر [//www.mediawiki.org/wiki/Manual:External_editors تعليمات الإعداد] لمزيد من المعلومات)',
+'edit-externally-help' => '(انظر [https://www.mediawiki.org/wiki/Manual:External_editors تعليمات الإعداد] لمزيد من المعلومات)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'الكل',
index 271ba5c..999300d 100644 (file)
@@ -1330,7 +1330,6 @@ U kan ook 'n naamruimte as voorvoegsel gebruik.",
 'mypreferences' => 'Voorkeure',
 'prefs-edits' => 'Aantal wysigings:',
 'prefsnologin' => 'Nie ingeteken nie',
-'prefsnologintext' => 'U moet <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} aanmeld]</span> om voorkeure te kan verander.',
 'changepassword' => 'Verander wagwoord',
 'prefs-skin' => 'Omslag',
 'skin-preview' => 'Voorskou',
@@ -2876,7 +2875,7 @@ In die laaste geval kan u ook \'n verwysing gebruik, byvoorbeeld [[{{#Special:Ex
 'allmessagesdefault' => 'Verstekteks',
 'allmessagescurrent' => 'Huidige teks',
 'allmessagestext' => "Hier is 'n lys boodskappe wat in die ''MediaWiki''-naamruimte teenwoordig is.
-Gaan na [//www.mediawiki.org/wiki/Localisation MediaWiki-lokalisasie] en [//translatewiki.net translatewiki.net] as u wil help om MediaWiki te vertaal.",
+Gaan na [https://www.mediawiki.org/wiki/Localisation MediaWiki-lokalisasie] en [//translatewiki.net translatewiki.net] as u wil help om MediaWiki te vertaal.",
 'allmessagesnotsupportedDB' => "Daar is geen ondersteuning vir '''{{ns:special}}:Allmessages''' omdat '''\$wgUseDatabaseMessages''' uitgeskakel is.",
 'allmessages-filter-legend' => 'Filter',
 'allmessages-filter' => 'Filtreer op staat van verandering:',
@@ -3042,6 +3041,7 @@ Die lêer is slegs gedeeltelik opgelaai.',
 U kan daar \'n wysigingsopsomming byvoeg.',
 'tooltip-preferences-save' => 'Stoor voorkeure',
 'tooltip-summary' => "Verskaf 'n kort opsomming",
+'interlanguage-link-title' => '$1 – $2',
 
 # Stylesheets
 'common.css' => '/** Gemeenskaplike CSS vir alle omslae */',
@@ -3635,7 +3635,7 @@ Ander velde sal versteek wees.
 
 # External editor support
 'edit-externally' => "Wysig hierdie lêer met 'n eksterne program",
-'edit-externally-help' => '(Sien [//www.mediawiki.org/wiki/Manual:External_editors instruksies] vir meer inligting)',
+'edit-externally-help' => '(Sien [https://www.mediawiki.org/wiki/Manual:External_editors instruksies] vir meer inligting)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'alles',
@@ -3822,7 +3822,7 @@ U kan ook die [[Special:EditWatchlist|standaard opdaterigskerm gebruik]].',
 'version-hook-subscribedby' => 'Gebruik deur',
 'version-version' => '(Weergawe $1)',
 'version-license' => 'Lisensie',
-'version-poweredby-credits' => "Hierdie wiki word aangedryf deur '''[//www.mediawiki.org/ MediaWiki]''', kopiereg © 2001-$1 $2.",
+'version-poweredby-credits' => "Hierdie wiki word aangedryf deur '''[https://www.mediawiki.org/ MediaWiki]''', kopiereg © 2001-$1 $2.",
 'version-poweredby-others' => 'andere',
 'version-poweredby-translators' => 'translatewiki.net-vertalers',
 'version-credits-summary' => 'Ons erken graag die volgende persone vir hul bydrae aan [[Special:Version|MediaWiki]].',
@@ -3863,8 +3863,7 @@ Saam met die program moes u \'n [{{SERVER}}{{SCRIPTPATH}}/COPYING kopie van van
 
 # Special:SpecialPages
 'specialpages' => 'Spesiale bladsye',
-'specialpages-note' => '----
-* Normale spesiale bladsye.
+'specialpages-note' => '* Normale spesiale bladsye.
 * <span class="mw-specialpagerestricted">Spesiale bladsye met beperkte toegang.</span>
 * <span class="mw-specialpagecached">Spesiale bladsye met gegewens uit die kas (kan verouderd wees).</span>',
 'specialpages-group-maintenance' => 'Onderhoud verslae',
index 332eda3..994c5d5 100644 (file)
@@ -937,7 +937,6 @@ Vini re se indeksat e tyne të përmbajtjes së {{SITENAME}} munden me qenë të
 'mypreferences' => 'Parapëlqimet e mija',
 'prefs-edits' => 'Numri i redaktimeve:',
 'prefsnologin' => 'Nuk jeni kyçë',
-'prefsnologintext' => 'Duheni me qenë <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} i kyçun]</span> për me i caktue parapëlqimet.',
 'changepassword' => 'Ndërrimi i fjalëkalimit',
 'prefs-skin' => 'Doka',
 'skin-preview' => 'Parapâmja',
@@ -1558,7 +1557,7 @@ Tjerat kanë me mbetë të mshefuna.
 
 # External editor support
 'edit-externally' => 'Ndryshoni kët figurë/skedë me një mjet të jashtëm',
-'edit-externally-help' => '(Shih [//www.mediawiki.org/wiki/Manual:External_editors udhëzimet e instalimit] për mâ shumë informata)',
+'edit-externally-help' => '(Shih [https://www.mediawiki.org/wiki/Manual:External_editors udhëzimet e instalimit] për mâ shumë informata)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'krejt',
index da80c4f..19852bd 100644 (file)
@@ -865,7 +865,6 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'mypreferences' => 'ምርጫዎች፤',
 'prefs-edits' => 'የለውጦች ቁጥር:',
 'prefsnologin' => 'ገና አልገቡም',
-'prefsnologintext' => 'ምርጫዎችዎን ለማስተካከል አስቀድሞ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} መግባት]</span>  ያስፈልግዎታል።',
 'changepassword' => 'መግቢያ ቃልዎን ለመቀየር',
 'prefs-skin' => 'የድህረ-ገጽ መልክ',
 'skin-preview' => 'ቅድመ-ዕይታ',
@@ -1945,7 +1944,7 @@ $1',
 'allmessagesdefault' => 'የቆየው ጽሕፈት',
 'allmessagescurrent' => 'ያሁኑ ጽሕፈት',
 'allmessagestext' => 'በ«MediaWiki» ክፍለ-ዊኪ ያሉት የድረገጽ መልክ መልእክቶች ሙሉ ዝርዝር ይህ ነው።
-Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
+Please visit [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' ስለ ተዘጋ '''{{ns:special}}:Allmessages''' ሊጠቀም አይችልም።",
 'allmessages-filter-legend' => 'ማጣሪያ',
 'allmessages-filter-all' => 'ሁሉ',
@@ -2397,7 +2396,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'ይህንን ፋይል በአፍአዊ ሶፍትዌር ለማዘጋጀት',
-'edit-externally-help' => '(ለተጨማሪ መረጃ ይህን ገፅ ተመልከቱ [//www.mediawiki.org/wiki/Manual:External_editors setup instructions])',
+'edit-externally-help' => '(ለተጨማሪ መረጃ ይህን ገፅ ተመልከቱ [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ሁሉ',
index 71ddec7..745796f 100644 (file)
@@ -1088,7 +1088,6 @@ Asegure-se que iste cambio no trencará a continidat de l'historial d'a pachina.
 'mypreferences' => 'Preferencias',
 'prefs-edits' => "Numero d'edicions:",
 'prefsnologin' => 'No ye identificato',
-'prefsnologintext' => 'Ha d\'haber <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} encetato una sesión] </span> ta cambiar as preferencias d\'usuario.',
 'changepassword' => 'Cambiar a clau',
 'prefs-skin' => 'Aparencia',
 'skin-preview' => 'Fer una prebatina',
@@ -2515,7 +2514,7 @@ En iste zaguer caso tamién puede usar un vinclo, por eixemplo [[{{#Special:Expo
 'allmessagesdefault' => 'texto por defecto',
 'allmessagescurrent' => 'texto actual',
 'allmessagestext' => "Ista ye una lista de totz os mensaches disponibles en o espacio de nombres MediaWiki.
-Vesite por favor [//www.mediawiki.org/wiki/Localisation a pachina sobre localización de MediaWiki] y  [//translatewiki.net translatewiki.net] si deseya contrebuyir t'a localización cheneral de MediaWiki.",
+Vesite por favor [https://www.mediawiki.org/wiki/Localisation a pachina sobre localización de MediaWiki] y  [//translatewiki.net translatewiki.net] si deseya contrebuyir t'a localización cheneral de MediaWiki.",
 'allmessagesnotsupportedDB' => 'Ista pachina no ye disponible porque wgUseDatabaseMessages ye desactivato.',
 'allmessages-filter-legend' => 'Filtro',
 'allmessages-filter' => 'Filtrar por estau de personalización:',
@@ -3223,7 +3222,7 @@ Os campos de metadatos d'a imachen que amaneixen en iste mensache s'amostrarán
 
 # External editor support
 'edit-externally' => 'Editar iste fichero fendo servir una aplicación externa',
-'edit-externally-help' => '(Ta más información, leiga as [//www.mediawiki.org/wiki/Manual:External_editors instruccions de configuración])',
+'edit-externally-help' => '(Ta más información, leiga as [https://www.mediawiki.org/wiki/Manual:External_editors instruccions de configuración])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'totz',
@@ -3400,7 +3399,7 @@ Tamién puede fer servir o [[Special:EditWatchlist|editor estándar]].",
 'version-hook-subscribedby' => 'Suscrito por',
 'version-version' => '(Versión $1)',
 'version-license' => 'Licencia',
-'version-poweredby-credits' => "Iste wiki funciona gracias a '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Iste wiki funciona gracias a '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'atros',
 'version-license-info' => "MediaWiki ye software libre, puet redistribuyir-lo y/u modificar-lo baixo os terminos d'a Licencia Publica Cheneral GNU publicada por a Free Software Foundation, ya siga d'a suya versión 2 u (a la suya esleción) qualsiquier versión posterior. 
 
@@ -3424,8 +3423,7 @@ Con iste programa ha d'haber recibiu [{{SERVER}}{{SCRIPTPATH}}/COPYING una copia
 
 # Special:SpecialPages
 'specialpages' => 'Pachinas especials',
-'specialpages-note' => '----
-* Pachinas especials normals.
+'specialpages-note' => '* Pachinas especials normals.
 * <strong class="mw-specialpagerestricted">Pachinas especials restrinchitas.</strong>',
 'specialpages-group-maintenance' => 'Informes de mantenimiento',
 'specialpages-group-other' => 'Atras pachinas especials',
index 322dd28..1e3df2e 100644 (file)
@@ -11,7 +11,9 @@
  * @author Espreon
  * @author Gott wisst
  * @author JJohnson
+ * @author JJohnson1701
  * @author Omnipaedista
+ * @author Shirayuki
  * @author Spacebirdy
  * @author Tsepelcory
  * @author Wōdenhelm
@@ -236,7 +238,7 @@ $messages = array(
 'protect' => 'Beorgan',
 'protect_change' => 'Wendan',
 'protectthispage' => 'Beorgan þisne tramet',
-'unprotect' => 'Andwendan beorgunge',
+'unprotect' => 'Wendan beorgunge',
 'unprotectthispage' => 'Andwendan beorgune þisses trametes',
 'newpage' => 'Nīwe tramet',
 'talkpage' => 'Sprecan ymbe þisne tramet',
@@ -328,6 +330,8 @@ Seoh þone [[Special:Version|fadunge tramet]].',
 'page-rss-feed' => '$1 RSS strēam',
 'page-atom-feed' => '$1 Atom strēam',
 'red-link-title' => '$1 (tramet ne biþ)',
+'sort-descending' => 'sīgende behweorfan',
+'sort-ascending' => 'stīgende behweorfan',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Tramet',
@@ -367,11 +371,13 @@ Getæl gengra syndrigra trameta cann man findan be [[Special:SpecialPages|þǣm
 'badarticleerror' => 'Þēos dǣd ne cann bēon gefremed on þissum tramete.',
 'badtitle' => 'Nā genge titul',
 'viewsource' => 'Sēon fruman',
+'viewsource-title' => 'Fruman for $1 sēon',
 'cascadeprotected' => 'Þes trament wæs geborgen wiþ adihtunge, for þǣm þe hē is befangen in þissum {{PLURAL:$1|tramente, þe is| tramentum, þe sind}} geborgen settum wyrcende þǣm cyre "cascading": $2',
+'exception-nologin' => 'Ne inloggod',
 
 # Virus scanner
 'virus-badscanner' => 'Bad configuration: Unknown virus scanner: $1',
-'virus-unknownscanner' => 'unknown antivirus:',
+'virus-unknownscanner' => 'uncūþ andgund:',
 
 # Login and logout pages
 'logouttext' => "'''Þū eart nū ūtmeldod.'''
@@ -382,6 +388,7 @@ Cnāw þæt sume trametas mihten gīet wesan geīwde swā þū wǣre gīet inmel
 'yourname' => 'Þīn brūcendnama:',
 'userlogin-yourname' => 'Brūcendnama:',
 'userlogin-yourname-ph' => 'Inwrīt þīnne brūcendnaman',
+'createacct-another-username-ph' => 'Wrīt þone brūcendnaman in',
 'yourpassword' => 'Þafungword:',
 'userlogin-yourpassword' => 'Þafungword',
 'userlogin-yourpassword-ph' => 'Inwrīt þīn þafungword',
@@ -401,13 +408,15 @@ Cnāw þæt sume trametas mihten gīet wesan geīwde swā þū wǣre gīet inmel
 'logout' => 'Ūtmeldian',
 'userlogout' => 'Ūtmeldian',
 'notloggedin' => 'Nā ingemeldod',
-'userlogin-noaccount' => "Don't have an account?",
+'userlogin-noaccount' => 'Næfst þu hordcleofan?',
 'userlogin-joinproject' => 'Join {{SITENAME}}',
 'nologin' => 'Næfst þū reccinge? $1',
 'nologinlink' => 'Scieppan reccinge',
 'createaccount' => 'Scieppan reccinge',
 'gotaccount' => 'Hafast þū reccinge ǣr? $1.',
 'gotaccountlink' => 'Inmeldian',
+'userlogin-resetpassword-link' => 'Forgēate þū þīn gelēafword?',
+'helplogin-url' => 'Help:Inmeldung',
 'createaccountmail' => 'Notian sceortne tīman hlētlic þafungword and sendan hit to þǣm spearcǣrenda naman þe is niðer',
 'createaccountreason' => 'Racu:',
 'badretype' => 'Þā þafungword þe write þū, bēoþ ungelīc.',
@@ -426,7 +435,7 @@ Scēawa þīne wrītunge eft, oþþe [[Special:UserLogin/signup|sciepp nīwe rec
 'nosuchusershort' => 'Þǣr nis nān brūcend mid þǣm naman "$1".  Scēawa þīne wrītunge.',
 'passwordtooshort' => 'Þafungword sculon habban læst {{PLURAL:$1|1 stafan|$1 stafena}}.',
 'mailmypassword' => 'Sendan nīwe þafungword on spearcǣrende',
-'acct_creation_throttle_hit' => 'Hwæt, þu hæfst gēo geseted {{PLURAL:$1|1 hordcleofan|$1 -}}. Þu ne canst settan ǣnige māran.',
+'acct_creation_throttle_hit' => 'Nēosiende tō þissum wici, þe þīnne IP-Stōwe brȳcþ, hæfþ gesett {{PLURAL:$1|1 hordcleofan|$1 hordcleofan}} in þǣm læsten dæge. Þu ne canst settan ǣnige māran. Þǣrfram ne cunnon Nēosiende, þe þisne IP-Stōwe brȳcþ, settan ǣnige hordcleofan māran on þisse handhwīle.',
 'accountcreated' => 'Scōp reccinge',
 'loginlanguagelabel' => 'Sprǣc: $1',
 
@@ -438,6 +447,9 @@ Scēawa þīne wrītunge eft, oþþe [[Special:UserLogin/signup|sciepp nīwe rec
 'resetpass-submit-loggedin' => 'Andwendan þafungword',
 'resetpass-submit-cancel' => 'Undōn',
 
+# Special:PasswordReset
+'passwordreset-username' => 'Brūcendnama:',
+
 # Edit page toolbar
 'bold_sample' => 'Þicce traht',
 'bold_tip' => 'Þicce traht',
@@ -548,8 +560,8 @@ folclicum āgnunge oþþe gelīcum frēom horde (sēo $1 for āscungum).
 'revdelete-hide-comment' => 'Hȳdan adihtunge sceortnesse',
 'revdelete-hide-user' => 'Hȳdan adihtendes brūcendnaman/IP address',
 'revdelete-radio-same' => '(nā andwendan)',
-'revdelete-radio-set' => 'Gēa',
-'revdelete-radio-unset' => 'Nese',
+'revdelete-radio-set' => 'Gehȳdd',
+'revdelete-radio-unset' => 'Gesīene',
 'revdel-restore' => 'andwendan īwunge',
 'pagehist' => 'Trametes stǣr',
 'revdelete-reasonotherlist' => 'Ōðru racu',
@@ -907,7 +919,7 @@ Gif se brūcend asifte hine. synderlīce sind ymelan geīwda þǣre þe se brūc
 # Delete
 'deletepage' => 'Forlēosan tramet',
 'excontent' => 'innung wæs: "$1"',
-'excontentauthor' => 'innung wæs: \'$1\' (and se āna forðiend wæs "[[Special:Contributions/$2|$2]")',
+'excontentauthor' => 'innung wæs: \'$1\' (and se āna forðiend wæs "[[Special:Contributions/$2|$2]]")',
 'exblank' => 'tramet wæs æmettig',
 'historywarning' => "'''Warnung''': Se tramet þe þū wilt forlēosan hafaþ stǣr mid nēan $1 {{PLURAL:$1|fadunge|fadunga}}:",
 'actioncomplete' => 'Dǣd  is fulfyled',
@@ -1217,7 +1229,7 @@ Cēos ōðerne naman lā.',
 'exif-gpsdirection-t' => 'Sōþ rihtung',
 
 # External editor support
-'edit-externally-help' => '(Sēon þā [//www.mediawiki.org/wiki/Manual:External_editors gearwunge gewissunga] ymb mā cȳþþe)',
+'edit-externally-help' => '(Sēon þā [https://www.mediawiki.org/wiki/Manual:External_editors gearwunge gewissunga] ymb mā cȳþþe)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'eall',
index 6679715..1d9ef67 100644 (file)
@@ -936,7 +936,7 @@ $2',
 'gotaccount' => "لديك حساب؟ '''$1'''.",
 'gotaccountlink' => 'تسجيل الدخول',
 'userlogin-resetlink' => 'نسيت تفاصيل الدخول؟',
-'userlogin-resetpassword-link' => 'صفّر كلمة سرّك',
+'userlogin-resetpassword-link' => 'نسيت كلمة مرورك؟',
 'helplogin-url' => 'Help:تسجيل الدخول',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|المساعدة في تسجيل الدخول]]',
 'userlogin-loggedin' => 'أنت {{GENDER:$1|مسجل|مسجلة}} الدخول مسبقًا باسم $1. {{GENDER:$1|استخدم|استخدمي}} النموذج بالأسفل لتسجيل الدخول بحساب آخر.',
@@ -1013,7 +1013,7 @@ $2',
 'acct_creation_throttle_hit' => 'أنشأ زوار هذه الويكي باستخدام عنوان آيبيك {{PLURAL:$1||حسابا واحدا|حسابين|$1 حسابات|$1 حسابا|$1 حساب}} في اليوم الماضي، وهو الحد الأقصى المسموح به في هذه الفترة الزمنية.
 وكنتيجة لذلك، لن يتمكن الزوار الذين يستخدمون عنوان الأيبي هذا من إنشاء أي حسابات أخرى حاليا.',
 'emailauthenticated' => 'تم تأكيد بريدك الإلكتروني في $2 الساعة $3.',
-'emailnotauthenticated' => 'Ù\84Ù\85 Ù\8aتÙ\85 Ø§Ù\84تحÙ\82Ù\82 Ù\85Ù\86 Ø¨Ø±Ù\8aدÙ\83 Ø§Ù\84Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\8a.
+'emailnotauthenticated' => 'Ù\84Ù\85 Ù\8aؤÙ\83د Ø¨Ø±Ù\8aدÙ\83 Ø§Ù\84Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\8a Ø­ØªÙ\89 Ø§Ù\84Ø¢Ù\86.
 لن يتم إرسال رسائل لأي من الميزات التالية.',
 'noemailprefs' => 'حدد عنوان بريد إلكتروني في تفضيلاتك لتفعيل هذه الخصائص.',
 'emailconfirmlink' => 'أكد عنوان بريدك الإلكتروني',
@@ -1464,8 +1464,8 @@ $2
 'revdelete-hide-user' => 'أخف اسم/آيبي المستخدم',
 'revdelete-hide-restricted' => 'أخف البيانات عن الإداريين إضافة إلى الآخرين',
 'revdelete-radio-same' => '(لا تغير)',
-'revdelete-radio-set' => 'Ù\86عÙ\85',
-'revdelete-radio-unset' => 'Ù\84ا',
+'revdelete-radio-set' => 'Ù\85Ø®Ù\81Ù\8a',
+'revdelete-radio-unset' => 'Ù\85رئÙ\8a',
 'revdelete-suppress' => 'أخف البيانات عن مديري النظام والبقية',
 'revdelete-unsuppress' => 'إزالة الضوابط من المراجعات المسترجعة',
 'revdelete-log' => 'السبب:',
@@ -1625,7 +1625,6 @@ $1",
 'mypreferences' => 'تفضيلات',
 'prefs-edits' => 'عدد التعديلات:',
 'prefsnologin' => 'غير مسجل الدخول',
-'prefsnologintext' => 'يجب أن تكون <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} مسجل الدخول]</span>  حتى تتمكن من تعديل تفضيلات المستخدم.',
 'changepassword' => 'غير كلمة السر',
 'prefs-skin' => 'واجهة',
 'skin-preview' => 'عرض مسبق',
@@ -3193,7 +3192,7 @@ $1',
 'allmessagesdefault' => 'النص الافتراضي',
 'allmessagescurrent' => 'النص الحالي',
 'allmessagestext' => 'هذه قائمة برسائل النظام المتوفرة في نطاق ميدياويكي.
-من فضلك زر [//www.mediawiki.org/wiki/Localisation ترجمة ميدياويكي] و [//translatewiki.net بيتاويكي] لو كنت ترغب في المساهمة في ترجمة ميدياويكي الأساسية.',
+من فضلك زر [https://www.mediawiki.org/wiki/Localisation ترجمة ميدياويكي] و [//translatewiki.net بيتاويكي] لو كنت ترغب في المساهمة في ترجمة ميدياويكي الأساسية.',
 'allmessagesnotsupportedDB' => "هذه الصفحة لا يمكن استخدامها لأن '''\$wgUseDatabaseMessages''' تم تعطيله.",
 'allmessages-filter-legend' => 'المرشح',
 'allmessages-filter' => 'رشح حسب حالة التخصيص:',
@@ -3508,7 +3507,7 @@ $1',
 'svg-long-desc' => 'ملف SVG، أبعاده $1 × $2 بكسل، حجم الملف: $3',
 'svg-long-desc-animated' => 'ملف SVG متحرك، بمقاسات  $1  ×  $2  بكسل، حجم الملف: $3',
 'svg-long-error' => 'ملف SVG غير صالح: $1',
-'show-big-image' => 'دÙ\82Ø© Ù\83اÙ\85Ù\84Ø©',
+'show-big-image' => 'اÙ\84Ù\85Ù\84Ù\81 Ø§Ù\84أصÙ\84Ù\8a',
 'show-big-image-preview' => 'حجم هذه المعاينة: $1.',
 'show-big-image-other' => '{{PLURAL:$2||البعد الآخر|البعدان الآخران|الأبعاد الأخرى}}: $1.',
 'show-big-image-size' => '$1 × $2 بكسل',
@@ -4010,7 +4009,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'عدل هذا الملف باستخدام تطبيق خارجي',
-'edit-externally-help' => '(انظر [//www.mediawiki.org/wiki/Manual:External_editors تعليمات الإعداد] لمزيد من المعلومات)',
+'edit-externally-help' => '(انظر [https://www.mediawiki.org/wiki/Manual:External_editors تعليمات الإعداد] لمزيد من المعلومات)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'الكل',
@@ -4289,7 +4288,7 @@ $5
 'version-version' => '(نسخة $1)',
 'version-svn-revision' => '(r$2)',
 'version-license' => 'الرخصة',
-'version-poweredby-credits' => "تدار هذه الويكي بواسطة '''[//www.mediawiki.org/ ميدياويكي]'''، حقوق النشر © 2001-$1 $2.",
+'version-poweredby-credits' => "تدار هذه الويكي بواسطة '''[https://www.mediawiki.org/ ميدياويكي]'''، حقوق النشر © 2001-$1 $2.",
 'version-poweredby-others' => 'آخرون',
 'version-poweredby-translators' => 'مترجمو translatewiki.net',
 'version-credits-summary' => 'نود أن نعرف بالأشخاص التالية أسماؤهم لمساهمتهم في [[Special:Version|ميدياويكي]].',
@@ -4332,8 +4331,8 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'الصفحات الخاصة',
-'specialpages-note' => '----
-* صفحات خاصة عادية.
+'specialpages-note-top' => 'المفتاح',
+'specialpages-note' => '* صفحات خاصة عادية.
 * <span class="mw-specialpagerestricted">صفحات خاصة للمخولين.</span>
 * <span class="mw-specialpagecached">صفحات خاصة لبيانات مخزنة فقط (قد تكون مهجورة).</span>',
 'specialpages-group-maintenance' => 'تقارير الصيانة',
index 33b463c..19a3039 100644 (file)
@@ -1794,8 +1794,7 @@ $1',
 
 # Special:SpecialPages
 'specialpages' => 'ܦܐܬܬ̈ܐ ܕ̈ܝܠܢܝܬܐ',
-'specialpages-note' => '----
-* ܦܐܬܬ̈ܐ ܕ̈ܝܠܢܝܬܐ ܥܝܕ̈ܝܬܐ.
+'specialpages-note' => '* ܦܐܬܬ̈ܐ ܕ̈ܝܠܢܝܬܐ ܥܝܕ̈ܝܬܐ.
 * <span class="mw-specialpagerestricted">ܦܐܬܬ̈ܐ ܕ̈ܝܠܢܝܬܐ ܕܩܝܘܡ̈ܐ ܒܠܚܘܕ.</span>',
 'specialpages-group-maintenance' => 'ܬܫܪܪ̈ܐ ܕܚܕܬܘܬܐ',
 'specialpages-group-other' => 'ܦܐܬܬ̈ܐ ܕ̈ܝܠܢܝܬܐ ܐܚܪ̈ܢܝܬܐ',
index 51884d4..4d58115 100644 (file)
@@ -903,7 +903,7 @@ Ka dungu ellkangeay wünedullin reke.
 
 # External editor support
 'edit-externally' => 'Kümeelün tüfachi eltukawün wekun küdauwe mew',
-'edit-externally-help' => '(Pen feychi [//www.mediawiki.org/wiki/Manual:External_editors adtukünun chumngechi pünengeael]  doy dungungeam)',
+'edit-externally-help' => '(Pen feychi [https://www.mediawiki.org/wiki/Manual:External_editors adtukünun chumngechi pünengeael]  doy dungungeam)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'kom',
index 3c31b1f..1ca7708 100644 (file)
@@ -954,7 +954,6 @@ Laḫed ana imken ikono l-indexaṫ dial {{SITENAME}} qdam o ma bqaoċ ṣalḫi
 'mypreferences' => 'Ḫajaṫ li kanfeḍḍel',
 'prefs-edits' => 'ĝadad ṫ-ṫĝdilaṫ:',
 'prefsnologin' => 'nta mamkoniktich',
-'prefsnologintext' => 'ĥaṣṣk ṫkon  <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} daĥol]</span> baċ ṫĝyyer ṫfḍilaṫ l-moṣṫĥdim.',
 'changepassword' => 'tbdl lmot de passe',
 'prefs-skin' => 'skin',
 'skin-preview' => 'L-Prévizualizasyon',
@@ -2457,7 +2456,7 @@ Ila ṫbeddel l-fiċyé men ḫalṫo l-'aṣliya, kaynin ċi ṫafaṣil ma mna
 
 # External editor support
 'edit-externally' => 'Ṣayeb had l-fiċyé be ċi aplikasyon ĥarijiya',
-'edit-externally-help' => '(Ċof [//www.mediawiki.org/wiki/Manual:External_editors/fr les instructions d’installation] ila ḫṫajiṫi meĝlomaṫ ĥrin)',
+'edit-externally-help' => '(Ċof [https://www.mediawiki.org/wiki/Manual:External_editors/fr les instructions d’installation] ila ḫṫajiṫi meĝlomaṫ ĥrin)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'kolċi',
index a7d03e9..eefafed 100644 (file)
@@ -1237,7 +1237,6 @@ $1",
 'mypreferences' => 'تفضيلاتى',
 'prefs-edits' => 'عدد التعديلات:',
 'prefsnologin' => 'مش متسجل',
-'prefsnologintext' => 'لازم تكون <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} مسجل الدخول]</span> علشان تقدر تعدل تفضيلاتك.',
 'changepassword' => 'غير الباسورد',
 'prefs-skin' => 'الوش',
 'skin-preview' => 'بروفه',
@@ -2558,7 +2557,7 @@ $1',
 'allmessagesdefault' => 'النص الاوتوماتيكي',
 'allmessagescurrent' => 'النص دلوقتى',
 'allmessagestext' => 'دى لستة برسايل النظام المتوفرة فى نطاق ميدياويكي.
-لو سمحت تزور[//www.mediawiki.org/wiki/Localisation ترجمة ميدياويكي] و [//translatewiki.net بيتاويكي] لو كنت عايز تساهم فى ترجمة ميدياويكى الاصلية.',
+لو سمحت تزور[https://www.mediawiki.org/wiki/Localisation ترجمة ميدياويكي] و [//translatewiki.net بيتاويكي] لو كنت عايز تساهم فى ترجمة ميدياويكى الاصلية.',
 'allmessagesnotsupportedDB' => "الصفحة دى مش يمكن حد يستعملها علشان'''\$wgUseDatabaseMessages''' متعطل.",
 'allmessages-filter-legend' => 'فيلتر',
 'allmessages-filter' => 'فلتره بحالة التهيئه:',
@@ -3107,7 +3106,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'استعمل تطبيق من بره علشان تعدل الملف دا',
-'edit-externally-help' => '(بص على [//www.mediawiki.org/wiki/Manual:External_editors  تعليمات الاعداد] علشان معلومات اكتر.)',
+'edit-externally-help' => '(بص على [https://www.mediawiki.org/wiki/Manual:External_editors  تعليمات الاعداد] علشان معلومات اكتر.)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'الكل',
@@ -3344,8 +3343,7 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'صفح مخصوصه',
-'specialpages-note' => '----
-* صفحات خاصة عادية.
+'specialpages-note' => '* صفحات خاصة عادية.
 * <strong class="mw-specialpagerestricted">صفحات خاصة للناس اللى مسموح لهم.</strong>',
 'specialpages-group-maintenance' => 'تقارير الصيانة',
 'specialpages-group-other' => 'صفحات خاصه تا نيه',
index b56ee1a..c0aa4d3 100644 (file)
@@ -400,7 +400,7 @@ $messages = array(
 'articlepage' => 'সমল পৃষ্ঠা চাওক',
 'talk' => 'আলোচনা',
 'views' => 'দৰ্শন',
-'toolbox' => 'সা-সৰà¦\9eà§\8dà¦\9cাম',
+'toolbox' => 'সà¦\81à¦\9cà§\81লিসমà§\82হ',
 'userpage' => 'সদস্য পৃষ্ঠা চাওক',
 'projectpage' => 'প্ৰকল্প পৃষ্ঠা চাওক',
 'imagepage' => 'নথি পৃষ্ঠা চাওক',
@@ -430,7 +430,7 @@ $1',
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
 'aboutsite' => '{{SITENAME}}ৰ বিষয়ে',
 'aboutpage' => 'Project:ইতিবৃত্ত',
-'copyright' => 'এই বিষয়বস্তু $1 ৰ আওতাত উপলব্ধ।',
+'copyright' => 'à¦\86ন à¦\8fà¦\95à§\8b à¦\89লà§\8dলà§\87à¦\96 à¦¨à¦¾à¦¥à¦¾à¦\95িলà§\87 à¦\8fà¦\87 à¦¬à¦¿à¦·à¦¯à¦¼à¦¬à¦¸à§\8dতà§\81 $1 à§° à¦\86à¦\93তাত à¦\89পলবà§\8dধ।',
 'copyrightpage' => '{{ns:project}}:স্বত্ব',
 'currentevents' => 'সাম্প্ৰতিক ঘটনাৱলী',
 'currentevents-url' => 'Project:শেহতীয়া ঘটনাৱলী',
@@ -516,6 +516,7 @@ $1',
 'databaseerror-text' => "এটা ডেটাবে'ছ কুৱেৰী ত্ৰুটি হৈছে।
 ইয়ে ছফ্টৱেৰটোত কিবা বাগ্‌ থকাটো সূচাব পাৰে।",
 'databaseerror-textcl' => "এটা ডেটাবে'ছ কুৱেৰী ত্ৰুটি হৈছে।",
+'databaseerror-query' => 'অনুসন্ধান: $1',
 'databaseerror-function' => 'ফাংচন: $1',
 'databaseerror-error' => 'ত্ৰুটি: $1',
 'laggedslavemode' => 'সাৱধানবাণী: ইয়াত সাম্প্ৰতিক সাল-সলনি নাথাকিব পাৰে',
@@ -637,9 +638,11 @@ $2',
 'gotaccount' => "আপুনি সদস্য হয়নে? '''$1'''",
 'gotaccountlink' => 'প্ৰৱেশ',
 'userlogin-resetlink' => 'আপোনাৰ প্ৰৱেশ তথ্য পাহৰিছে?',
-'userlogin-resetpassword-link' => 'à¦\86পà§\8bনাৰ à¦\97à§\81পà§\8dতশবà§\8dদ à¦¨-à¦\95à§\88 à¦¬à¦¹à§\81ৱাà¦\93à¦\95',
+'userlogin-resetpassword-link' => 'à¦\86পà§\8bনাৰ à¦\97à§\81পà§\8dতশবà§\8dদ à¦ªà¦¾à¦¹à§°à¦¿à¦\9bà§\87?',
 'helplogin-url' => 'Help:প্ৰৱেশ/লগ্‌-ইন',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|প্ৰৱেশ সম্পৰ্কীয় সাহায্য]]',
+'userlogin-loggedin' => 'আপুনি ইতিমধ্যে {{GENDER:$1|$1}} হিচাপে প্ৰৱেশ কৰিছে। তলৰ আন সদস্যৰূপে প্ৰৱেশ কৰিবলৈ তলৰ প্ৰপত্ৰ ব্যৱহাৰ কৰক।',
+'userlogin-createanother' => 'আন এটা একাউণ্ট সৃষ্টি কৰক',
 'createacct-join' => 'আপোনাৰ তথ্যসমূহ তলত লিখক।',
 'createacct-another-join' => 'নতুন একাউণ্টৰ তথ্যসমূহ তলত লিখক।',
 'createacct-emailrequired' => 'ই-মেইল ঠিকনা',
@@ -702,16 +705,16 @@ $2',
 'noemailcreate' => 'আপুনি এটা সঠিক ই-মেইল ঠিকনা দিব লাগিব',
 'passwordsent' => '"$1" ৰ ই-মেইল ঠিকনাত নতুন গুপ্তশব্দ এটা পঠোৱা হৈছে। অনুগ্ৰহ কৰি সেয়া পোৱাৰ পাছত পুনৰ প্ৰৱেশ কৰক।',
 'blocked-mailpassword' => 'আপোনাৰ আইপি ঠিকনাৰ পৰা সম্পাদনা কৰা বাৰণ কৰা হৈছে, এনে অৱস্থাত দুৰ্ব্যৱহাৰ ৰোধ কৰিবলৈ গুপ্তশব্দ পুনঃউদ্ধাৰ কৰা সুবিধাতো বাতিল কৰা হৈছে।',
-'eauthentsent' => 'সà¦\9eà§\8dà¦\9aিত à¦\87-মà§\87à¦\87ল à¦ à¦¿à¦\95নাত à¦¨à¦¿à¦¶à§\8dà¦\9aিতà¦\95ৰণ à¦\87-মà§\87à¦\87ল à¦\8fà¦\96ন à¦ªà¦ à§\8bৱা হৈছে।
-à¦\86ৰà§\81 à¦\85নà§\8dযানà§\8dয à¦\87-মà§\87à¦\87ল à¦ªà¦ à§\8bৱাৰ à¦\86à¦\97তà§\87, à¦\86পà§\8bনাৰ à¦¸à¦¦à¦¸à§\8dযতাৰ নিশ্চিত কৰিবলৈ সেই ই-মেইলত দিয়া নিৰ্দেশনা আপুনি অনু্সৰণ কৰিব লাগিব।',
+'eauthentsent' => 'সà¦\9eà§\8dà¦\9aিত à¦\87-মà§\87à¦\87ল à¦ à¦¿à¦\95নালà§\88 à¦¨à¦¿à¦¶à§\8dà¦\9aিতà¦\95ৰণ à¦\87-মà§\87à¦\87ল à¦\8fà¦\96ন à¦ªà¦ à¦¿à¦\93ৱা হৈছে।
+à¦\8fà¦\95াà¦\89ণà§\8dà¦\9fà¦\9fà§\8bলà§\88 à¦\86ন à¦\87-মà§\87à¦\87ল à¦ªà¦ à¦¿à¦\93ৱাৰ à¦\86à¦\97তà§\87 à¦\86পà§\8bনাৰ à¦¸à¦¦à¦¸à§\8dযতা নিশ্চিত কৰিবলৈ সেই ই-মেইলত দিয়া নিৰ্দেশনা আপুনি অনু্সৰণ কৰিব লাগিব।',
 'throttled-mailpassword' => "যোৱা {{PLURAL:$1|এঘণ্টাত|$1 ঘণ্টাত}} এখন গুপ্তশব্দ উদ্ধাৰ ইমেইল পঠিওৱা হৈছে।
 অবৈধ ব্যৱহাৰ ৰোধ কৰিবলৈ প্ৰতি {{PLURAL:$1|এঘণ্টাত|$1 ঘণ্টাত}} এবাৰহে গুপ্তশব্দ উদ্ধাৰ ইমেইল পঠিওৱা হ'ব।",
 'mailerror' => 'ই-মেইল পঠিওৱাত সমস্যা হৈছে: $1',
 'acct_creation_throttle_hit' => 'যোৱা ২৪ ঘন্টাত আপোনাৰ আই-পি ঠিকনাৰ পৰা এই ৱিকিৰ পঢ়োঁতাই  {{PLURAL:$1|১-টা একাউন্ট|$1-টা একাউন্ট}} সৃষ্টি কৰিলে, যিটো সৰ্বোচ্চ অনুমোদনকৃত ।
 এতেকে, এই আই-পি ঠিকনাৰ পৰা এই মূহুৰ্তত একাউন্ট সৃষ্টি কৰিব নোৱাৰিব ।',
-'emailauthenticated' => 'আপোনাৰ ই-মেইল ঠিকনাটো $2 তাৰিখৰ $3 বজাত নিশ্চিত কৰা হৈছিল ।',
-'emailnotauthenticated' => 'à¦\86পà§\8bনাৰ à¦\87-মà§\87à¦\87ল à¦ à¦¿à¦\95নাতà§\8b à¦\8fতিয়ালà§\88 à¦ªà§\8dৰমাণিত à¦¹à§\8bৱা à¦¨à¦¾à¦\87 
-à¦\86পà§\81নি à¦¤à¦²à§° à¦¬à¦¿à¦·à¦¯à¦¼à¦¬à§\8bৰৰ à¦\95াৰণà§\87 à¦®à§\87à¦\87ল à¦ªà¦ à¦¾à¦¬ à¦¨à§\8bৱাৰà§\87 ।',
+'emailauthenticated' => 'আপোনাৰ ই-মেইল ঠিকনাটো $2 তাৰিখৰ $3 বজাত নিশ্চিত কৰা হৈছিল।',
+'emailnotauthenticated' => 'à¦\86পà§\8bনাৰ à¦\87-মà§\87à¦\87ল à¦ à¦¿à¦\95নাতà§\8b à¦\8fতিয়ালà§\88 à¦¨à¦¿à¦¶à§\8dà¦\9aিত à¦¹à§\8bৱা à¦¨à¦¾à¦\87
+à¦\86পà§\81নি à¦¤à¦²à§° à¦¬à¦¿à¦·à¦¯à¦¼à¦¬à§\8bৰৰ à¦\95াৰণà§\87 à¦®à§\87à¦\87ল à¦ªà¦ à¦¿à¦¯à¦¼à¦¾à¦¬ à¦¨à§\8bৱাৰà§\87।',
 'noemailprefs' => 'এই সুবিধাবোৰ ব্যৱহাৰ কৰিবলৈ এটা ই-মেইল ঠিকনা দিয়ক।',
 'emailconfirmlink' => 'আপোনাৰ ই-মেইল ঠিকনাটো প্ৰমাণিত কৰক',
 'invalidemailaddress' => 'এই ই-মেইল ঠিকনাতো গ্ৰহনযোগ্য নহয়, কাৰণ ই অবৈধ প্ৰকাৰৰ যেন লাগিছে।
@@ -760,6 +763,7 @@ $2',
 # Special:PasswordReset
 'passwordreset' => 'গুপ্তশব্দ ন-কৈ বহুৱাওক',
 'passwordreset-text-one' => 'আপোনাৰ গুপ্তশব্দ ন-কৈ বহুৱাবলৈ এই প্ৰপত্ৰ পূৰণ কৰক।',
+'passwordreset-text-many' => '{{PLURAL:$1|আপোনাৰ গুপ্তশব্দ ন-কৈ বহুৱাবলৈ এই তথ্যসমূহৰ যিকোনো এটা দিয়ক।}}',
 'passwordreset-legend' => 'গুপ্তশব্দ ন-কৈ বহাওক',
 'passwordreset-disabled' => 'এই ৱিকিত গুপ্তশব্দ নবীকৰণ নিষ্ক্ৰিয় কৰা হৈছে ।',
 'passwordreset-emaildisabled' => 'এই ৱিকিত ই-মেইল বৈশিষ্টসমূহ নিষ্ক্ৰিয় কৰা হৈছে।',
@@ -799,6 +803,15 @@ $2
 
 # Special:ResetTokens
 'resettokens' => "ট'কেন ৰিছে'ট কৰক",
+'resettokens-text' => "আপোনাৰ একাউণ্টৰ সৈতে জড়িত কিছুমান ব্যক্তিগত তথ্য চাবলৈ আপুনি ট'কেন ৰিছে'ট কৰিব পাৰে।
+
+আপুনি দুৰ্ঘটনাবশতঃ আন কাৰোবাক সেই ট'কেন দিলে বা আপোনাৰ একাউণ্টৰ বিসংগতি হ'লে আপুনি এনে কৰাটো উচিত।",
+'resettokens-no-tokens' => "ৰিছে'ট কৰিবলৈ কোনো ট'কেন নাই।",
+'resettokens-legend' => "ট'কেন ৰিছে'ট কৰক",
+'resettokens-tokens' => "ট'কেনসমূহ:",
+'resettokens-token-label' => '$1 (বর্তমান: $2)',
+'resettokens-done' => "ট'কেন ৰিছে'ট কৰা হ'ল।",
+'resettokens-resetbutton' => "নিৰ্বাচিত ট'কেনসমূহ ৰিছে'ট কৰক",
 
 # Edit page toolbar
 'bold_sample' => 'গাঢ় পাঠ্য',
@@ -876,8 +889,8 @@ $1ৰ দ্বাৰা এই অৱৰোধ কৰা হৈছে ।
 'loginreqlink' => 'প্ৰৱেশ',
 'loginreqpagetext' => 'অন্যান্য পৃষ্ঠা চাবলৈ আপুনি $1 কৰিব লাগিব।',
 'accmailtitle' => "গুপ্তশব্দ পঠোৱা হ'ল।",
-'accmailtext' => "[[User talk:$1|$1]]-ৰ কাৰণে যাদৃচ্ছিক ভাৱে উৎপন্ন কৰা গুপ্তশব্দ $2লৈ পঠোৱা হ'ল । 
-à¦\8fà¦\87 à¦¨à¦¤à§\81ন à¦\8fà¦\95াà¦\89নà§\8dà¦\9fত à¦ªà§\8dৰৱà§\87শ à¦\95ৰি ''[[Special:ChangePassword|à¦\97à§\81পà§\8dতশবà§\8dদ à¦¸à¦²à¦¨à¦¿ à¦\95ৰà¦\95]]'' à¦ªà§\83ষà§\8dঠাà¦\96নত à¦\97à§\81পà§\8dতশবà§\8dদতà§\8b à¦¸à¦²à¦¨à¦¿ à¦\95ৰি à¦²â\80\99ব à¦ªà¦¾à§°à¦¿à¦¬ à¥¤",
+'accmailtext' => "[[User talk:$1|$1]]-ৰ কাৰণে যাদৃচ্ছিকভাৱে উৎপন্ন কৰা গুপ্তশব্দ $2লৈ পঠোৱা হ'ল । 
+এই নতুন একাউন্টত প্ৰৱেশ কৰি ''[[Special:ChangePassword|গুপ্তশব্দ সলনি কৰক]]'' পৃষ্ঠাখনত শব্দতো সলনি কৰি ল’ব পাৰিব ।",
 'newarticle' => '(নতুন)',
 'newarticletext' => "আপুনি বিচৰা প্ৰবন্ধটো বিচাৰি পোৱা নগ'ল।
 
@@ -991,7 +1004,7 @@ $1ৰ দ্বাৰা এই অৱৰোধ কৰা হৈছে ।
 'nocreate-loggedin' => 'নতুন পৃষ্ঠা সৃষ্টি কৰিবলৈ আপোনাৰ অনুমতি নাই ।',
 'sectioneditnotsupported-title' => 'অনুচ্ছেদ সম্পাদনাৰ সমৰ্থন নাই',
 'sectioneditnotsupported-text' => 'এই পৃষ্ঠাত অনুচ্ছেদ সম্পাদনাৰ সমৰ্থন নাই',
-'permissionserrors' => 'à¦\85নà§\81মতি à¦­à§\81লসমà§\82হ',
+'permissionserrors' => 'à¦\85নà§\81মà§\8bদন à¦¤à§\8dৰà§\81à¦\9fি',
 'permissionserrorstext' => "আপোনাৰ এই কামটো কৰিবলৈ অনুমতি নাই, যাৰ {{PLURAL:$1|কাৰণ|কাৰণসমূহ}} হ'ল:",
 'permissionserrorstext-withaction' => "আপোনাৰ $2 কৰিবলৈ অনুমতি নাই, যাৰ {{PLURAL:$1|কাৰণ|কাৰণসমূহ}} হ'ল:",
 'recreate-moveddeleted-warn' => "'''সাৱধান: আগতে বিলোপ কৰা পৃষ্ঠা এটা আপুনি পুনঃনিৰ্মাণ কৰি আছে। '''
@@ -1050,6 +1063,7 @@ $1ৰ দ্বাৰা এই অৱৰোধ কৰা হৈছে ।
 'undo-failure' => "এই সম্পাদনা মধ্যৱৰ্তী সম্পাদনাসমূহৰ দ্বন্দৰ কাৰণে পূৰ্ববৎ কৰা নহ'ব ।",
 'undo-norev' => "এই সম্পাদনাটি ৰদ কৰিব নোৱাৰি, কাৰণ ই আৰু নাই বা ইয়াক বাতিল কৰা হ'ল ।",
 'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|আলোচনা]]) সম্পাদিত $1 সংশোধনটি বাতিল কৰক',
+'undo-summary-username-hidden' => 'এজন গোপন ব্যৱহাৰকাৰীয়ে কৰা $1 সংশোধন বাতিল কৰক',
 
 # Account creation failure
 'cantcreateaccounttitle' => "একাউন্ট সৃষ্টি কৰা নহ'ব",
@@ -1140,17 +1154,17 @@ $3 য়ে আগবঢ়োৱা ইয়াৰ কাৰণ হৈছে
 'revdelete-suppress-text' => "নিবাৰণ '''কেৱল''' তলত দিয়া কাৰণসমূহত ব্যৱহৃত হ’ব:
 * সম্ভাব্য ক্ষতিকাৰক তথ্য 
 * অনুপযুক্ত ব্যক্তিগত তথ্য 
-* : ''à¦\98ৰৰ à¦ à¦¿à¦\95না à¦\86ৰà§\81 à¦\9fà§\87লিফà§\8bন à¦¸à¦\82à¦\96à§\8dযা, à¦¸à¦¾à¦®à¦¾à¦\9cিà¦\95 à¦¸à§\81ৰà¦\95à§\8dষা সংখ্যা, আদি । ''",
+* : ''à¦\98ৰৰ à¦ à¦¿à¦\95না à¦\86ৰà§\81 à¦\9fà§\87লিফà§\8bন à¦¸à¦\82à¦\96à§\8dযা, à§°à¦¾à¦·à§\8dà¦\9fà§\8dৰà§\80য় à¦ªà§°à¦¿à¦\9aয় সংখ্যা, আদি । ''",
 'revdelete-legend' => 'দৃষ্টিপাত সীমাবদ্ধ কৰক',
-'revdelete-hide-text' => 'সংশোধিত পাঠ গোপন কৰক',
+'revdelete-hide-text' => 'সংশোধিত পাঠ',
 'revdelete-hide-image' => 'ফাইলৰ বিষয়বস্তু গোপন কৰক',
 'revdelete-hide-name' => 'কাৰ্য আৰু লক্ষ্য গোপন কৰক',
-'revdelete-hide-comment' => 'সম্পাদনা সাৰাংশ গোপন কৰক',
-'revdelete-hide-user' => 'সম্পাদকৰ সদস্যনাম/আই-পি ঠিকনা গোপন কৰক',
+'revdelete-hide-comment' => 'সম্পাদনা সাৰাংশ',
+'revdelete-hide-user' => 'সম্পাদকৰ সদস্যনাম/আই-পি ঠিকনা',
 'revdelete-hide-restricted' => 'প্ৰশাসকবৃন্দৰ লগতে আনৰ পৰাও তথ্য ৰোধ কৰক',
 'revdelete-radio-same' => '(সলনি নকৰিব)',
-'revdelete-radio-set' => 'হয়',
-'revdelete-radio-unset' => 'নহয়',
+'revdelete-radio-set' => 'à¦\97à§\8bপন',
+'revdelete-radio-unset' => 'দà§\83শà§\8dযমান',
 'revdelete-suppress' => 'প্ৰশাসকবৃন্দৰ লগতে আনৰ পৰাও তথ্য ৰোধ কৰক',
 'revdelete-unsuppress' => 'পুনৰ্স্থাপন কৰা সংশোধনসমূহৰ সীমাবদ্ধতা আতৰাওক',
 'revdelete-log' => 'কাৰণ:',
@@ -1232,6 +1246,7 @@ $1",
 'compareselectedversions' => 'নিৰ্বাচিত কৰা সংকলন সমূহৰ মাজত পাৰ্থক্য চাওক',
 'showhideselectedversions' => 'নিৰ্বাচিত সংশোধনসমূহ দেখুৱাওক/আঁৰ কৰক',
 'editundo' => 'পূৰ্ববত কৰক',
+'diff-empty' => '(কোনো পাৰ্থক্য নাই)',
 'diff-multi' => '({{PLURAL:$2|এজন সদস্যৰ|$2জন সদস্যৰ}} দ্বাৰা {{PLURAL:$1|এটা মধ্যৱৰ্তী সংশোধন|$1-টা মধ্যৱৰ্তী সংশোধন}} দেখোৱা হোৱা নাই)',
 'diff-multi-manyusers' => '({{PLURAL:$2|এজনতকৈ|$2-জনতকৈ}} অধিক সদস্যৰ দ্বাৰা {{PLURAL:$1|এটা মধ্যৱৰ্তী সংশোধন|$1-টা মধ্যৱৰ্তী সংশোধন}} দেখুওৱা হোৱা নাই)',
 'difference-missing-revision' => '{{PLURAL:$2|এটা সংস্কৰণ|$2 সংস্কৰণসমূহৰ}} সংশোধনৰ পাৰ্থক্য  ($1) {{PLURAL:$2| পোৱা নগ’ল}}।
@@ -1310,7 +1325,6 @@ $1",
 'mypreferences' => 'পছন্দসমূহ',
 'prefs-edits' => 'সম্পাদনাৰ সংখ্যা:',
 'prefsnologin' => 'প্ৰৱেশ কৰা নাই',
-'prefsnologintext' => 'আপোনাৰ পছন্দ সলনি কৰিবলৈ হ’লে <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} প্ৰৱেশ]</span> কৰাতো আৱশ্যক।',
 'changepassword' => 'গুপ্তশব্দ সলনি কৰক',
 'prefs-skin' => 'আৱৰণ',
 'skin-preview' => 'খচৰা',
@@ -1335,7 +1349,7 @@ $1",
 'prefs-rendering' => 'ৰূপ',
 'saveprefs' => 'সাঁচি থওক',
 'resetprefs' => 'অসঞ্চিত সাল-সলনি বাতিল কৰক',
-'restoreprefs' => 'সকলো পূৰ্বনিৰ্ধাৰিত ছেটিং ঘূৰাই আনক',
+'restoreprefs' => 'সকলো পূৰ্বনিৰ্ধাৰিত ছেটিং ঘূৰাই আনক (সকলো ছেক্‌শ্যনতে)',
 'prefs-editing' => 'সম্পাদন',
 'rows' => 'পথালী শাৰী:',
 'columns' => 'ঠিয় শাৰী:',
@@ -1347,6 +1361,8 @@ $1",
 'recentchangesdays-max' => 'সৰ্বোচ্চ $1 {{PLURAL:$1|দিন|দিন}}',
 'recentchangescount' => 'শেহতীয়া সাল-সলনি, ইতিহাস আৰু লগ পৃষ্ঠাত দেখুৱাব লগা সম্পাদনাৰ সংখ্যা:',
 'prefs-help-recentchangescount' => 'ইয়াত শেহতীয়া সাল-সলনি, পৃষ্ঠাৰ ইতিহাস আৰু লগ অন্তৰ্ভুক্ত ।',
+'prefs-help-watchlist-token2' => "এইটো আপোনাৰ লক্ষ্য-তালিকাৰ ৱেব্‌ ফীডৰ গোপন চাবি। এইটো জনা লোকে আপোনাৰ লক্ষ্য-তালিকা পঢ়িবলৈ সমৰ্থ হ'ব। গতিকে ইয়াক আনৰ আগত প্ৰকাশ নকৰিব।
+[[Special:ResetTokens|এইটো ৰিছে'ট কৰিবলৈ ইয়াত ক্লিক কৰক।]].",
 'savedprefs' => 'আপোনাৰ পছন্দসমূহ সাঁচি ৰখা হ’ল।',
 'timezonelegend' => 'সময় স্থান:',
 'localtime' => 'স্থানীয় সময়:',
@@ -1391,12 +1407,13 @@ $1",
 'badsig' => 'অনুপযোগী স্বাক্ষ্যৰ, HTML টেগ পৰীক্ষা কৰি লওক।',
 'badsiglength' => 'আপোনাৰ স্বাক্ষৰ অত্যাধিক দীঘলীয়া ।
 আপোনাৰ স্বাক্ষৰ {{PLURAL:$1|এটা আখৰৰ|টা আখৰৰ}} বেছি হ’ব নালাগে ।',
-'yourgender' => 'লিঙ্গ:',
-'gender-unknown' => 'অনিধাৰ্য্য',
-'gender-male' => 'পুৰুষ',
-'gender-female' => 'মহিলা',
-'prefs-help-gender' => 'বৈকল্পিক: ছফ্টৱেৰৰ দ্বাৰা কৰা সম্বোধনৰ লিংগ-শুদ্ধতাৰ বাবে ব্যৱহৃত ।
-এই তথ্য ৰাজহুৱা কৰা হ’ব ।',
+'yourgender' => 'আপুনি কিদৰে নিজৰ বৰ্ণনা দিবলৈ ভাল পাব?',
+'gender-unknown' => "ম‌ই ক'বলৈ বিচৰা নাই",
+'gender-male' => 'তেওঁ (পুৰুষ) ৱিকি পৃষ্ঠা সম্পাদনা কৰে',
+'gender-female' => 'তেওঁ (মহিলা) ৱিকি পৃষ্ঠা সম্পাদনা কৰে',
+'prefs-help-gender' => "এই পছন্দ ছে'ট কৰাটো বৈকল্পিক।
+এই ছফ্টৱেৰে আপোনাক সম্বোধন কৰিবলৈ আৰু আনৰ আগত আপোনাৰ উল্লেখ কৰিবলৈ উপযুক্ত ব্যাকৰণগত লিংগ ব্যৱহাৰ কৰিব পাৰে।
+এই তথ্য ৰাজহুৱা কৰা হ’ব ।",
 'email' => 'ই-মেইল',
 'prefs-help-realname' => 'আপোনাৰ আচল নাম দিয়াতো জৰুৰী নহয়, কিন্তু দিলে আপোনাৰ কামবোৰ আপোনাৰ নামত দেখুওৱা হব।',
 'prefs-help-email' => 'ই-মেইল ঠিকনা দিয়াটো বৈকল্পিক, কিন্তু আপুনি গুপ্তশব্দ পাহৰি গ’লে ন-কৈ বহুৱাবৰ বাবে ই প্ৰয়োজনীয়।',
@@ -1408,7 +1425,9 @@ $1",
 'prefs-signature' => 'স্বাক্ষৰ',
 'prefs-dateformat' => 'তাৰিখ বিন্যাস',
 'prefs-timeoffset' => 'সময় অফচেট',
-'prefs-advancedediting' => 'উচ্চতৰ বিকল্পসমূহ',
+'prefs-advancedediting' => 'সাধাৰণ বিকল্পসমূহ',
+'prefs-editor' => 'সম্পাদক',
+'prefs-preview' => 'প্ৰাক্‌দৰ্শন',
 'prefs-advancedrc' => 'উচ্চতৰ বিকল্পসমূহ',
 'prefs-advancedrendering' => 'উচ্চতৰ বিকল্পসমূহ',
 'prefs-advancedsearchoptions' => 'উচ্চতৰ বিকল্পসমূহ',
@@ -1416,7 +1435,9 @@ $1",
 'prefs-displayrc' => 'প্ৰদৰ্শন বিকল্পসমূহ',
 'prefs-displaysearchoptions' => 'বিকল্পসমূহ প্ৰদৰ্শন কৰক',
 'prefs-displaywatchlist' => 'বিকল্পসমূহ প্ৰদৰ্শন কৰক',
+'prefs-tokenwatchlist' => "ট'কেন",
 'prefs-diffs' => 'পাৰ্থক্য',
+'prefs-help-prefershttps' => "আপোনাৰ পৰৱৰ্তী প্ৰৱেশত এই পছন্দ কাৰ্যকৰী হ'ব।",
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'ই-মেইল ঠিকনাটো সঠিক',
@@ -1440,10 +1461,10 @@ $1",
 'userrights-no-interwiki' => 'আপোনাৰ অন্য ৱিকিত সদস্যৰ অধিকাৰ সম্পাদনা কৰাৰ অনুমতি নাই',
 'userrights-nodatabase' => '$1  তথ্যকোষৰ কোনো অস্তিত্ব নাই অথবা ই স্থানীয় নহয় ।',
 'userrights-nologin' => 'সদস্যৰ অধিকাৰ নিৰূপণ কৰিবলৈ আপুনি কোনো প্ৰশাসকৰ একাউণ্টৰ জৰিয়তে [[Special:UserLogin|প্ৰৱেশ]] কৰিব লাগিব ।',
-'userrights-notallowed' => 'সদসà§\8dযৰ à¦\85ধিà¦\95াৰ à¦¯à§\8bà¦\97 à¦\95ৰিবলà§\88 à¦¬à¦¾ à¦\86à¦\81তৰ à¦\95ৰিবলà§\88 à¦\86পà§\8bনাৰ à¦\8fà¦\95াà¦\89ণà§\8dà¦\9fৰ অনুমতি নাই ।',
+'userrights-notallowed' => 'সদসà§\8dযৰ à¦\85ধিà¦\95াৰ à¦¯à§\8bà¦\97 à¦¬à¦¾ à¦\86à¦\81তৰ à¦\95ৰিবলà§\88 à¦\86পà§\8bনাৰ অনুমতি নাই ।',
 'userrights-changeable-col' => 'আপুনি সলনি কৰিব পৰা গোটসমূহ',
 'userrights-unchangeable-col' => 'আপুনি সলনি কৰিব নোৱাৰা গোটসমূহ',
-'userrights-conflict' => 'সদসà§\8dয à¦\85ধিà¦\95াৰ à¦¦à§\8dবনà§\8dদà§\8dব! à¦\85নà§\81à¦\97à§\8dৰহ à¦\95ৰি à¦\86পà§\8bনাৰ à¦¸à¦¾à¦²à¦¸à¦²à¦¨à¦¿ à¦\86à¦\95à§\8c à¦\8fবাৰ à¦ªà§\8dৰয়à§\8bà¦\97 কৰক।',
+'userrights-conflict' => 'সদসà§\8dয à¦\85ধিà¦\95াৰ à¦¸à¦¾à¦²à¦¸à¦²à¦¨à¦¿à§° à¦¦à§\8dবনà§\8dদà§\8dব! à¦\85নà§\81à¦\97à§\8dৰহ à¦\95ৰি à¦ªà§\81নৰাà¦\87 à¦\9aà¦\95à§\81 à¦«à§\81ৰাà¦\87 à¦\86পà§\8bনাৰ à¦¸à¦¾à¦²à¦¸à¦²à¦¨à¦¿ à¦¨à¦¿à¦¶à§\8dà¦\9aিত কৰক।',
 'userrights-removed-self' => 'আপুনি সফলতাৰে নিজৰ অধিকাৰসমূহ আঁতৰ কৰিলে। গতিকে আপুনি এতিয়া এই পৃষ্ঠা চাব নোৱাৰে।',
 
 # Groups
@@ -1488,7 +1509,7 @@ $1",
 'right-reupload-shared' => 'উমৈহতীয়া মিডিয়া ভঁৰালত থকা ফাইলসমূহ স্থানীয়ভাৱে উপেক্ষা কৰক ।',
 'right-upload_by_url' => "ইউ-আৰ-এলৰ পৰা ফাইল আপল'ড কৰক",
 'right-purge' => 'চাইট কেচৰ পৰা নিশ্চয়তা নোহোৱা পৃষ্ঠা মচি পেলাওক ।',
-'right-autoconfirmed' => 'à¦\85ৰà§\8dদà§\8dধ-সà§\81ৰà¦\95à§\8dষিত à¦ªà§\83ষà§\8dঠা à¦¸à¦®à§\8dপাদনা à¦\95ৰà¦\95',
+'right-autoconfirmed' => 'à¦\86à¦\87-পি à¦­à¦¿à¦¤à§\8dতিà¦\95 à¦\97তি à¦¸à§\80মাৰ à¦¦à§\8dবাৰা à¦ªà§\8dৰভাৱিত à¦¨à¦¹â\80\99ব',
 'right-bot' => 'স্বয়ংক্ৰিয় প্ৰক্ৰিয়া হিচাপে ব্যৱহৃত হওক',
 'right-nominornewtalk' => 'আলোচনা পৃষ্ঠাৰ লঘূ সম্পাদনা হওঁতে নতুন সদস্য বাৰ্তা নালাগে',
 'right-apihighlimits' => 'API প্ৰশ্নৰ বাবে উচ্চতৰ সীমা ব্যৱহাৰ কৰক',
@@ -1509,7 +1530,7 @@ $1",
 'right-ipblock-exempt' => 'আই.পি. প্ৰতিবন্ধক, অট’-প্ৰতিবন্ধক আৰু ৰে’ঞ্জ-প্ৰতিবন্ধক এৰাই চলক',
 'right-proxyunbannable' => 'প্ৰক্সীৰ স্বয়ংক্ৰিয় প্ৰতিবন্ধক এৰাই চলক',
 'right-unblockself' => 'আপোনা-আপুনি খোলা',
-'right-protect' => 'সà§\81ৰà¦\95à§\8dষাৰ à¦®à¦¾à¦¤à§\8dৰা à¦ªà§°à¦¿à§±à§°à§\8dতন à¦\95ৰà¦\95 à¦\86ৰà§\81 সুৰক্ষিত পৃষ্ঠাসমূহ সম্পাদনা কৰক',
+'right-protect' => 'সà§\81ৰà¦\95à§\8dষাৰ à¦¸à§\8dতৰ à¦ªà§°à¦¿à§±à§°à§\8dতন à¦\95ৰà¦\95 à¦\86ৰà§\81 à¦ªà§\8dৰপাতাà¦\95াৰ-সুৰক্ষিত পৃষ্ঠাসমূহ সম্পাদনা কৰক',
 'right-editprotected' => 'সুৰক্ষিত পৃষ্ঠা (কেশ্বকেডিঙ সুৰক্ষাৰ অবিহনে) সম্পাদনা কৰক',
 'right-editinterface' => 'সদস্যৰ ইণ্টাৰফে’চ সম্পাদনা কৰক',
 'right-editusercssjs' => 'আন সদস্যৰ CSS আৰু JavaScript  সম্পাদনা কৰক',
@@ -1612,7 +1633,7 @@ $1",
 'rc_categories_any' => 'যিকোনো',
 'rc-change-size-new' => 'সালসলনিৰ পিছত $1 {{PLURAL:$1|বাইট|বাইট}}',
 'newsectionsummary' => '/* $1 */ নতুন অনুচ্ছেদ',
-'rc-enhanced-expand' => 'সবিশেষ দেখুৱাওক (জাভাস্ক্ৰিপ্টৰ প্ৰয়োজন)',
+'rc-enhanced-expand' => 'সবিশেষ দেখুৱাওক',
 'rc-enhanced-hide' => 'সবিশেষ  লুকুৱাওক',
 'rc-old-title' => 'পূৰ্বে "$1" নামেৰে সৃষ্ট',
 
@@ -1887,6 +1908,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 'listfiles_size' => 'আকাৰ',
 'listfiles_description' => 'বিৱৰণ',
 'listfiles_count' => 'সংস্কৰণ',
+'listfiles-latestversion-yes' => 'হয়',
+'listfiles-latestversion-no' => 'নহয়',
 
 # File description page
 'file-anchor-link' => 'চিত্ৰ',
@@ -1984,6 +2007,9 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 'randompage' => 'যিকোনো পৃষ্ঠা',
 'randompage-nopages' => 'তলত দিয়া {{PLURAL:$2|নামস্থানত|নামস্থানসমূহত}} কোনো পৃষ্ঠা নাই: $1 ।',
 
+# Random page in category
+'randomincategory' => 'শ্ৰেণীৰ যিকোনো পৃষ্ঠা',
+
 # Random redirect
 'randomredirect' => 'অনিৰ্ধাৰিত পুননিৰ্দেশ',
 'randomredirect-nopages' => '"$1" নামস্থানত কোনো পুননিৰ্দেশ নাই ।',
@@ -2517,7 +2543,7 @@ $1',
 'contributions' => '{{GENDER:$1|সদস্যৰ}} বৰঙণিসমূহ',
 'contributions-title' => '$1ৰ বৰঙণিসমূহ',
 'mycontris' => 'বৰঙণিসমূহ',
-'contribsub2' => '$1 ৰ কাৰণে ($2)',
+'contribsub2' => '{{GENDER:$3|$1}} ($2)ৰ কাৰণে',
 'nocontribs' => 'এই গুণসমূহৰ লগত মিল থকা কোনো সালসলনি পোৱা নগ’ল ।',
 'uctop' => '(বৰ্তমান)',
 'month' => 'এই মাহৰ পৰা (আৰু আগৰ):',
@@ -2834,7 +2860,7 @@ $1ৰ অৱৰোধৰ কাৰণ: "$2"',
 'allmessagesdefault' => 'সাধাৰণ বাৰ্তা পাঠ্য',
 'allmessagescurrent' => 'বৰ্তমানৰ বাৰ্তাৰ পাঠ',
 'allmessagestext' => 'মিডিয়াৱিকি নামস্থানত থকা প্ৰণালী বাৰ্তাসমূহৰ তালিকা ইয়াত দিয়া হৈছে ।
-যদি আপুনি মিডিয়াৱিকিৰ স্থানীয়কৰণত আগ্ৰহী, তেন্তে অনুগ্ৰহ কৰি [//www.mediawiki.org/wiki/Localisation মিডিয়াৱিকি স্থানীয়কৰণ] আৰু [//translatewiki.net translatewiki.net] চাওক ।',
+যদি আপুনি মিডিয়াৱিকিৰ স্থানীয়কৰণত আগ্ৰহী, তেন্তে অনুগ্ৰহ কৰি [https://www.mediawiki.org/wiki/Localisation মিডিয়াৱিকি স্থানীয়কৰণ] আৰু [//translatewiki.net translatewiki.net] চাওক ।',
 'allmessagesnotsupportedDB' => "এই পৃষ্ঠা ব্যৱহাৰ কৰিব নোৱাৰি কাৰণ '''\$wgUseDatabaseMessages''' নিষ্ক্ৰিয় কৰা হৈছে ।",
 'allmessages-filter-legend' => 'ছেকনী',
 'allmessages-filter' => 'স্বনিৰ্বাচন অৱস্থাৰে পৰিস্ৰাৱন কৰক:',
@@ -3120,7 +3146,7 @@ $1',
 'svg-long-desc' => 'SVG ফাইল, সাধাৰণতঃ $1 × $2 পিক্সেল, ফাইল মাত্ৰা: $3',
 'svg-long-desc-animated' => 'এনিমেটেড SVG ফাইল, সাধাৰণতে $1 × $2 পিক্সেল, ফাইলৰ আকাৰ: $3',
 'svg-long-error' => 'অবৈধ SVG ফাইল: $1',
-'show-big-image' => "সম্পূৰ্ণ ৰিজ'লিউশ্যন",
+'show-big-image' => 'মূল ফাইল',
 'show-big-image-preview' => 'এই খচৰাৰ আকাৰ: $1.',
 'show-big-image-other' => "আন {{PLURAL:$2|ৰিজ'লিউশ্যন|ৰিজ'লিউশ্যনসমূহ}}: $1।",
 'show-big-image-size' => '$1 × $2 পিক্সেল',
@@ -3588,7 +3614,7 @@ Any subsequent links on the same line are considered to be exceptions, i.e. page
 
 # External editor support
 'edit-externally' => 'বাহিৰা আহিলা ব্যৱহাৰ কৰি এই ফাইলটো সম্পাদনা কৰক ।',
-'edit-externally-help' => 'অধিক তথ্যৰ কাৰণে [//www.mediawiki.org/wiki/Manual:External_editors প্ৰস্তুত কৰা নিৰ্দেশনা] চাওক ।',
+'edit-externally-help' => 'অধিক তথ্যৰ কাৰণে [https://www.mediawiki.org/wiki/Manual:External_editors প্ৰস্তুত কৰা নিৰ্দেশনা] চাওক ।',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'সকলো',
@@ -3777,7 +3803,7 @@ $5
 'version-hook-subscribedby' => 'চাবস্ক্ৰাইব কৰিছে',
 'version-version' => '(সংস্কৰণ $1)',
 'version-license' => 'অনুজ্ঞাপত্ৰ',
-'version-poweredby-credits' => "এই ৱিকি '''[//www.mediawiki.org/ মিডিয়াৱিকিৰ]''' দ্বাৰা প্ৰচলিত , কপিৰাইট © ২০০১-$1 $2.",
+'version-poweredby-credits' => "এই ৱিকি '''[https://www.mediawiki.org/ মিডিয়াৱিকিৰ]''' দ্বাৰা প্ৰচলিত , কপিৰাইট © ২০০১-$1 $2.",
 'version-poweredby-others' => 'অন্য',
 'version-credits-summary' => 'আমি নিম্নোক্ত ব্যক্তিসকলক তেওঁলোকে [[Special:Version|মিডিয়াৱিকি]]লৈ দিয়া দিয়া বৰঙনিৰ বাবে চিনাকী  কৰিব বিচাৰিছো।',
 'version-license-info' => "মিডিয়াৱিকি এটা বিনামূলীয়া চফ্টৱেৰ; আপুনি Free Software Foundation -ৰ দ্বাৰা প্ৰকাশিত GNU General Public License -ৰ চুক্তিসমূহৰ অন্তৰ্গত ইয়াক পুনৰ বিতৰণ কৰিব পাৰিব অথবা সলনি কৰিব পাৰিব; হয়তো অনুজ্ঞাপত্ৰৰ সংস্কৰণ ২ 
@@ -3819,8 +3845,7 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'বিশেষ পৃষ্ঠাসমূহ',
-'specialpages-note' => '----
-* সাধাৰণ বিশেষ পৃষ্ঠাসমূহ।
+'specialpages-note' => '* সাধাৰণ বিশেষ পৃষ্ঠাসমূহ।
 * <span class="mw-specialpagerestricted">সীমাবদ্ধ বিশেষ পৃষ্ঠাসমূহ।</span>
 * <span class="mw-specialpagecached">কেশ্ব কৰা বিশেষ পৃষ্ঠাসমূহ (অপ্ৰচলিতও হ\'ব পাৰে)।</span>',
 'specialpages-group-maintenance' => 'তত্বাৱধানৰ কাৰ্যবিৱৰণীসমূহ',
@@ -3859,7 +3884,10 @@ $5
 'tags-tag' => 'টেগ নাম',
 'tags-display-header' => 'পৰিৱৰ্তন তালিকাসমূহত ৰূপ',
 'tags-description-header' => 'অৰ্থৰ পূৰ্ণ বৰ্ণনা',
+'tags-active-header' => 'সক্ৰিয়?',
 'tags-hitcount-header' => 'টেগকৃত সালসলনি',
+'tags-active-yes' => 'হয়',
+'tags-active-no' => 'নহয়',
 'tags-edit' => 'সম্পাদনা',
 'tags-hitcount' => '$1 {{PLURAL:$1|সাল-সলনি|সাল-সলনিসমূহ}}',
 
@@ -3880,6 +3908,7 @@ $5
 'dberr-problems' => 'দুঃখিত! চাইটটোত কিছু কাৰিকৰী সমস্যা হৈছে ।',
 'dberr-again' => "অলপ সময় অপেক্ষা কৰি পুনৰ আপল'ডৰ চেষ্টা কৰক ।",
 'dberr-info' => '(তথ্যকোষৰ চাৰ্ভাৰৰ লগত যোগাযোগ কৰিব নোৱাৰি: $1)',
+'dberr-info-hidden' => '(তথ্যকোষৰ চাৰ্ভাৰৰ লগত যোগাযোগ কৰিব নোৱাৰি)',
 'dberr-usegoogle' => 'এই পৰিস্থিতিত আপুনি গুগলৰ মাধ্যমেৰে অনুসন্ধান কৰিব পাৰে ।',
 'dberr-outofdate' => "মন কৰক যে, আমাৰ বিষয়বস্তু সম্পৰ্কে তেওঁলোকৰ সূচী পুৰণা হ'ব পাৰে ।",
 'dberr-cachederror' => "এইখন অনুৰোধ কৰা পৃষ্ঠাৰ কেচ্‌ড লিপি, যিখন নবীকৰণ নকৰাও হ'ব পাৰে ।",
index 671c716..eefff5e 100644 (file)
@@ -475,7 +475,8 @@ L'alministrador que lu bloquió dio esti motivu: «$3».",
 'invalidtitle-knownnamespace' => "Títulu inválidu col espaciu de nomes «$2» ya'l testu «$3»",
 'invalidtitle-unknownnamespace' => "Títulu inválidu col númberu $1 d'espaciu de nomes desconocíu ya'l testu «$2»",
 'exception-nologin' => 'Nun anició sesión',
-'exception-nologin-text' => "Esta páxina o aición necesita qu'anicies sesión nesta wiki.",
+'exception-nologin-text' => 'Por favor, [[Special:Userlogin|anicie sesión]] pa tener accesu a esta páxina o aición.',
+'exception-nologin-text-manual' => 'Por favor, $1 pa tener accesu a esta páxina o aición.',
 
 # Virus scanner
 'virus-badscanner' => "Fallu de configuración: Escáner de virus desconocíu: ''$1''",
@@ -522,7 +523,7 @@ Nun t'escaezas de camudar les tos [[Special:Preferences|preferencies de {{SITENA
 'gotaccount' => '¿Yá tienes una cuenta? $1.',
 'gotaccountlink' => 'Entrar',
 'userlogin-resetlink' => "¿Escaeció los datos d'accesu?",
-'userlogin-resetpassword-link' => 'Reaniciar la contraseña',
+'userlogin-resetpassword-link' => '¿Escaeció la contraseña?',
 'helplogin-url' => 'Help:Aniciar sesión',
 'userlogin-helplink' => "[[{{MediaWiki:helplogin-url}}|Ayuda p'aniciar sesión]]",
 'userlogin-loggedin' => "Yá anició sesión como {{GENDER:$1|$1}}.
@@ -602,8 +603,8 @@ Pa evitar abusos, namái s'unviará un corréu de reaniciu cada {{PLURAL:$1|hora
 'mailerror' => 'Fallu al unviar el corréu: $1',
 'acct_creation_throttle_hit' => "Los visitantes d'esta wiki qu'usen la to direición IP yá crearon güei {{PLURAL:$1|1 cuenta|$1 cuentes}}, que ye'l máximu almitíu nesti periodu de tiempu.
 Poro, los visitantes qu'usen esta direición IP nun puen crear más cuentes de momentu.",
-'emailauthenticated' => "La to direición de corréu electrónicu confirmóse'l $2 a les $3.",
-'emailnotauthenticated' => "La to direición de corréu electrónicu inda nun se comprobó.
+'emailauthenticated' => "La so direición de corréu electrónicu confirmóse'l $2 a les $3.",
+'emailnotauthenticated' => "La so direición de corréu electrónicu inda nun se confirmó.
 Nun s'unviará corréu pa nenguna de les funciones siguientes.",
 'noemailprefs' => 'Conseña una direición de corréu electrónicu nes tos preferencies pa que funcionen eses carauterístiques.',
 'emailconfirmlink' => 'Confirmar la direición de corréu electrónicu',
@@ -1048,18 +1049,18 @@ Otros alministradores de {{SITENAME}} van siguir pudiendo acceder al conteníu a
 'revdelete-confirm' => "Confirma que quies facer esto, qu'entiendes les consecuencies, y que vas facer esto d'alcuerdo [[{{MediaWiki:Policy-url}}|cola política]].",
 'revdelete-suppress-text' => "La supresión '''namái''' tendría d'usase nos casos darréu:
 * Información que pudiere ser bilordiosa
-* Información personal non apropiada
-*: ''direiciones de llares y númberos de teléfonu, númberos de seguridá social, etc.''",
+* Información personal inapropiada
+*: ''direiciones de llares y númberos de teléfonu, númberos d'identidá nacional, etc.''",
 'revdelete-legend' => 'Establecer torgues de visibilidá',
-'revdelete-hide-text' => 'Tapecer testu de la revisión',
+'revdelete-hide-text' => 'Testu de la revisión',
 'revdelete-hide-image' => 'Tapecer el conteníu del ficheru',
 'revdelete-hide-name' => 'Tapecer aición y oxetivu',
-'revdelete-hide-comment' => "Tapecer el resume d'edición",
-'revdelete-hide-user' => "Tapecer el nome d'usuariu/IP del editor",
+'revdelete-hide-comment' => "Resume d'edición",
+'revdelete-hide-user' => 'Nome del editor/Direición IP',
 'revdelete-hide-restricted' => "Desaniciar datos de los alministradores y d'otros",
 'revdelete-radio-same' => '(ensin cambeos)',
-'revdelete-radio-set' => '',
-'revdelete-radio-unset' => 'Non',
+'revdelete-radio-set' => 'Tapecíu',
+'revdelete-radio-unset' => 'Visible',
 'revdelete-suppress' => "Desaniciar datos de los alministradores igual que d'otros",
 'revdelete-unsuppress' => 'Desaniciar les torgues nes revisiones restauraes',
 'revdelete-log' => 'Motivu:',
@@ -1214,7 +1215,7 @@ Se puen alcontrar más detalles nel [{{fullurl:{{#Special:Log}}/delete|page={{FU
 'mypreferences' => 'Preferencies',
 'prefs-edits' => "Númberu d'ediciones:",
 'prefsnologin' => 'Nun anició sesión',
-'prefsnologintext' => 'Necesita <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} aniciar sesión]</span> pa camudar la configuración d\'usuariu.',
+'prefsnologintext2' => "Por favor, $1 pa configurar les preferencies d'usuariu",
 'changepassword' => 'Camudar la clave',
 'prefs-skin' => 'Apariencia',
 'skin-preview' => 'Vista previa',
@@ -2249,7 +2250,7 @@ Ponte en contautu col editor:
 corréu: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-En casu de producise más cambios, nun habrá más notificaciones a nun ser que visites esta páxina. Tamién podríes reaniciar na to llista de vixilancia los marcadores de notificación de toles páxines que tengas vixilaes.
+En casu de producise más actividá, nun habrá más notificaciones a nun ser que visites esta páxina teniendo sesión aniciada. Tamién podríes reaniciar na to llista de vixilancia los marcadores de notificación de toles páxines que tengas vixilaes.
 
 El to abertable sistema de notificación de {{SITENAME}}
 
@@ -2769,7 +2770,7 @@ Por último, tamién pues usar un enllaz: p.e. [[{{#Special:Export}}/{{MediaWiki
 'allmessagesdefault' => 'Testu predetermináu',
 'allmessagescurrent' => 'Testu actual',
 'allmessagestext' => 'Esta ye una llista de los mensaxes de sistema disponibles nel espaciu de nomes de MediaWiki.
-Por favor visita [//www.mediawiki.org/wiki/Localisation Llocalización de MediaWiki] y [//translatewiki.net translatewiki.net] si quies contribuyer a la llocalización xenérica de MediaWiki.',
+Por favor visita [https://www.mediawiki.org/wiki/Localisation Llocalización de MediaWiki] y [//translatewiki.net translatewiki.net] si quies contribuyer a la llocalización xenérica de MediaWiki.',
 'allmessagesnotsupportedDB' => "Nun pue usase '''{{ns:special}}:Allmessages''' porque '''\$wgUseDatabaseMessages''' ta deshabilitáu.",
 'allmessages-filter-legend' => 'Peñerar',
 'allmessages-filter' => 'Peñerar por estáu de personalización:',
@@ -2996,6 +2997,7 @@ Probablemente tea causao por un enllaz a un sitiu esternu de la llista prieta.',
 'pageinfo-length' => 'Llonxitú de la páxina (en bytes)',
 'pageinfo-article-id' => 'ID de la páxina',
 'pageinfo-language' => 'Llingua del conteníu de la páxina',
+'pageinfo-content-model' => 'Plantía del conteníu de la páxina',
 'pageinfo-robot-policy' => 'Indexación por robots',
 'pageinfo-robot-index' => 'Permitío',
 'pageinfo-robot-noindex' => 'Torgao',
@@ -3080,7 +3082,7 @@ Al executalu pues comprometer el to sistema.",
 'svg-long-desc' => 'ficheru SVG, $1 × $2 píxels nominales, tamañu de ficheru: $3',
 'svg-long-desc-animated' => 'Ficheru SVG animáu; nominalmente de $1 × $2 pixels; tamañu del ficheru: $3',
 'svg-long-error' => 'Ficheru SVG inválidu: $1',
-'show-big-image' => 'Resolución completa',
+'show-big-image' => 'Ficheru orixinal',
 'show-big-image-preview' => "Tamañu d'esta previsualización: $1.",
 'show-big-image-other' => '{{PLURAL:$2|Otra resolución|Otres resoluciones}}: $1.',
 'show-big-image-size' => '$1 × $2 pixels',
@@ -3552,7 +3554,7 @@ Los demás tarán anubríos de mou predetermináu.
 
 # External editor support
 'edit-externally' => 'Editar esti ficheru usando una aplicación esterna',
-'edit-externally-help' => '(Pa más información ver les [//www.mediawiki.org/wiki/Manual:External_editors instrucciones de configuración])',
+'edit-externally-help' => '(Pa más información ver les [https://www.mediawiki.org/wiki/Manual:External_editors instrucciones de configuración])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'too',
@@ -3652,6 +3654,9 @@ Por favor confirma que daveres quies volver a crear esta páxina.",
 'confirm-unwatch-button' => 'Aceutar',
 'confirm-unwatch-top' => '¿Desaniciar esta páxina de la to llista de vixilancia?',
 
+# Separators for various lists, etc.
+'quotation-marks' => '«$1»',
+
 # Multipage image navigation
 'imgmultipageprev' => '← páxina anterior',
 'imgmultipagenext' => 'páxina siguiente →',
@@ -3739,7 +3744,7 @@ Tamién pues [[Special:EditWatchlist|usar l'editor estándar]].",
 'version-hook-subscribedby' => 'Suscritu por',
 'version-version' => '(Versión $1)',
 'version-license' => 'Llicencia',
-'version-poweredby-credits' => "Esta wiki funciona con '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Esta wiki funciona con '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'otros',
 'version-poweredby-translators' => 'los traductores de translatewiki.net',
 'version-credits-summary' => 'Nos prestaría dar reconocimientu a les siguientes persones pola so contribución a [[Special:Version|MediaWiki]].',
@@ -3758,7 +3763,7 @@ Tendría d'haber recibío [{{SERVER}}{{SCRIPTPATH}}/COPYING una copia de la Llic
 # Special:Redirect
 'redirect' => "Redireición por nome de ficheru, o ID d'usuariu o de revisión",
 'redirect-legend' => 'Redirixir a un ficheru o una páxina',
-'redirect-summary' => "Esta páxina especial redirixe a un ficheru (dando'l nome), una páxina (dando una ID de revisión) o una páxina d'usuariu (dando una ID d'usuariu).",
+'redirect-summary' => "Esta páxina especial redirixe a un ficheru (dando'l so nome), una páxina (dando una ID de revisión) o una páxina d'usuariu (dando un númberu d'ID d'usuariu). Usu: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], o [[{{#Special:Redirect}}/user/101]].",
 'redirect-submit' => 'Dir',
 'redirect-lookup' => 'Buscar:',
 'redirect-value' => 'Valor:',
@@ -3780,10 +3785,9 @@ Tendría d'haber recibío [{{SERVER}}{{SCRIPTPATH}}/COPYING una copia de la Llic
 
 # Special:SpecialPages
 'specialpages' => 'Páxines especiales',
-'specialpages-note' => '----
-* Páxines especiales normales.
-* <span class="mw-specialpagerestricted">Páxines especiales restrinxíes.</span>
-* <span class="mw-specialpagecached">Páxines especiales en caché (seique nun tean actualizaes).</span>',
+'specialpages-note-top' => 'Lleenda',
+'specialpages-note' => '* Páxines especiales normales.
+* <span class="mw-specialpagerestricted">Páxines especiales restrinxíes.</span>',
 'specialpages-group-maintenance' => 'Informes de mantenimientu',
 'specialpages-group-other' => 'Otres páxines especiales',
 'specialpages-group-login' => 'Entrar / crear cuenta',
index 3259115..2219e2e 100644 (file)
@@ -855,7 +855,6 @@ Kan ''all:'' laganeyal ta varafa exulera (gon keyaksexo is teza ikz-), oke wetce
 'mypreferences' => 'Jinaf lodamaceem',
 'prefs-edits' => 'Ota va betaks :',
 'prefsnologin' => 'Dogluyariskaf',
-'prefsnologintext' => 'Ede va favesiklodamaceem djubetal, gotil <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} dogluyarakiraf]</span>.',
 'changepassword' => 'Betara va remravlem',
 'prefs-skin' => 'Laviuca',
 'skin-preview' => 'Abdiwira',
@@ -1810,7 +1809,7 @@ bu ika int me zo rotarrundar.',
 'allmessagescurrent' => 'Noelaf krent',
 'allmessagestext' => 'Batcoba tir vexala dem bolkstakseem koe MediaWiki yoltxo.
 
-Va [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] is [//translatewiki.net translatewiki.net] vay woral ede va tulizukara va Mediawiki co-rowebel.',
+Va [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] is [//translatewiki.net translatewiki.net] vay woral ede va tulizukara va Mediawiki co-rowebel.',
 'allmessagesnotsupportedDB' => "Batu bu me zo rofaver kire '''\$wgUseDatabaseMessages''' mea tir tegis.",
 
 # Thumbnails
@@ -2192,7 +2191,7 @@ Kotari milconyafi gluyasiki roklon zo krafiar.',
 
 # External editor support
 'edit-externally' => 'Betara va bat iyeltak faveson va divef talpey',
-'edit-externally-help' => '(Ta lo giva va [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] disukel !)',
+'edit-externally-help' => '(Ta lo giva va [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] disukel !)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'kot',
index a39894c..8f09eae 100644 (file)
@@ -17,6 +17,7 @@
  * @author Gulmammad
  * @author Kaganer
  * @author Khan27
+ * @author Mushviq Abdulla
  * @author PPerviz
  * @author PrinceValiant
  * @author Sortilegus
@@ -123,6 +124,8 @@ $messages = array(
 'tog-diffonly' => 'Versiyaların müqayisəsi zamanı səhifənin məzmununu göstərmə',
 'tog-showhiddencats' => 'Gizli kateqoriyaları göstər',
 'tog-norollbackdiff' => 'Geri qaytardıqdan sonra, edilmiş dəyişikikləri dəyişikliklər siyahısından sil',
+'tog-useeditwarning' => 'Qeyd edilməmiş dəyişikliyə sahib bir dəyişiklik səhifəsindən çıxarkən məni xəbərdar et',
+'tog-prefershttps' => 'Sessiya aaçarkən hər zaman etibarlı bağlantıdan istifadə et.',
 
 'underline-always' => 'Həmişə',
 'underline-never' => 'Heç vaxt',
@@ -186,6 +189,18 @@ $messages = array(
 'oct' => 'Oktyabr',
 'nov' => 'Noyabr',
 'dec' => 'Dekabr',
+'january-date' => '$1 Yanvar',
+'february-date' => '$1 Fevral',
+'march-date' => '$1 Mart',
+'april-date' => '$1 Aprel',
+'may-date' => '$1 May',
+'june-date' => '$1 İyun',
+'july-date' => '$1 İyul',
+'august-date' => '$1 Avqust',
+'september-date' => ' $1 Sentyabr',
+'october-date' => '$1 Oktyabr',
+'november-date' => '$1 Noyabr',
+'december-date' => '$1 Dekabr',
 
 # Categories related messages
 'pagecategories' => '$1 {{PLURAL:$1|Kateqoriya|Kateqoriya}}',
@@ -211,6 +226,7 @@ $messages = array(
 'newwindow' => '(yeni pəncərədə açılır)',
 'cancel' => 'Ləğv et',
 'moredotdotdot' => 'Daha...',
+'morenotlisted' => 'Bu siyahı tam deyil.',
 'mypage' => 'Mənim səhifəm',
 'mytalk' => 'Danışıqlarım',
 'anontalk' => 'Bu IP-yə aid müzakirə',
@@ -266,6 +282,7 @@ $messages = array(
 'create-this-page' => 'Bu səhifəni yarat',
 'delete' => 'Sil',
 'deletethispage' => 'Bu səhifəni sil',
+'undeletethispage' => 'Bu səhifənin silmə əməliyyatını geri qaytar',
 'undelete_short' => '$1 {{PLURAL:$1|dəyişikliyi|dəyişiklikləri}} bərpa et',
 'viewdeleted_short' => '{{PLURAL:$1|bir silinmiş redaktəyə|$1 silinmiş redaktəyə}}',
 'protect' => 'Mühafizə et',
@@ -343,6 +360,10 @@ Bax: [[Special:Version|Versiyalar]].',
 'youhavenewmessages' => 'Hal-hazırda $1 var. ($2)',
 'newmessageslink' => 'yeni ismarıclar',
 'newmessagesdifflink' => 'Sonuncu və əvvəlki versiya arasındakı fərq',
+'youhavenewmessagesfromusers' => '{{PLURAL:$3|Başqa bir istifadəçidən|$3 istifadəçidən}} $1 var ($2).',
+'youhavenewmessagesmanyusers' => 'Bir çox istifadəçidən $1 var ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|yeni mesajınız|yeni mesajlarınız}}',
+'newmessagesdifflinkplural' => 'son {{PLURAL:$1|dəyişiklik|dəyişikliklər}}',
 'youhavenewmessagesmulti' => '"$1"da yeni mesajınız var.',
 'editsection' => 'redaktə',
 'editold' => 'redaktə',
@@ -396,6 +417,12 @@ Mövcud xüsusi səhifələrin siyahısı: [[Special:SpecialPages|Xüsusi səhif
 # General errors
 'error' => 'Xəta',
 'databaseerror' => 'Verilənlər bazası xətası',
+'databaseerror-text' => 'Bir verilənlər bazası sorğu xətası baş verdi.
+Bu proqramdan qaynaqlanan bir xətanı göstərmiş ola bilər.',
+'databaseerror-textcl' => 'Bir verilənlər bazası sorğu xətası baş verdi.',
+'databaseerror-query' => 'Sorğu: $1',
+'databaseerror-function' => 'Funksiya: $1',
+'databaseerror-error' => 'Xəta: $1',
 'laggedslavemode' => "'''Xəbərdarlıq:''' Səhifə son əlavələri əks etdirməyə bilər.",
 'readonly' => 'Verilənlər bazası bloklanıb',
 'enterlockreason' => 'Bloklamanın səbəbini və nəzərdə tutulan müddətini qeyd edin',
@@ -426,6 +453,9 @@ Xahiş edirik bunu bir [[Special:ListUsers/sysop|İdarəçilərə]], URL not ed
 'cannotdelete' => 'İstədiyiniz "$1" səhifə və ya faylını silmək mümkün deyil.
 Bu səhifə və ya fayl başqa bir istifadəçi tərəfindən silinmiş ola bilər.',
 'cannotdelete-title' => '"$1" səhifəsinin silinməsi mümkünsüzdür.',
+'delete-hook-aborted' => 'Silmə əməliyyatı qarmaq tərəfindən dayandırıldı. 
+Heç bir açıqlama edilmədi.',
+'no-null-revision' => '"$1" səhifəsi üçün yeni boş bir versiya yaradıla bilmədi',
 'badtitle' => 'Səhv başlıq',
 'badtitletext' => 'Axtarılan səhifə adı səhvdir və ya boşdur, ya da düzgün olmayan dillərarası, yaxud vikilərarası keçid istifadə edilib.
 Başlıqlarda istifadə edilməsi qadağan olunan bir və ya daha çox simvol istifadə edilmiş ola bilər.',
@@ -441,6 +471,7 @@ Sorğu: $2',
 'actionthrottledtext' => 'Anti-spam hərəkətləri səbəbilə, bir hərəkəti qısa bir zaman aralığında çoxetməniz əngəlləndi, və siz həddi aşmısınız. Lütfən bir neçə dəqiqə sonra yenidən yoxlayın.',
 'protectedpagetext' => 'Bu səhifə redaktə üçün bağlıdır.',
 'viewsourcetext' => 'Siz bu səhifənin məzmununu görə və köçürə bilərsiniz:',
+'viewyourtext' => "Bu səhifəyə '''etdiyiniz dəyişikliklərin''' mənbəyini görüntüləyib köçürə bilərsiniz:",
 'protectedinterface' => 'Bu səhifədə proqram təminatı üçün sistem məlumatları var və sui-istifadənin qarşısını almaq üçün mühafizə olunmalıdır.',
 'editinginterface' => "'''Diqqət!''' Siz proqram təminatı interfeysinin mətn olan səhifəsini redaktə edirsiniz.
 Onun dəyişdirilməsi digər istifadəçilərin interfeysinin xarici görünüşünə təsir göstərir.
@@ -448,9 +479,23 @@ Tərcümə üçün daha yaxşı olar ki, MediaWiki-nin lokallaşması üçün ol
 'cascadeprotected' => 'Səhifə mühafizə olunub, çünki o kaskad mühafizə olunan {{PLURAL:$1|növbəti səhifəyə|növbəti səhifələrə}} qoşulub:
 $2',
 'namespaceprotected' => 'Sizin adlarında $1 olan məqalələrdə redaktə etməyə icazəniz yoxdur.',
+'customcssprotected' => 'Bu səhifəni redaktə etmə izniniz yoxdur, çünki bu səhifə başqa bir istifadəçinin fərdi parametrlərinə sahibdir.',
+'customjsprotected' => 'Bu Java Script səhifəsini redaktə etmə izniniz yoxdur, çünki bu səhifə başqa bir istifadəçinin fərdi parametrlərinə sahibdir.',
+'mycustomcssprotected' => 'Bu CSS ssəhifəsini redaktə etmə izniniz yoxdur.',
+'mycustomjsprotected' => 'Bu JavaScript səhifəsini redaktə etmə izniniz yoxdur.',
+'myprivateinfoprotected' => 'Sizin özəl məlumatlarınızı redaktə etmə izniniz yoxdur.',
+'mypreferencesprotected' => 'Seçimlərinizi redaktə etmək üçün izniniz yoxdur.',
 'ns-specialprotected' => 'Xüsusi səhifələr redaktə oluna bilməz.',
 'titleprotected' => 'Bu adda səhifənin yaradılması istifadəçi [[User:$1|$1]] tərəfindən qadağan edilmişdir.
 Göstərilən səbəb: "\'\'$2\'\'".',
+'filereadonlyerror' => '"$2" fayl deposundakı "$1" faylı ancaq oxunula bilən rejimdə olduğuna görə dəyişdirmək üçün açıla bimir.
+
+Rejimi qoyan nəzarətçinin izahı: "$3".',
+'invalidtitle-knownnamespace' => '"$2" sahə adı üçün "$3" mətni keçərsiz bir başlıq',
+'invalidtitle-unknownnamespace' => 'Naməlum $1 ad sahəsi miqdarı və keçərsiz "$2" başlıq',
+'exception-nologin' => 'Giriş edilməmişdir',
+'exception-nologin-text' => 'Bu səhifəyə daxi olmaq üçün [[Special:Userlogin|özünüzü təqdim]], edin.',
+'exception-nologin-text-manual' => ' bu səhifəyə və ya hərəkətə daxil olmaq üçün $1 lazımdır.',
 
 # Virus scanner
 'virus-badscanner' => "Düzgün olmayan konfiqurasiya: naməlum ''$1'' virus yoxlayanı",
@@ -465,9 +510,19 @@ Siz {{SITENAME}} saytını anonim olaraq istifadə etməyə davam edə bilər v
 'welcomecreation-msg' => 'Hesabınız yaradıldı.
 [[Special:Preferences|{{SITENAME}} nizamlamalarınızı]] dəyişdirməyi unutmayın.',
 'yourname' => 'İstifadəçi adı',
+'userlogin-yourname' => 'İstifadəçi adı',
+'userlogin-yourname-ph' => 'İstifadəçi adınızı daxil edin',
+'createacct-another-username-ph' => 'İstifadəçi adınızı daxil edin:',
 'yourpassword' => 'Parol:',
+'userlogin-yourpassword' => 'Parol',
+'userlogin-yourpassword-ph' => 'Parolunuzu daxil edin',
+'createacct-yourpassword-ph' => 'Parol daxil edin',
 'yourpasswordagain' => 'Parolu təkrar yazın:',
+'createacct-yourpasswordagain' => 'Parolu təsdiqlə',
+'createacct-yourpasswordagain-ph' => 'Parolu təkrar daxil edin',
 'remembermypassword' => 'Məni bu kompyuterdə xatırla (maksimum $1 {{PLURAL:$1|gün|gün}})',
+'userlogin-remembermypassword' => 'Sistemdə qal',
+'userlogin-signwithsecure' => 'Etibarlı bağlantıdan istifadə edin',
 'yourdomainname' => 'Sizin domain',
 'password-change-forbidden' => 'Bu vikidə parolunuzu dəyişdirə bilməzsiniz.',
 'externaldberror' => 'Verilənlər bazasının doğruluğunu yoxlamada xəta baş verib və yaxud sizin xarici istifadəçi qeydiyyatını yeniləmək hüququnuz yoxdur.',
@@ -479,18 +534,44 @@ Siz {{SITENAME}} saytını anonim olaraq istifadə etməyə davam edə bilər v
 'logout' => 'Çıxış',
 'userlogout' => 'Çıxış',
 'notloggedin' => 'Daxil olmamısınız',
+'userlogin-noaccount' => 'İstifadəçi hesabınız yoxdur?',
+'userlogin-joinproject' => '{{SITENAME}} qoşulun',
 'nologin' => "İstifadəçi hesabınız yoxdur? '''$1'''.",
 'nologinlink' => 'hesab açın',
 'createaccount' => 'Hesab aç',
 'gotaccount' => "Giriş hesabınız varsa '''$1'''.",
 'gotaccountlink' => 'Daxil olun',
 'userlogin-resetlink' => 'Daxilolma məlumatlarınızı unutmusunuz?',
-'createaccountmail' => 'e-məktub ilə',
+'userlogin-resetpassword-link' => 'Parolu unutdunuzmu?',
+'helplogin-url' => 'Help:Sistemə daxil ol',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|daxil olma haqqında yardım alın]]',
+'userlogin-loggedin' => 'Siz artıq {{GENDER:$1|$1}} kimi daxil olmusunuz.
+Aşağıdakı formadan istifadə edərək, bağqa bir istifadəçi kimi daxil ola bilərsiniz.',
+'userlogin-createanother' => 'Başqa bir istifadəçi hesabı yarat',
+'createacct-join' => 'Aşağıda məlumatlarınızı daxil edin.',
+'createacct-another-join' => 'Aşağıda yeni hesabınızın məlumatlarını daxil edin.',
+'createacct-emailrequired' => 'E-poçt ünvanı',
+'createacct-emailoptional' => 'E-poçt ünvanı (istəyə bağlı)',
+'createacct-email-ph' => 'E-poçt ünvanınızı daxil edin',
+'createacct-another-email-ph' => 'E-poçt ünvanını daxil edin',
+'createaccountmail' => 'Müvəqqəti təsadüfi bir paroldan istifadə edə bilər və bu parolu göstərilən e-poçt ünvanına göndərə bilərsiniz',
+'createacct-realname' => 'Gərçək adı (istəyə bağlı)',
 'createaccountreason' => 'Səbəb:',
+'createacct-reason' => 'Səbəb',
+'createacct-reason-ph' => 'Niyə başqa bir hesab yaradırsınız',
+'createacct-captcha' => 'Təhlükəsizlik nəzarəti',
+'createacct-imgcaptcha-ph' => 'Yuxarıda gördüyünüz mətni daxil edin',
+'createacct-submit' => 'İstifadəçi hesabı yarat',
+'createacct-another-submit' => 'Başqa bir istifadəçi hesabı yarat',
+'createacct-benefit-heading' => '{{SITENAME}} sizin kimi insanlar tərəfindən yaradılır.',
+'createacct-benefit-body1' => '$1 {{PLURAL:$1|redaktə}}',
+'createacct-benefit-body2' => '{{PLURAL:$1|səhifə|səhifə}}',
+'createacct-benefit-body3' => 'ən son {{PLURAL:$1|iştirakçılar|iştirakçılar}}',
 'badretype' => 'Daxil etdiyiniz parol uyğun gəlmir.',
 'userexists' => 'Daxil edilmiş ad artıq istifadədədir.
 Lütfən başqa ad seçin.',
 'loginerror' => 'Daxil olma xətası',
+'createacct-error' => 'Hesab yaratma xətası',
 'createaccounterror' => 'Bu istifadəçi adını yaratmaq mümkün olmadı: $1',
 'nocookiesnew' => 'İstifadəçi qeydiyyatı yaradıldı, lakin daxil ola bilmədiniz.
 {{SITENAME}} iştirakçıların təqdim olunması üçün "cookie"lərdən istifadə edir.
@@ -517,11 +598,16 @@ Düzgün yazdığına əmin ol.',
 'password-login-forbidden' => 'Bu istifadəçi adından və paroldan istifadə qadağan olunub.',
 'mailmypassword' => 'E-mail ilə yeni parol göndər',
 'passwordremindertitle' => '{{SITENAME}} parol xatırladıcı',
+'passwordremindertext' => 'Birisi (yəqin ki siz, $1 IP ünvanından) {{SITENAME}} ($4) üçün yeni bir parol göndərilməsini istədi. "$2" istifadəçisinə müvəqqəti olaraq "$3" parolu yaradıldı. Əgər bu sizin istyinizdirsə, hesab açıb yeni bir parol yaratmağınız vacibdir. Müvəqqəti parolunuzun müddəti {{PLURAL:$5|1 gün|$5 gün}} içində dolacaqdır.
+
+Parol dəyişdirməni siz istəməmisinizsə və ya parolunuzu xatırladınızsa və artıq parolunuzu dəyişdirmək isteəmirsinizsə; bu mesaja əhəmiyyət vermədən əski parolunuzdan istifadə etməyə davam edə bilərsiniz.',
 'noemail' => '"$1" adlı istifadəçi e-poçt ünvanını qeyd etməmişdir.',
 'noemailcreate' => 'Düzgün e-poçt ünvanı qeyd etməlisiniz',
 'passwordsent' => 'Yeni parol "$1" üçün qeydiyyata alınan e-poçt ünvanına göndərilmişdir.
 Xahiş edirik, e-məktubu aldıqdan sonra yenidən daxil olasınız.',
 'blocked-mailpassword' => 'İP ünvanınız bloklu olduğuna görə, yeni parol göndərmə mümkün deyil.',
+'eauthentsent' => 'Göstərilən bu e-poçt ünvanına məktub göndərildi. 
+Gələcəkdə e-poçt almaq üçün,bu e-poçtun sizə aid olması haqqındakı qaydalarla tanış olun.',
 'mailerror' => 'Məktub göndərmə xətası: $1',
 'acct_creation_throttle_hit' => 'Sizin IP ünvanınızdan bu viki-də son bir gün ərzində {{PLURAL:$1|1 hesab|$1 hesab}} açılmışdır. Bu bir gün ərzində icazə verilən maksimum say olduğu üçün, indiki anda daha çox hesab aça bilməzsiniz.',
 'emailauthenticated' => 'E-poçt ünvanınız $2 saat $3 tarixində təsdiq edilib.',
@@ -809,8 +895,8 @@ Mümkündür ki, bununla bağlı təfərrüatlar [{{fullurl:{{#Special:Log}}/del
 'revdelete-hide-user' => 'Redaktə müəllifinin istifadəçi adını/IP ünvanını gizlə',
 'revdelete-hide-restricted' => 'Məlumatları idarəçilərdən də gizlə',
 'revdelete-radio-same' => '(dəyişdirmə)',
-'revdelete-radio-set' => 'li',
-'revdelete-radio-unset' => 'Xeyr',
+'revdelete-radio-set' => 'Gizli',
+'revdelete-radio-unset' => 'Görünür',
 'revdelete-suppress' => 'Məlumatları idarəçilərdən də gizlə',
 'revdelete-unsuppress' => 'Bərpa olunan versiyalar üzərindən məhdudiyyətləri qaldır',
 'revdelete-log' => 'Səbəb:',
@@ -936,7 +1022,6 @@ $1",
 'mypreferences' => 'Nizamlamalar',
 'prefs-edits' => 'Redaktələrin sayı:',
 'prefsnologin' => 'Daxil olmamısınız',
-'prefsnologintext' => 'Nizamlamaları dəyişmək üçün <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} daxil olmaq]</span> zəruridir.',
 'changepassword' => 'Parolu dəyiş',
 'prefs-skin' => 'Cild',
 'skin-preview' => 'Sınaq görüntüsü',
@@ -2117,7 +2202,7 @@ Zəhmət olmasa başqa ad seçin.',
 'allmessagesname' => 'Ad',
 'allmessagesdefault' => 'İlkin mətn',
 'allmessagescurrent' => 'İndiki mətn',
-'allmessagestext' => 'Bu MediaWiki-də olan sistem mesajlarının siyahısıdır. Əgər MediaWiki-ni lokallaşdırmaq işində kömək etmək isəyirsinizsə, lütfən [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] və [//translatewiki.net translatewiki.net]-ə baş çəkin.',
+'allmessagestext' => 'Bu MediaWiki-də olan sistem mesajlarının siyahısıdır. Əgər MediaWiki-ni lokallaşdırmaq işində kömək etmək isəyirsinizsə, lütfən [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] və [//translatewiki.net translatewiki.net]-ə baş çəkin.',
 'allmessages-filter-legend' => 'Filtr',
 'allmessages-filter-unmodified' => 'Dəyişdirilməmiş',
 'allmessages-filter-all' => 'Hamısı',
@@ -2736,7 +2821,7 @@ Variants for Chinese language
 
 # External editor support
 'edit-externally' => 'Bu faylı kənar proqram vasitəsilə redaktə et.',
-'edit-externally-help' => '(Daha ətraflı məlumat üçün [//www.mediawiki.org/wiki/Manual:External_editors tətbiqetmə qaydalarına] baxa bilərsiniz)',
+'edit-externally-help' => '(Daha ətraflı məlumat üçün [https://www.mediawiki.org/wiki/Manual:External_editors tətbiqetmə qaydalarına] baxa bilərsiniz)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'hamısını',
@@ -2836,7 +2921,7 @@ Variants for Chinese language
 'version-hook-subscribedby' => 'Abunə olan',
 'version-version' => '(Versiya $1)',
 'version-license' => 'Lisenziya',
-'version-poweredby-credits' => "Bu wiki '''[//www.mediawiki.org/ MediaWiki]''' proqramı istifadə edilərək yaradılmışdır, müəlliflik © 2001-$1 $2.",
+'version-poweredby-credits' => "Bu wiki '''[https://www.mediawiki.org/ MediaWiki]''' proqramı istifadə edilərək yaradılmışdır, müəlliflik © 2001-$1 $2.",
 'version-poweredby-others' => 'digərləri',
 'version-software-product' => 'Məhsul',
 'version-software-version' => 'Versiya',
index e9423fb..b3594d2 100644 (file)
@@ -1175,7 +1175,6 @@ $1",
 'mypreferences' => 'ترجیحلر',
 'prefs-edits' => 'دَییشمه‌لرین سایی:',
 'prefsnologin' => 'گیرمه‌میسینیز',
-'prefsnologintext' => 'ایستیفاده‌چی تنظیملرینی دَییشمک اوچون، <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} گیرمه‌لیسینیز]</span>.',
 'changepassword' => 'رمزی دَییشدیر',
 'prefs-skin' => 'قابیق',
 'skin-preview' => 'اؤن‌گؤستریش',
@@ -2692,7 +2691,7 @@ $1 آدلی ایستیفاده‌چی‌نین باغلانما سببی: "$2"',
 'allmessagesname' => 'آد',
 'allmessagesdefault' => 'دفالت دانیشیق متنی',
 'allmessagescurrent' => 'ایندیکی متن',
-'allmessagestext' => 'بو مئدیا ویکی-ده اولان سیستئم مئساژلارینین سیاهی‌سی‌دیر. اگر مئدیا ویکی-نی لوکاللاش‌دیرماق ایشینده کؤمک ائتمک ایسییرسینیزسه، لطفاً [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] و [//translatewiki.net translatewiki.net]-ا باش چکین.',
+'allmessagestext' => 'بو مئدیا ویکی-ده اولان سیستئم مئساژلارینین سیاهی‌سی‌دیر. اگر مئدیا ویکی-نی لوکاللاش‌دیرماق ایشینده کؤمک ائتمک ایسییرسینیزسه، لطفاً [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] و [//translatewiki.net translatewiki.net]-ا باش چکین.',
 'allmessagesnotsupportedDB' => "'''\$ wgUseDatabaseMessages''' باغ‌لی اولدوغو اوچون '{{ns:special}}: Allmessages ایستیفاده‌یه آچیق دئییل.",
 'allmessages-filter-legend' => 'سۆزگَج',
 'allmessages-filter' => 'خصوصی ائتمک وضعیتینه گؤره فیلترلی:',
@@ -3442,7 +3441,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'بو فایلی خاریجی یازیلیم‌لا دَییشدیر',
-'edit-externally-help' => '(آرتیق بیلگیلر اوچون [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] صحیفه‌سینه باخ)',
+'edit-externally-help' => '(آرتیق بیلگیلر اوچون [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] صحیفه‌سینه باخ)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'بوتون',
@@ -3625,7 +3624,7 @@ $5
 'version-hook-subscribedby' => 'طرفیندن گیریش‌‌میش',
 'version-version' => '(نسخه $1)',
 'version-license' => 'لیسانس',
-'version-poweredby-credits' => "بو wیکی ' ''[//www.mediawiki.org/ مئدیاwیکی]'ع' پروقرامی ایستیفاده ائدیله‌رک يارادیلمیشدیر، یاازارلار © 2001-$1 $2.",
+'version-poweredby-credits' => "بو wیکی ' ''[https://www.mediawiki.org/ مئدیاwیکی]'ع' پروقرامی ایستیفاده ائدیله‌رک يارادیلمیشدیر، یاازارلار © 2001-$1 $2.",
 'version-poweredby-others' => 'آیریلار',
 'version-credits-summary' => 'بو ایستفاده چیلر دییشدیر لرینه گوره [[Special:Version|مئدیاویکی]] تانیش ائدیرم.',
 'version-license-info' => 'مئدیاویکی بیر اؤزگور یازیلیم‌دیر؛ سیز اونو، اؤزگور یازیلیم قورولوشو یایان GNU گنل عمومی لیسانسی اساسی‌له یئنی‌دن داغیدیب یوخسا دَییشه بیلرسینیز؛ یا لیسانسین ۲-نجی نوسخه‌سی، یا دا (اؤز سئچدیگینیزله) هر هانکی سونراکی نوسخه‌سی.
@@ -3665,8 +3664,7 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'اؤزل صحیفه‌لر',
-'specialpages-note' => '----
-* نورمال اؤزل صحیفه‌لر.
+'specialpages-note' => '* نورمال اؤزل صحیفه‌لر.
 * <span class="mw-specialpagerestricted">محدودلاشدیریلمیش اؤزل صحیفه‌لر.</span>',
 'specialpages-group-maintenance' => 'جاری مروزه‌لر',
 'specialpages-group-other' => 'دیگر خصوصی صحیفه‌لر',
index 61c065a..7b342e5 100644 (file)
@@ -591,8 +591,8 @@ $2',
 'yourdomainname' => 'Һеҙҙең домен',
 'password-change-forbidden' => 'Был викила серһүҙегеҙҙе үҙгәртә алмайһығыҙ.',
 'externaldberror' => 'Тышҡы мәғлүмәт базаһы менән танылғанда хата барлыҡҡа килде йәки тышҡы үҙ көйләүҙәрегеҙҙе үҙгәртер өсөн хоҡуҡтарығыҙ етәрле түгел.',
-'login' => 'Танышыу йәки теркәлеү',
-'nav-login-createaccount' => 'Танышыу йәки теркәлеү',
+'login' => 'Танылыу',
+'nav-login-createaccount' => 'Танылыу йәки теркәлеү',
 'loginprompt' => '{{SITENAME}} проектына кереү өсөн «cookies» рөхсәт ителгән булырға тейеш.',
 'userlogin' => 'Танылыу йәки теркәлеү',
 'userloginnocreate' => 'Танылыу',
@@ -1270,7 +1270,6 @@ $1",
 'mypreferences' => 'Көйләүҙәр',
 'prefs-edits' => 'Төҙәтеүҙәр һаны:',
 'prefsnologin' => 'Танылмағанһығыҙ',
-'prefsnologintext' => 'Ҡатнашыусы көйләүҙәрен үҙгәртеү өсөн, һеҙ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}}танылырға]</span> тейешһегеҙ.',
 'changepassword' => 'Серһүҙҙе үҙгәртергә',
 'prefs-skin' => 'Күренеш',
 'skin-preview' => 'Алдан байҡау',
@@ -2820,7 +2819,7 @@ $1 ҡатнашыусыһын бикләү сәбәбе: "$2"',
 'allmessagesdefault' => 'Ғәҙәттәге яҙма',
 'allmessagescurrent' => 'Хәҙерге яҙма',
 'allmessagestext' => 'Түбәндә MediaWiki исемдәр арауығында ҡулланылған система хәбәрҙәре исемлеге килтерелгән.
-Әгәр MediaWiki программаһын дөйөм локалләштереү эшенә үҙ өлөшөгөҙҙө керетергә теләһәгеҙ, [//www.mediawiki.org/wiki/Localisation MediaWiki программаһын локалләштереү] битен һәм [//translatewiki.net translatewiki.net] проектын ҡарап сығығыҙ.',
+Әгәр MediaWiki программаһын дөйөм локалләштереү эшенә үҙ өлөшөгөҙҙө керетергә теләһәгеҙ, [https://www.mediawiki.org/wiki/Localisation MediaWiki программаһын локалләштереү] битен һәм [//translatewiki.net translatewiki.net] проектын ҡарап сығығыҙ.',
 'allmessagesnotsupportedDB' => "Был бит ҡулланыла алмай, сөнки '''\$wgUseDatabaseMessages''' мөмкинлеге һүндерелгән.",
 'allmessages-filter-legend' => 'Һайлау',
 'allmessages-filter' => 'Үҙгәртеү торошо буйынса һайлау:',
@@ -3580,7 +3579,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'Был файлды тышҡы программа ҡулланып мөхәррирләргә',
-'edit-externally-help' => '(Тулыраҡ мәғлүмәт өсөн металағы [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] (инглизсә) битен ҡарағыҙ)',
+'edit-externally-help' => '(Тулыраҡ мәғлүмәт өсөн металағы [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] (инглизсә) битен ҡарағыҙ)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'бөтә',
@@ -3765,7 +3764,7 @@ $5
 'version-hook-subscribedby' => 'Яҙҙырылған',
 'version-version' => '($1 өлгөһө)',
 'version-license' => 'Рөхсәтнамә',
-'version-poweredby-credits' => "Был вики проект '''[//www.mediawiki.org/ MediaWiki]''' нигеҙендә эшләй, copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Был вики проект '''[https://www.mediawiki.org/ MediaWiki]''' нигеҙендә эшләй, copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'башҡалар',
 'version-poweredby-translators' => 'translatewiki.net тәржемәселәре',
 'version-credits-summary' => '[[Special:Version|MediaWiki]] үҫешенә өлөш индергәндәре өсөн киләһе ҡатнашыусыларға рәхмәт әйтәбеҙ.',
@@ -3806,13 +3805,12 @@ MediaWiki файҙалы булыр, тигән өмөттә, ләкин БЕР
 
 # Special:SpecialPages
 'specialpages' => 'Махсус биттәр',
-'specialpages-note' => '----
-* Ябай махсус биттәр.
+'specialpages-note' => '* Ябай махсус биттәр.
 * <span class="mw-specialpagerestricted">Сикле махсус биттәр.</span>
 * <span class="mw-specialpagecached">Кешланған махсус биттәр (иҫкергән булыуы мөмкин).</span>',
 'specialpages-group-maintenance' => 'Техник хеҙмәтләндереү хисапламалары',
 'specialpages-group-other' => 'Башҡа махсус биттәр',
-'specialpages-group-login' => 'Танышыу йәки теркәлеү',
+'specialpages-group-login' => 'Танылыу йәки теркәлеү',
 'specialpages-group-changes' => 'Һуңғы үҙгәртеүҙәр һәм журналдар',
 'specialpages-group-media' => 'Медиа хисапламалары һәм тейәүҙәр',
 'specialpages-group-users' => 'Ҡатнашыусылар һәм хоҡуҡтар',
index 1277b9a..fe704a7 100644 (file)
@@ -1425,7 +1425,7 @@ Bittschee gib außadem druntn in '''neichn''' Nãm vu da Seitn ei und schreib ku
 'allmessagesdefault' => 'Standardtext',
 'allmessagescurrent' => 'Aktuella Text',
 'allmessagestext' => 'Des is a Listen vo de MediaWiki-Systemtextt.
-Bsuach bittschee de Saiten [//www.mediawiki.org/wiki/Localisation MediaWiki-Lokalisiarung] und [//translatewiki.net translatewiki.net], wånn du de ån da Lokalisiarung vo MediaWiki betailing mechadst.',
+Bsuach bittschee de Saiten [https://www.mediawiki.org/wiki/Localisation MediaWiki-Lokalisiarung] und [//translatewiki.net translatewiki.net], wånn du de ån da Lokalisiarung vo MediaWiki betailing mechadst.',
 'allmessagesnotsupportedDB' => "'''Special:Allmessages''' is im Moment net möglich, wei de Datenbank offline is.",
 
 # Thumbnails
@@ -1567,7 +1567,7 @@ Weidane wean standardmassi ned ozoagt.
 
 # External editor support
 'edit-externally' => 'De Datei mid am externa Programm beorbatn',
-'edit-externally-help' => '(Schaug unter [//www.mediawiki.org/wiki/Manual:External_editors Installationsoweisunga] fia weidane Infos)',
+'edit-externally-help' => '(Schaug unter [https://www.mediawiki.org/wiki/Manual:External_editors Installationsoweisunga] fia weidane Infos)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'olle',
@@ -1653,7 +1653,7 @@ Bittscheh d' noraale Vurschau bnutzen.",
 'version-hook-subscribedby' => 'Aufruaff voh',
 'version-version' => '(Versión $1)',
 'version-license' => 'Lizenz',
-'version-poweredby-credits' => "Dé Nétzseiten braucht '''[//www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
+'version-poweredby-credits' => "Dé Nétzseiten braucht '''[https://www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
 'version-poweredby-others' => 'åndre',
 
 # Special:FileDuplicateSearch
@@ -1667,8 +1667,7 @@ Bittscheh d' noraale Vurschau bnutzen.",
 
 # Special:SpecialPages
 'specialpages' => 'Spezialseitn',
-'specialpages-note' => '----
-* Reguläre Speziaalseiten
+'specialpages-note' => '* Reguläre Speziaalseiten
 * <span class="mw-specialpagerestricted">Zuagrifsbschränkde Speziaalseiten</span>
 * <span class="mw-specialpagecached">Cachegenerrirde Speziaalseiten (Da Inhoid is méglicherweis vaoiterd)</span>',
 'specialpages-group-maintenance' => 'Wartungslisten',
index 22094fb..114cac8 100644 (file)
@@ -990,7 +990,6 @@ $1",
 'mypreferences' => 'منی ترجیحات',
 'prefs-edits' => 'تعداد اصلاحات:',
 'prefsnologin' => 'وارد نهیت',
-'prefsnologintext' => 'شما بایدن  <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} وارد بیت]</span> په تنظیم کتن ترجیحات.',
 'changepassword' => 'کلمه رمز عوض کن',
 'prefs-skin' => 'پوست',
 'skin-preview' => 'بازین',
@@ -2209,7 +2208,7 @@ $1',
 'allmessagesdefault' => 'پیش فرضین متن',
 'allmessagescurrent' => 'هنوکین متن',
 'allmessagestext' => 'شی یک لیستی چه کوله یان موجود ته نام فضای مدیا وی کی انت.
-لطفا بچاریت  [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] و [//translatewiki.net translatewiki.net] اگر شما لوٹیت ته ملکی کتن مدیا وی کی کمک کنیت.',
+لطفا بچاریت  [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] و [//translatewiki.net translatewiki.net] اگر شما لوٹیت ته ملکی کتن مدیا وی کی کمک کنیت.',
 'allmessagesnotsupportedDB' => "ای صفحه نه تونیت استفاده بیت په چی که'''\$wgUseDatabaseMessages''' غیر فعالنت.",
 'allmessages-filter-legend' => 'فیلتر',
 'allmessages-filter' => 'فیلتر گون حالت دلواهی',
@@ -2789,7 +2788,7 @@ Variants for Chinese language
 
 # External editor support
 'edit-externally' => 'ای صفحه یا اصلاح کن گون یک درآین برنامه ای',
-'edit-externally-help' => '(په گیشترین اطلاعات بچار[//www.mediawiki.org/wiki/Manual:External_editors setup instructions])',
+'edit-externally-help' => '(په گیشترین اطلاعات بچار[https://www.mediawiki.org/wiki/Manual:External_editors setup instructions])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'کل',
@@ -3006,8 +3005,7 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'حاصین صفحات',
-'specialpages-note' => '----
-* نرمال صفحات حاص.
+'specialpages-note' => '* نرمال صفحات حاص.
 *  <strong class="mw-specialpagerestricted">محدودین صفحات حاص.</strong>',
 'specialpages-group-maintenance' => 'گزارشات دارگ',
 'specialpages-group-other' => 'دگر حاصین صفحات',
index 848e65b..b45d121 100644 (file)
@@ -1060,10 +1060,10 @@ Ika puwedeng makakatanaw kaining diff; mga detalye puwedeng mananagboan sa [{{fu
 'revdelete-text' => "'''Pinagpurang mga pagbabago asin mga pangyayari mahihiling pa man sa historiyang pahina asin mga talaan, pero an mga parte kan saindang laman dae puwedeng magamit kan publiko.'''
 An ibang administrador sa {{SITENAME}} puwede pa man makagamit sa pinagtagong laman asin balewalaon an pagpura kaini giraray sa paagi nin kaparehong panlaog-olay, laen lang kun may kadagdagang pangilin an inilapat.",
 'revdelete-confirm' => 'Pakikumpirma tabi na ika tuyong gumibo kaini, na saimong naintindihan an mga konsekuwensiya, asin ta ika pinaghihimo ini na uyon sa [[{{MediaWiki:Policy-url}}|an palisiya]].',
-'revdelete-suppress-text' => "An paglulubog dapat '''sana''' makakagamit sana para sa minasunod na mga kaso:
+'revdelete-suppress-text' => "An paglulubog dapat '''sana''' magagamit para sa minasunod na mga kaso:
 *Potensiyal na libeloso an impormasyon
 *Bakong angay an personal na impormasyon
-*: ''mga address kan harong asin mga numero kan telepono, sosyal na seguridad, iba pa.''",
+*:''mga estada nin ini-erokan asin mga numero kan telepono, nasyunal na numero nin kabistohan, asin iba pa.''",
 'revdelete-legend' => 'Ilapat an mga restriksyon sa bisibilidad',
 'revdelete-hide-text' => 'Teksto nin rebisyon',
 'revdelete-hide-image' => 'Tagoon an laog kan file',
@@ -1072,8 +1072,8 @@ An ibang administrador sa {{SITENAME}} puwede pa man makagamit sa pinagtagong la
 'revdelete-hide-user' => 'Paraliwat na ngaran-paragamit/IP na estada',
 'revdelete-hide-restricted' => 'Ilubog an mga datos gikan sa mga administrador asin man kan iba',
 'revdelete-radio-same' => '(dae pagribayan)',
-'revdelete-radio-set' => 'Namamansayan',
-'revdelete-radio-unset' => 'Itinago',
+'revdelete-radio-set' => 'Itinago',
+'revdelete-radio-unset' => 'Hiling-hiling',
 'revdelete-suppress' => 'Dai ipahilíng an mga datos sa mga sysops asin sa mga iba pa',
 'revdelete-unsuppress' => 'Halîon an mga restriksyón sa mga ibinalík na pagpakarhay',
 'revdelete-log' => 'Rason:',
@@ -1231,7 +1231,6 @@ Prubaran na panigmitan an saimong kahaputan nin ''all:'' sa paghanap kan gabos n
 'mypreferences' => 'Mga Kamuyahan ko',
 'prefs-edits' => 'Bilang kan mga hirá:',
 'prefsnologin' => 'Dai nakalaog',
-'prefsnologintext' => 'Ika dapat na magin <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} nakalaog na]</span> tanganing tuytuyon an mga kabotan nin paragamit.',
 'changepassword' => 'Ribayan an sekretong panlaog',
 'prefs-skin' => "''Skin''",
 'skin-preview' => 'Tânawon',
@@ -2766,7 +2765,7 @@ Sa kaso kan huri, pwede ka man na maggamit nin takod, arog kan [[{{#Special:Expo
 'allmessagesdefault' => 'Panugmad na tekstong mensahe',
 'allmessagescurrent' => 'Presenteng teksto',
 'allmessagestext' => 'Ini sarong listahan nin pansistemang mga mensahe na mananagboan sa espasyong-pangaran kan MediaWiki.
-Pakibisita an [//www.mediawiki.org/wiki/Localisation Mediawiki Lokalisasyon] asin [//translatewiki.net translatewiki.net] kun boot mong mag-ambag sa henerikong lokalisasyon kan MediaWiki.',
+Pakibisita an [https://www.mediawiki.org/wiki/Localisation Mediawiki Lokalisasyon] asin [//translatewiki.net translatewiki.net] kun boot mong mag-ambag sa henerikong lokalisasyon kan MediaWiki.',
 'allmessagesnotsupportedDB' => "Dai pwedeng gamiton an '''{{ns:special}}:Allmessages''' ta sarado an '''\$wgUseDatabaseMessages'''.",
 'allmessages-filter-legend' => 'An Pansara',
 'allmessages-filter' => 'Pansara sa paagi kan estado nin kustomisasyon:',
@@ -2933,6 +2932,7 @@ Ika makakatanaw kan pinaggikanan',
 'tooltip-undo' => '"Gibohang ibalik" an mga pinagbagong pagliliwat asin bukasi an porma nin pagliliwat sa modong patanaw. Ini minatugot na magdadagdag nin rason sa sumaryo.',
 'tooltip-preferences-save' => 'Itagama an mga kagustuhan',
 'tooltip-summary' => 'Magkaag nin sarong halipot na sumaryo',
+'interlanguage-link-title' => '$1 - $2',
 
 # Stylesheets
 'common.css' => '/** an CSS na pigbugtak digdi maiaaplikar sa gabos na mga skin */',
@@ -2981,6 +2981,7 @@ Giboha na '''DAE''' paglaogan digde!",
 'pageinfo-length' => 'Kalabaan kan pahina (yaon sa mga bayta)',
 'pageinfo-article-id' => 'ID kan pahina',
 'pageinfo-language' => 'Lengguwahe kan laog sa pahina',
+'pageinfo-content-model' => 'Modelo nin kalamnan nin pahina',
 'pageinfo-robot-policy' => 'Pinaghuhukdo sa paagi nin mga robot',
 'pageinfo-robot-index' => 'Pinagtutugotan',
 'pageinfo-robot-noindex' => 'Dae pinagtutugotan',
@@ -3533,7 +3534,7 @@ Sublokas kan siyudad na ipinahiling',
 
 # External editor support
 'edit-externally' => 'Liwaton ining sagunson na pinaggagamit an panluwasan na aplikasyon',
-'edit-externally-help' => '(Hilngon an [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] para sa kadagdagang impormasyon)',
+'edit-externally-help' => '(Hilngon an [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] para sa kadagdagang impormasyon)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'gabos',
@@ -3717,7 +3718,7 @@ Pwede mo man [[Special:EditWatchlist|gamiton an standard editor]].',
 'version-hook-subscribedby' => 'Pinaghaguhot ni',
 'version-version' => '(Bersyon na $1)',
 'version-license' => 'Lisensiya',
-'version-poweredby-credits' => "An wiking ini pinagpagana kan '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "An wiking ini pinagpagana kan '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'mga iba pa',
 'version-poweredby-translators' => 'translatewiki.net na mga paradakit-taramon',
 'version-credits-summary' => 'Gusto niyamong rekonosiron an minasunod na mga persona nin huli kan saindang ambag sa [[Special:Version|Mediawiki]].',
@@ -3758,8 +3759,7 @@ Ika dapat na nakapagresibe na kan [{{SERVER}}{{SCRIPTPATH}}/COPYING sarong kopya
 
 # Special:SpecialPages
 'specialpages' => 'Mga espesyal na pahina',
-'specialpages-note' => '----
-* Normal espesyal na mga pahina.
+'specialpages-note' => '* Normal espesyal na mga pahina.
 * <span class="mw-specialpagerestricted">Restriktadong espesyal na mga pahina.</span>',
 'specialpages-group-maintenance' => 'Mga talaan nin pagpangataman',
 'specialpages-group-other' => 'Iba pang mga espesyal na pahina',
index 85dab07..1170a91 100644 (file)
@@ -20,6 +20,7 @@
  * @author Urhixidur
  * @author Wizardist
  * @author Yury Tarasievich
+ * @author Дзяніс Тутэйшы
  * @author Тест
  * @author Хомелка
  * @author Чаховіч Уладзіслаў
@@ -105,10 +106,10 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Праўка падраздзелаў па правым пстрыку на загалоўку (Яваскрыпт)',
 'tog-showtoc' => 'Паказваць змест (для старонак, дзе больш за 3 падзагалоўкі)',
 'tog-rememberpassword' => 'Памятаць уваходныя даныя ў гэтым браўзеры (не даўжэй за $1 {{PLURAL:$1|дзень|дні|дзён}})',
-'tog-watchcreations' => 'СÑ\82аÑ\80онкÑ\96 Ñ\96 Ñ\84айлÑ\8b, Ñ\81Ñ\82воÑ\80анÑ\8bÑ\8f Ð¼Ð½Ð¾Ð¹, Ð´Ð°Ð´Ð°Ñ\8eÑ\86Ñ\86а Ð´Ð° Ð½Ð°Ð·Ñ\96Ñ\80анага',
-'tog-watchdefault' => 'СÑ\82аÑ\80онкÑ\96 Ñ\96 Ñ\84айлÑ\8b Ð¿Ð°Ñ\81лÑ\8f Ð¼Ð°Ñ\96Ñ\85 Ð¿Ñ\80авак Ð´Ð°Ð´Ð°Ñ\8eÑ\86Ñ\86а Ð´Ð° Ð½Ð°Ð·Ñ\96Ñ\80анага',
-'tog-watchmoves' => 'СÑ\82аÑ\80онкÑ\96 Ñ\96 Ñ\84айлÑ\8b, Ð¿ÐµÑ\80анеÑ\81енÑ\8bÑ\8f Ð¼Ð½Ð¾Ð¹ Ð¿Ð°Ð´ Ñ\96нÑ\88Ñ\83Ñ\8e Ð½Ð°Ð·Ð²Ñ\83, Ð´Ð°Ð´Ð°Ñ\8eÑ\86Ñ\86а Ð´Ð° Ð½Ð°Ð·Ñ\96Ñ\80анага',
-'tog-watchdeletion' => 'СÑ\82аÑ\80онкÑ\96 Ñ\96 Ñ\84айлÑ\8b, Ñ\81Ñ\86Ñ\91Ñ\80Ñ\82Ñ\8bÑ\8f Ð¼Ð½Ð¾Ð¹, Ð´Ð°Ð´Ð°Ñ\8eÑ\86Ñ\86а Ð´Ð° Ð½Ð°Ð·Ñ\96Ñ\80анага',
+'tog-watchcreations' => 'Ð\94абаÑ\9eлÑ\8fÑ\86Ñ\8c Ñ\81Ñ\82воÑ\80анÑ\8bÑ\8f Ð¼Ð½Ð¾Ñ\8e Ñ\81Ñ\82аÑ\80онкÑ\96 Ñ\96 Ñ\84айлÑ\8b Ñ\9e Ð¼Ð¾Ð¹ Ñ\81пÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80аннÑ\8f',
+'tog-watchdefault' => 'Ð\94абаÑ\9eлÑ\8fÑ\86Ñ\8c Ñ\81Ñ\82аÑ\80онкÑ\96 Ñ\96 Ñ\84айлÑ\8b Ð¿Ð°Ñ\81лÑ\8f Ð¼Ð°Ñ\96Ñ\85 Ð¿Ñ\80авак Ñ\83 Ð¼Ð¾Ð¹ Ñ\81пÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80аннÑ\8f',
+'tog-watchmoves' => 'Ð\94абаÑ\9eлÑ\8fÑ\86Ñ\8c Ð¿ÐµÑ\80айменаванÑ\8bÑ\8f Ð¼Ð½Ð¾Ð¹ Ñ\81Ñ\82аÑ\80онкÑ\96 Ñ\96 Ñ\84айлÑ\8b Ñ\9e Ð¼Ð¾Ð¹ Ñ\81пÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80аннÑ\8f',
+'tog-watchdeletion' => 'Ð\94абаÑ\9eлÑ\8fÑ\86Ñ\8c Ñ\81Ñ\86Ñ\91Ñ\80Ñ\82Ñ\8bÑ\8f Ð¼Ð½Ð¾Ð¹ Ñ\81Ñ\82аÑ\80онкÑ\96 Ñ\96 Ñ\84айлÑ\8b Ñ\9e Ð¼Ð¾Ð¹ Ñ\81пÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80аннÑ\8f',
 'tog-minordefault' => 'Пачынаць кожную праўку як дробную',
 'tog-previewontop' => 'Папярэдні паказ — над рэдактарскім полем',
 'tog-previewonfirst' => 'Папярэдні паказ пры першай праўцы',
@@ -125,9 +126,9 @@ $messages = array(
 'tog-watchlisthideown' => 'Не паказваць у назіраным сваіх правак',
 'tog-watchlisthidebots' => 'Не паказваць у назіраным правак, зробленых робатамі',
 'tog-watchlisthideminor' => 'Не паказваць у назіраным дробных правак',
-'tog-watchlisthideliu' => 'Ð\91ез Ð¿Ð°ÐºÐ°Ð·Ñ\83 Ð¿Ñ\80авак Ñ\83дзелÑ\8cнÑ\96каÑ\9e Ð· Ð»Ñ\96кÑ\83 Ð½Ð°Ð·Ñ\96Ñ\80анага',
-'tog-watchlisthideanons' => 'Ð\91ез Ð¿Ð°ÐºÐ°Ð·Ñ\83 Ð°Ð½Ð°Ð½Ñ\96мнÑ\8bÑ\85 Ð¿Ñ\80авак Ð· Ð»Ñ\96кÑ\83 Ð½Ð°Ð·Ñ\96Ñ\80анага',
-'tog-watchlisthidepatrolled' => 'Ð\91ез Ð¿Ð°ÐºÐ°Ð·Ñ\83 Ñ\9eÑ\85валенÑ\8bÑ\85 Ð¿Ñ\80авак Ñ\83 Ð¿ÐµÑ\80алÑ\96кÑ\83 Ð½Ð°Ð·Ñ\96Ñ\80анага',
+'tog-watchlisthideliu' => 'Ð\9dе Ð¿Ð°ÐºÐ°Ð·Ð²Ð°Ñ\86Ñ\8c Ð¿Ñ\80авак Ð·Ð°Ñ\80Ñ\8dгÑ\96Ñ\81Ñ\82Ñ\80аванÑ\8bÑ\85 Ñ\83дзелÑ\8cнÑ\96каÑ\9e Ñ\83 Ð°Ñ\80Ñ\82Ñ\8bкÑ\83лаÑ\85 Ñ\81а Ñ\81пÑ\96Ñ\81а Ð½Ð°Ð·Ñ\96Ñ\80аннÑ\8f',
+'tog-watchlisthideanons' => 'Ð\9dе Ð¿Ð°ÐºÐ°Ð·Ð²Ð°Ñ\86Ñ\8c Ð°Ð½Ð°Ð½Ñ\96мнÑ\8bÑ\85 Ð¿Ñ\80авак Ñ\83 Ð°Ñ\80Ñ\82Ñ\8bкÑ\83лаÑ\85 Ñ\81а Ñ\81пÑ\96Ñ\81а Ð½Ð°Ð·Ñ\96Ñ\80аннÑ\8f',
+'tog-watchlisthidepatrolled' => 'Ð\9dе Ð¿Ð°ÐºÐ°Ð·Ð²Ð°Ñ\86Ñ\8c Ñ\83Ñ\85валенÑ\8bÑ\85 Ð¿Ñ\80авак Ñ\83 Ð°Ñ\80Ñ\82Ñ\8bкÑ\83лаÑ\85 Ñ\81а Ñ\81пÑ\96Ñ\81а Ð½Ð°Ð·Ñ\96Ñ\80аннÑ\8f',
 'tog-ccmeonemails' => 'Слаць мне копіі маіх лістоў',
 'tog-diffonly' => 'Не паказваць рэшты старонкі пад розніцай',
 'tog-showhiddencats' => 'Паказаць схаваныя катэгорыі',
@@ -262,7 +263,7 @@ $messages = array(
 'vector-view-edit' => 'Правіць',
 'vector-view-history' => 'Паказаць гісторыю',
 'vector-view-view' => 'Чытаць',
-'vector-view-viewsource' => 'Ð\9fаказаÑ\86Ñ\8c Ð²Ñ\8bÑ\82оÑ\87ны тэкст',
+'vector-view-viewsource' => 'Ð\9fаказаÑ\86Ñ\8c Ð·Ñ\8bÑ\85одны тэкст',
 'actions' => 'Дзеянні',
 'namespaces' => 'Прасторы імёнаў',
 'variants' => 'Варыянты',
@@ -417,7 +418,7 @@ $1',
 # General errors
 'error' => 'Памылка',
 'databaseerror' => 'Памылка базы дадзеных',
-'laggedslavemode' => 'Увага: Старонка можа не ўтрымліваць апошніх зменаў.',
+'laggedslavemode' => 'Увага: Старонка можа не ўтрымліваць апошніх змен.',
 'readonly' => 'База звестак заблакаваная',
 'enterlockreason' => 'Упішыце прычыну зачынення, а таксама меркаваны час адчынення',
 'readonlytext' => 'База даных не прыймае новых старонак і іншых змяненняў, таму што яна зараз зачынена, відаць, дзеля абслугоўвання, пасля чаго будзе вернута да нармальнай працы.
@@ -456,12 +457,12 @@ $1',
 
 Функцыя: $1<br />
 Зварот: $2',
-'viewsource' => 'Ð\9fаказаÑ\86Ñ\8c Ð²Ñ\8bÑ\82оÑ\87ны тэкст',
+'viewsource' => 'Ð\9fаказаÑ\86Ñ\8c Ð·Ñ\8bÑ\85одны тэкст',
 'viewsource-title' => 'Прагляд зыходнага тэксту старонкі $1',
 'actionthrottled' => 'Дзеянне прыгашана',
 'actionthrottledtext' => 'Дзеля абароны ад спаму, вам не дазваляецца выконваць гэтае дзеянне занадта часта за пэўны адрэзак часу, і вы гэты ліміт перасягнулі. Паспрабуйце ізноў праз некалькі мінут.',
 'protectedpagetext' => 'Старонка ахоўваецца, каб нельга было яе правіць.',
-'viewsourcetext' => 'Ð\9cожна Ð±Ð°Ñ\87Ñ\8bÑ\86Ñ\8c Ñ\96 ÐºÐ°Ð¿Ñ\96Ñ\80аваÑ\86Ñ\8c ÐºÑ\80Ñ\8bнÑ\96Ñ\87ны тэкст гэтай старонкі:',
+'viewsourcetext' => 'Ð\9cожна Ð±Ð°Ñ\87Ñ\8bÑ\86Ñ\8c Ñ\96 ÐºÐ°Ð¿Ñ\96Ñ\80аваÑ\86Ñ\8c Ð·Ñ\8bÑ\85одны тэкст гэтай старонкі:',
 'viewyourtext' => "Вы можаце праглядзець і скапіяваць зыходны тэкст '''вашых правак''' на гэтай старонцы:",
 'protectedinterface' => 'Старонка ахоўваецца, таму што ўваходзіць у склад інтэрфейсу гэтай праграмы.',
 'editinginterface' => "'''Увага:''' Вы правіце старонку, якая ўтрымлівае тэкст карыстальніцкага інтэрфейсу.
@@ -470,8 +471,8 @@ $1',
 'cascadeprotected' => 'Старонка знаходзіцца пад аховай ад правак, таму што яна ўлучана ў наступн{{PLURAL:$1|ую старонку|ыя старонкі}}, якія ахоўваюцца з магчымасцю "каскаднага распаўсюджвання" аховы:
 $2',
 'namespaceprotected' => "Вам не дазволена правіць старонкі ў прасторы назваў '''$1'''.",
-'customcssprotected' => 'У вас няма дазволу рэдагаваць гэтую CSS-старонку, таму што яна ўтрымлівае асабістыя настаўленні іншага ўдзельніка.',
-'customjsprotected' => 'У вас няма дазволу рэдагаваць гэтую JavaScript-старонку, таму што яна ўтрымлівае асабістыя настаўленні іншага ўдзельніка.',
+'customcssprotected' => 'У вас няма дазволу рэдагаваць гэтую CSS-старонку, бо яна ўтрымлівае асабістыя настройкі іншага ўдзельніка.',
+'customjsprotected' => 'У вас няма дазволу рэдагаваць гэтую JavaScript-старонку, таму што яна ўтрымлівае асабістыя настройкі іншага ўдзельніка.',
 'ns-specialprotected' => 'Не дазволена правіць старонкі ў прасторы назваў {{ns:special}}.',
 'titleprotected' => "Назва засцерагаецца ад стварэння; ахова пастаўлена ўдзельнікам: [[User:$1|$1]].
 Тлумачэнне пастаноўкі пад ахову: ''$2''.",
@@ -487,7 +488,7 @@ $2',
 Можна працягваць працу на {{SITENAME}} ананімна, або можна <span class='plainlinks'>[$1 ўвайсці ў сістэму ізноў]</span>, пад тым самым або пад іншым удзельніцкім імем. Заўважце, што некаторыя старонкі могуць паказвацца так, быццам вы яшчэ не выйшлі; у такім разе трэба ачысціць кэш вашага браўзера.",
 'welcomeuser' => 'Вітаем, $1!',
 'welcomecreation-msg' => 'Ваш рахунак быў створаны.
\9dе Ð·Ð°Ð±Ñ\83дзÑ\8cÑ\86еÑ\81Ñ\8f Ð´Ð°Ð¿Ð°Ñ\81аваÑ\86Ñ\8c [[Special:Preferences|пеÑ\80Ñ\81аналÑ\8cнÑ\8bÑ\8f Ð½Ð°Ñ\81Ñ\82аÑ\9eленнÑ\96]] для {{SITENAME}}.',
\9dе Ð·Ð°Ð±Ñ\83дзÑ\8cÑ\86еÑ\81Ñ\8f Ð°Ð¶Ñ\8bÑ\86Ñ\86Ñ\8fвÑ\96Ñ\86Ñ\8c [[Special:Preferences|наÑ\81Ñ\82Ñ\80ойкÑ\83]] для {{SITENAME}}.',
 'yourname' => 'Імя ўдзельніка',
 'userlogin-yourname' => 'Імя ўліковага запісу',
 'userlogin-yourname-ph' => 'Увядзіце імя вашага ўліковага запісу',
@@ -734,10 +735,10 @@ $2
 'userpage-userdoesnotexist-view' => 'Уліковы запіс удзельніка " $1 "не зарэгістраваны.',
 'blocked-notice-logextract' => 'Гэты карыстальнік у дадзены момант заблакаваны. 
  Апошні запіс журнала блакіровак прыводзіцца ніжэй для даведкі:',
-'clearyourcache' => "'''Заўвага:''' Пасля замацоўвання, вам можа спатрэбіцца ачыстка кэшу браўзера, каб пабачыць унесеныя змяненні. 
+'clearyourcache' => "'''Заўвага:''' Пасля замацоўвання, вам можа спатрэбіцца ачыстка кэшу браўзера, каб убачыць унесеныя змяненні. 
 *'''Firefox / Safari:''' націсніце '''Reload''', утрымліваючы ''Shift'', або націсніце ''Ctrl-F5'' ці ''Ctrl-R'' (''Cmd-R'' на Макінтошах)
 * '''Konqueror:''': націсніце ''Reload'' або ''F5''
-* '''Opera''': увайдзіце ў настаўленні карыстальніка (меню ''Tools'', падпункт ''Preferences''), там ачысціце кэш; * '''Internet Explorer:''' націсніце ''Refresh'', утрымліваючы ''Ctrl'', або націсніце ''Ctrl-F5''
+* '''Opera''': увайдзіце ў настройкі карыстальніка (меню ''Tools'', падпункт ''Preferences''), там ачысціце кэш; * '''Internet Explorer:''' націсніце ''Refresh'', утрымліваючы ''Ctrl'', або націсніце ''Ctrl-F5''
 * '''Google Chrome:''' Націсніце ''Ctrl-Shift-R'' (''⌘-Shift-R'' на Mac)",
 'usercssyoucanpreview' => "'''Парада:''' Карыстайцеся кнопкай \"''{{int:showpreview}}''\" для выпрабоўвання новага коду CSS ''перад тым'', як яго запісваць.",
 'userjsyoucanpreview' => "'''Парада:''' Карыстайцеся кнопкай \"''{{int:showpreview}}''\" для выпрабоўвання новага коду JS ''перад тым'', як яго запісваць.",
@@ -768,10 +769,10 @@ $2
 'editingcomment' => 'Правім $1 (новы раздзел)',
 'editconflict' => 'Канфлікт правак: $1',
 'explainconflict' => "Нехта іншы змяніў старонку пасля таго, як вы пачалі працу з ёю.
\92еÑ\80Ñ\85нÑ\8fе Ñ\82Ñ\8dкÑ\81Ñ\82авае Ð¿Ð¾Ð»Ðµ Ð¿Ð°ÐºÐ°Ð·Ð²Ð°Ðµ Ð°ÐºÑ\82Ñ\83алÑ\8cнÑ\8b ÐºÑ\80Ñ\8bнÑ\96Ñ\87ны тэкст старонкі.
-Вашыя праўкі паказаныя ў ніжнім тэкставым полі.
\92ам Ñ\82Ñ\80Ñ\8dба Ð±Ñ\83дзе Ð´Ð°Ð»Ñ\83Ñ\87Ñ\8bÑ\86Ñ\8c Ñ\96Ñ\85 Ð´Ð° Ð°ÐºÑ\82Ñ\83алÑ\8cнага ÐºÑ\80Ñ\8bнÑ\96Ñ\87нага тэксту.
-'''Толькі''' тэкст у верхнім полі будзе замацаваны, калі націснуць \"{{int:savearticle}}\".",
\92еÑ\80Ñ\85нÑ\8fе Ñ\82Ñ\8dкÑ\81Ñ\82авае Ð¿Ð¾Ð»Ðµ Ð¿Ð°ÐºÐ°Ð·Ð²Ð°Ðµ Ð°ÐºÑ\82Ñ\83алÑ\8cнÑ\8b Ð·Ñ\8bÑ\85одны тэкст старонкі.
+Вашы праўкі паказаны ў ніжнім тэкставым полі.
\92ам Ñ\82Ñ\80Ñ\8dба Ð±Ñ\83дзе Ð´Ð°Ð»Ñ\83Ñ\87Ñ\8bÑ\86Ñ\8c Ñ\96Ñ\85 Ð´Ð° Ð°ÐºÑ\82Ñ\83алÑ\8cнага Ð·Ñ\8bÑ\85однага тэксту.
+Калі націснуць \"{{int:savearticle}}\", будзе запісаны '''толькі''' тэкст у верхнім полі.",
 'yourtext' => 'Свой тэкст',
 'storedversion' => 'Захаваная версія',
 'nonunicodebrowser' => "'''УВАГА: ваш браўзер не працуе з Унікодам. Каб вы маглі карэктна  правіць старонкі, ужываецца такая штука, што знакі з па-за абсягу ASCII паказваюцца ў рэдактарскім акне як шаснаццаткавыя коды.'''",
@@ -893,7 +894,7 @@ $2
 Паспрабуйце [[Special:Search|пашукаць яе на гэтай Вікі]] сярод новых старонак.',
 
 # Revision deletion
-'rev-deleted-comment' => '(выдаленае кароткае апісанне зменаў)',
+'rev-deleted-comment' => '(выдаленае кароткае апісанне змен)',
 'rev-deleted-user' => '(удзельнік выдалены)',
 'rev-deleted-event' => '(сцёртае дзеянне з журналам)',
 'rev-deleted-user-contribs' => '[імя ўдзельніка альбо IP-адрас выдалены — рэдагаванне скрытыя ад узносаў]',
@@ -1048,7 +1049,7 @@ $1",
 'nextn-title' => 'Наступны{{PLURAL:$1| вынік|я $1 вынікі(аў)}}',
 'shown-title' => 'Паказваць $1 {{PLURAL:$1|вынік|вынікі(аў)}} на старонку',
 'viewprevnext' => 'Гл. ($1 {{int:pipe-separator}} $2) ($3).',
-'searchmenu-legend' => 'Настаўленні пошуку',
+'searchmenu-legend' => 'Настройкі пошуку',
 'searchmenu-exists' => "'''На вікі ёсць старонка \"[[:\$1]]\"'''",
 'searchmenu-new' => "'''Стварыць на гэтай вікі старонку \"[[:\$1]]\"'''",
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Паказаць старонкі з гэтым прэфіксам]]',
@@ -1093,11 +1094,10 @@ $1",
 'searchdisabled' => 'Функцыя пошуку {{SITENAME}} не працуе. Тымчасова можна шукаць з дапамогай Google. Заўважце, што тамтэйшыя індэксы зместу {{SITENAME}} могуць не быць актуальнымі.',
 
 # Preferences page
-'preferences' => 'Настаўленні',
-'mypreferences' => 'Настáўленні',
+'preferences' => 'Настройкі',
+'mypreferences' => 'Настройкі',
 'prefs-edits' => 'Колькасць правак:',
 'prefsnologin' => 'Не ўвайшлі',
-'prefsnologintext' => 'Належыць <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} увайсці ў сістэму]</span>, каб мяняць свае настаўленні.',
 'changepassword' => 'Пароль',
 'prefs-skin' => 'Вокладка',
 'skin-preview' => 'перадпаказ',
@@ -1107,7 +1107,7 @@ $1",
 'prefs-labs' => 'Эксперыментальныя магчымасці',
 'prefs-personal' => 'Удзельнік',
 'prefs-rc' => '{{:{{ns:mediawiki}}:Recentchanges/be}}',
-'prefs-watchlist' => 'СпÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80анага',
+'prefs-watchlist' => 'СпÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80аннÑ\8f',
 'prefs-watchlist-days' => 'За колькі дзён паказваць змяненні ў назіраным:',
 'prefs-watchlist-days-max' => '(найбольш $1 {{PLURAL:$1|дзень|дзён}})',
 'prefs-watchlist-edits' => 'Колькасць правак для паказу ў разгорнутым выглядзе:',
@@ -1133,7 +1133,7 @@ $1",
 'recentchangesdays-max' => '(найбольш $1 {{PLURAL:$1|дзень|дзён}})',
 'recentchangescount' => 'Прадвызначаная колькасць правак дзеля паказу:',
 'prefs-help-recentchangescount' => 'Гэта ўключае ў сябе апошнія змены, гісторыі старонак, журналы.',
-'savedprefs' => 'Настáўленні замацаваныя.',
+'savedprefs' => 'Настройкі замацаваныя.',
 'timezonelegend' => 'Часавы пояс:',
 'localtime' => 'Мясцовы час:',
 'timezoneuseserverdefault' => 'Карыстацца настаўленнямі серверу ($1)',
@@ -1160,7 +1160,7 @@ $1",
 'prefs-custom-css' => 'Уласны CSS',
 'prefs-custom-js' => 'Уласны JS',
 'prefs-common-css-js' => 'Агульны CSS/JavaScript для ўсіх вокладак:',
-'prefs-reset-intro' => 'Тут можна вярнуць свае настаўленні да прадвызначэнняў, прынятых на гэтай пляцоўцы.
+'prefs-reset-intro' => 'Тут можна вярнуць свае настройкі да прадвызначэнняў, прынятых на гэтай пляцоўцы.
 Адкаціць гэтае дзеянне нельга.',
 'prefs-emailconfirm-label' => 'Пацверджанне адрасу эл.пошты:',
 'youremail' => 'Эл.пошта *',
@@ -1174,7 +1174,7 @@ $1",
 'prefs-help-variant' => 'Упадабаны для адлюстравання змесціва старонак вікі варыянт мовы ці арфаграфія.',
 'yournick' => 'Псеўданім:',
 'prefs-help-signature' => 'Вашыя выказванні ў размоўных старонках павінны быць падпісаныя знакамі "<nowiki>~~~~</nowiki>", якія аўтаматычна ператвараюцца ў ваш подпіс і час запісу.',
-'badsig' => 'Ð\9dедапÑ\83Ñ\88Ñ\87алÑ\8cнÑ\8b ÐºÑ\80Ñ\8bнÑ\96Ñ\87ны тэкст подпісу; праверце тэгі HTML.',
+'badsig' => 'Ð\9dедапÑ\83Ñ\88Ñ\87алÑ\8cнÑ\8b Ð·Ñ\8bÑ\85одны тэкст подпісу; праверце тэгі HTML.',
 'badsiglength' => 'Занадта доўгі подпіс. Трэба, каб ён быў карацейшым за $1 {{PLURAL:$1|знак|знакаў}}.',
 'yourgender' => 'Пол:',
 'gender-unknown' => 'Нявызначаны',
@@ -1191,11 +1191,11 @@ $1",
 'prefs-signature' => 'Подпіс',
 'prefs-dateformat' => 'Фармат даты',
 'prefs-timeoffset' => 'Часавы пояс',
-'prefs-advancedediting' => 'УÑ\81кладненÑ\8bÑ\8f Ð½Ð°Ñ\81Ñ\82аÑ\9eленні',
-'prefs-advancedrc' => 'УÑ\81кладненÑ\8bÑ\8f Ð½Ð°Ñ\81Ñ\82аÑ\9eленні',
-'prefs-advancedrendering' => 'УÑ\81кладненÑ\8bÑ\8f Ð½Ð°Ñ\81Ñ\82аÑ\9eленні',
-'prefs-advancedsearchoptions' => 'УÑ\81кладненÑ\8bÑ\8f Ð½Ð°Ñ\81Ñ\82аÑ\9eленні',
-'prefs-advancedwatchlist' => 'УÑ\81кладненÑ\8bÑ\8f Ð½Ð°Ñ\81Ñ\82аÑ\9eленні',
+'prefs-advancedediting' => 'Ð\90гÑ\83лÑ\8cнÑ\8bÑ\8f Ð½Ð°Ñ\81Ñ\82Ñ\80ойкі',
+'prefs-advancedrc' => 'Ð\9fаÑ\88Ñ\8bÑ\80анÑ\8bÑ\8f Ð½Ð°Ñ\81Ñ\82Ñ\80ойкі',
+'prefs-advancedrendering' => 'Ð\9fаÑ\88Ñ\8bÑ\80анÑ\8bÑ\8f Ð½Ð°Ñ\81Ñ\82Ñ\80ойкі',
+'prefs-advancedsearchoptions' => 'Ð\9fаÑ\88Ñ\8bÑ\80анÑ\8bÑ\8f Ð½Ð°Ñ\81Ñ\82Ñ\80ойкі',
+'prefs-advancedwatchlist' => 'Ð\9fаÑ\88Ñ\8bÑ\80анÑ\8bÑ\8f Ð½Ð°Ñ\81Ñ\82Ñ\80ойкі',
 'prefs-displayrc' => 'Паказ',
 'prefs-displaysearchoptions' => 'Паказ',
 'prefs-displaywatchlist' => 'Паказ',
@@ -1358,7 +1358,7 @@ $1",
 'action-sendemail' => 'адпраўка электронных пісем',
 
 # Recent changes
-'nchanges' => '$1 {{PLURAL:$1|змена|змены|зменаў}}',
+'nchanges' => '$1 {{PLURAL:$1|змена|змены|змен}}',
 'recentchanges' => 'Апошнія змены',
 'recentchanges-legend' => 'Магчымасці паказу',
 'recentchanges-summary' => 'Гэта апошнія мены на пляцоўцы {{SITENAME}}.',
@@ -1376,7 +1376,7 @@ $1",
 'rcshowhideanons' => '$1 ананімных удзельнікаў',
 'rcshowhidepatr' => '$1 ухваленых правак',
 'rcshowhidemine' => '$1 ўласных правак',
-'rclinks' => 'Паказаць апошнія $1 зменаў за мінулыя $2 дзён<br />$3',
+'rclinks' => 'Паказаць апошнія $1 змен за мінулыя $2 дзён<br />$3',
 'diff' => 'розн.',
 'hist' => 'гіст.',
 'hide' => 'без уліку',
@@ -1962,19 +1962,19 @@ $1',
 
 # Watchlist
 'watchlist' => 'Мой спіс назіранага',
-'mywatchlist' => 'СпÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80анага',
+'mywatchlist' => 'СпÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80аннÑ\8f',
 'watchlistfor2' => 'Для $1 $2',
-'nowatchlist' => 'Ð\92аÑ\88 Ñ\81пÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80анага зараз пусты.',
-'watchlistanontext' => 'Ð\9aаб Ð±Ð°Ñ\87Ñ\8bÑ\86Ñ\8c Ð°Ð±Ð¾ Ð¿Ñ\80авÑ\96Ñ\86Ñ\8c Ñ\81кладнÑ\96кÑ\96 Ð½Ð°Ð·Ñ\96Ñ\80анага, трэба $1.',
+'nowatchlist' => 'Ð\92аÑ\88 Ñ\81пÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80аннÑ\8f зараз пусты.',
+'watchlistanontext' => 'Ð\9aаб Ð¿Ð°Ð³Ð»Ñ\8fдзеÑ\86Ñ\8c Ñ\86Ñ\96 Ð·Ð¼Ñ\8fнÑ\96Ñ\86Ñ\8c Ñ\81пÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80аннÑ\8f, трэба $1.',
 'watchnologin' => 'Без прадстаўлення',
-'watchnologintext' => 'Ð\9aаб Ð¿Ñ\80авÑ\96Ñ\86Ñ\8c Ñ\81вой Ñ\81пÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80анага, трэба [[Special:UserLogin|ўвайсці ў сістэму]].',
+'watchnologintext' => 'Ð\9aаб Ð¿Ñ\80авÑ\96Ñ\86Ñ\8c Ñ\81вой Ñ\81пÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80аннÑ\8f, трэба [[Special:UserLogin|ўвайсці ў сістэму]].',
 'addwatch' => 'Дадаць у назіранае',
 'addedwatchtext' => "Старонка \"[[:\$1]]\" была дададзена да [[Special:Watchlist|назіраных]] вамі.
 Змяненні, якія адбудуцца з гэтай старонкай і з Размовай пра яе, будуць паказвацца там, і старонка будзе '''вылучацца шрыфтам''' у [[Special:RecentChanges|спісе нядаўніх змяненняў]], каб лягчэй пазнаваць яе.
 
 Калі вы не пажадаеце больш назіраць за гэтай старонкай, націсніце \"Не назіраць\" у бакоўцы.",
 'removewatch' => 'Выдаліць са спісу назірання',
-'removedwatchtext' => 'Старонка "[[:$1]]" была вынятая з вашага [[Special:Watchlist|спісу назіранага]].',
+'removedwatchtext' => 'Старонка "[[:$1]]" была вынята з вашага [[Special:Watchlist|спіса назірання]].',
 'watch' => 'Назіраць',
 'watchthispage' => 'Назіраць за гэтай старонкай',
 'unwatch' => 'Не назіраць',
@@ -1986,14 +1986,14 @@ $1',
 'wlheader-showupdated' => "Старонкі, якія былі зменены пасля вашага апошняга іх наведвання, паказаны '''абрысам шрыфту'''.",
 'watchmethod-recent' => 'правяраем нядаўнія праўкі ў назіраных старонках',
 'watchmethod-list' => 'правяраем наяўнасць нядаўніх правак ў назіраных старонках',
-'watchlistcontains' => 'У Ð²Ð°Ñ\88Ñ\8bм Ñ\81пÑ\96Ñ\81е Ð½Ð°Ð·Ñ\96Ñ\80анага $1 {{PLURAL:$1|Ñ\81Ñ\82аÑ\80онка|старонак}}.',
+'watchlistcontains' => 'У Ð²Ð°Ñ\88Ñ\8bм Ñ\81пÑ\96Ñ\81е Ð½Ð°Ð·Ñ\96Ñ\80аннÑ\8f $1 {{PLURAL:$1|Ñ\81Ñ\82аÑ\80онка|Ñ\81Ñ\82аÑ\80онкÑ\96|старонак}}.',
 'iteminvalidname' => "Праблема са складнікам '$1', недапушчальная назва...",
 'wlnote' => "Ніжэй {{PLURAL:$1|паказана апошняе $1 змена|паказаны апошнія $1 змены|паказаны апошнія $1 змен}} за {{PLURAL:$2|апошнюю|апошнія|апошнія}} '''$2''' {{plural:$2|гадзіну|гадзіны|гадзіны}}, на момант часу $3 $4.",
 'wlshowlast' => 'Паказваць апошнія $1 гадз. $2 дзён $3',
 'watchlist-options' => 'Магчымасці назірання',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching' => 'Дапісваецца да назіранага...',
+'watching' => 'Дапісваецца ў спіс назірання...',
 'unwatching' => 'Спыняем назіранне...',
 'watcherrortext' => 'Адбылася памылка пры змене настройкі назірання для «$1».',
 
@@ -2092,7 +2092,7 @@ $UNWATCHURL
 'protectedarticle' => 'пад аховай «[[$1]]»',
 'modifiedarticleprotection' => 'зменены ўзровень аховы "[[$1]]"',
 'unprotectedarticle' => 'знятая ахова з "[[$1]]"',
-'movedarticleprotection' => 'настаўленні аховы перанесеныя з "[[$2]]" у "[[$1]]"',
+'movedarticleprotection' => 'настройкі аховы перанесеныя з "[[$2]]" у "[[$1]]"',
 'protect-title' => 'Ахова «$1»',
 'protect-title-notallowed' => 'Прагляд узроўня аховы «$1»',
 'prot_1movedto2' => '[[$1]] перанесена ў [[$2]]',
@@ -2105,11 +2105,11 @@ $UNWATCHURL
 'protect_expiry_old' => 'Час сканчэння — у мінулым.',
 'protect-unchain-permissions' => 'Адкрыць падрабязныя магчымасці аховы',
 'protect-text' => "Тут можна пабачыць і паправіць узровень аховы для старонкі '''$1'''.",
-'protect-locked-blocked' => "Вы заблакаваны і не можаце мяняць узроўняў аховы. Вось актуальныя настаўленні для старонкі '''$1''':",
+'protect-locked-blocked' => "Вы заблакаваны і не можаце мяняць узроўняў аховы. Вось актуальныя настройкі для старонкі '''$1''':",
 'protect-locked-dblock' => "Немагчыма мяняць узроўні аховы, таму што база даных зараз зачынена.
-Вось актуальныя настаўленні аховы для старонкі '''$1''':",
-'protect-locked-access' => "Ð\92аÑ\88 Ñ\80аÑ\85Ñ\83нак Ð½Ðµ Ð¼Ð°Ðµ Ð´Ð°Ð·Ð²Ð¾Ð»Ð°ў, патрэбных каб мяняць ахову старонкі.
-Вось актуальныя настаўленні для старонкі '''$1''':",
+Вось актуальныя настройкі аховы для старонкі '''$1''':",
+'protect-locked-access' => "Ð\92аÑ\88 Ñ\80аÑ\85Ñ\83нак Ð½Ðµ Ð¼Ð°Ðµ Ð¿Ñ\80авоў, патрэбных каб мяняць ахову старонкі.
+Вось актуальныя настройкі для старонкі '''$1''':",
 'protect-cascadeon' => 'Старонка зараз ахоўваецца, таму што ўлучана ў наступн{{PLURAL:$1|ую старонку, на якую|ыя старонкі, на якія}} пастаўлена каскадная ахова. Можна змяніць узровень аховы гэтай старонкі, але вынікаў каскаднай аховы гэта не пераможа.',
 'protect-default' => 'Дазваляць усім удзельнікам',
 'protect-fallback' => 'Патрабуецца дазвол "$1"',
@@ -2211,7 +2211,7 @@ $1',
 'contributions-title' => 'Уклад удзельніка $1',
 'mycontris' => 'Уклад',
 'contribsub2' => 'Для $1 ($2)',
-'nocontribs' => 'Не знойдзена зменаў, адпаведных зададзеным параметрам.',
+'nocontribs' => 'Не знойдзена змен, адпаведных зададзеным параметрам.',
 'uctop' => '(апошн.)',
 'month' => 'Ад месяцу (і раней):',
 'year' => 'Ад году (і раней):',
@@ -2286,7 +2286,7 @@ $1',
 'ipbhidename' => 'Не паказваць імя ўдзельніка ў гісторыях правак і ў спісах',
 'ipbwatchuser' => 'Назіраць уласную і размоўную старонкі гэтага ўдзельніка',
 'ipb-disableusertalk' => 'Забараніць гэтаму ўдзельніку рэдагаваць сваю старонку размоў падчас блакіроўкі',
-'ipb-change-block' => 'Змяніць настаўленні блакавання ўдзельніка',
+'ipb-change-block' => 'Змяніць настройкі блакіравання ўдзельніка',
 'ipb-confirm' => 'Пацвердзіць блакіроўку',
 'badipaddress' => 'Недапушчальны адрас IP',
 'blockipsuccesssub' => 'Паспяховае блакаванне',
@@ -2327,7 +2327,7 @@ $1',
 'noautoblockblock' => 'аўтаблок не дазволены',
 'createaccountblock' => 'стварэнне рахунку заблакавана',
 'emailblock' => 'эл.пошта заблакавана',
-'blocklist-nousertalk' => 'не мае дазволу правіць уласную старонку размоваў',
+'blocklist-nousertalk' => 'не мае дазволу правіць уласную старонку размоў',
 'ipblocklist-empty' => 'Спіс блокаў зараз пусты.',
 'ipblocklist-no-results' => 'Няма блокаў на такі адрас IP або на такое імя ўдзельніка.',
 'blocklink' => 'заблакаваць',
@@ -2341,7 +2341,7 @@ $1',
 Ніжэй прыведзены журнал блакіровак:',
 'blocklog-showsuppresslog' => 'Гэты ўдзельнік ужо заблакаваны і скрыты. Журнал утойвання прыведзены ніжэй:',
 'blocklogentry' => 'пастаўлены блок на "[[$1]]", з часам трывання $2 $3',
-'reblock-logentry' => 'змененыя настаўленні блока для [[$1]] з часам згасання $2 $3',
+'reblock-logentry' => 'змененыя настройкі блока для [[$1]] з часам згасання $2 $3',
 'blocklogtext' => 'Журнал пастаноўкі і здымання блокаў. Аўтаматычна блакаваныя адрасы IP тут не паказваюцца. Спіс актуальных забарон і блокаў бач у [[Special:BlockList|спісе блокаў IP]].',
 'unblocklogentry' => 'зняты блок з $1',
 'block-log-flags-anononly' => 'толькі ананімныя ўдзельнікі',
@@ -2356,7 +2356,7 @@ $1',
 'ipb_expiry_temp' => 'Скрытыя блокі на імёны ўдзельнікаў мусяць быць сталымі.',
 'ipb_hide_invalid' => 'Немагчыма заглушыць гэты рахунак; магчыма, для яго маецца зашмат правак.',
 'ipb_already_blocked' => '"$1" ужо знаходзіцца пад блокам',
-'ipb-needreblock' => '$1 Ñ\83жо Ð·Ð½Ð°Ñ\85одзÑ\96Ñ\86Ñ\86а Ð¿Ð°Ð´ Ð±Ð»Ð¾ÐºÐ°Ð¼. Ð¦Ñ\96 Ð¶Ð°Ð´Ð°ÐµÑ\86е Ð·Ð¼Ñ\8fнÑ\96Ñ\86Ñ\8c Ð½Ð°Ñ\81Ñ\82аÑ\9eленнÑ\96 Ð±Ð»Ð¾ÐºÐ°?',
+'ipb-needreblock' => '$1 Ñ\83жо Ð·Ð°Ð±Ð»Ð°ÐºÑ\96Ñ\80аванÑ\8b. Ð\96адаеÑ\86е Ð·Ð¼Ñ\8fнÑ\96Ñ\86Ñ\8c Ð½Ð°Ñ\81Ñ\82Ñ\80ойкÑ\96 Ð±Ð»Ð°ÐºÑ\96Ñ\80оÑ\9eкÑ\96?',
 'ipb-otherblocks-header' => '{{PLURAL:$1|Іншая блакіроўка|Іншыя блакіроўкі}}',
 'unblock-hideuser' => 'Вы не можаце разблакаваць гэтага ўдзельніка, бо яго імя было ўтоена.',
 'ipb_cant_unblock' => 'Памылка: не знойдзены блок з ID $1. Магчыма, ён ўжо быў зняты.',
@@ -2377,9 +2377,9 @@ $1',
 # Developer tools
 'lockdb' => 'Замкнуць базу дадзеных',
 'unlockdb' => 'Адмыкнуць базу дадзеных',
-'lockdbtext' => 'Зачыненне базы даных прыпыніць для ўсіх удзельнікаў магчымасць правіць старонкі, настаўленні, спісы назіранага, і, наогул, рабіць усё, дзеля чаго патрабуецца доступ да базы даных.
-Калі ласка, пацвердзіце свой намер зрабіць менавіта гэта, і што вы адчыніце базу даных па сканчэнні абслугоўвання.',
-'unlockdbtext' => 'Адчыненне базы даных верне ўсім удзельнікам магчымасць правіць старонкі, настаўленні, спісы назіранага, і, наогул, рабіць усё, дзеля чаго патрабуецца доступ да базы даных.
+'lockdbtext' => 'Зачыненне базы даных прыпыніць для ўсіх удзельнікаў магчымасць правіць старонкі, настройкі, спісы назірання, а таксама ажыццяўляць іншыя дзеянні, для якіх патрэбен доступ да базы даных.
+Калі ласка, пацвердзіце свой намер зрабіць менавіта гэта, і што вы адчыніце базу даных па заканчэнні абслугоўвання.',
+'unlockdbtext' => 'Адчыненне базы даных верне ўсім удзельнікам магчымасць правіць старонкі, настройкі, спісы назірання, і, наогул, рабіць усё, дзеля чаго патрабуецца доступ да базы даных.
 Калі ласка, пацвердзіце свой намер зрабіць менавіта гэта.',
 'lockconfirm' => 'Так, сапраўды жадаю зачыніць базу даных.',
 'unlockconfirm' => 'Так, сапраўды жадаю адмыкнуць базу дадзеных.',
@@ -2603,9 +2603,9 @@ $1',
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Ваша ўласная старонка',
 'tooltip-pt-anonuserpage' => 'Старонка ўдзельніка для таго IP, з якога вы зараз працуеце',
-'tooltip-pt-mytalk' => 'Ваша старонка размоваў',
+'tooltip-pt-mytalk' => 'Ваша старонка размоў',
 'tooltip-pt-anontalk' => 'Размовы аб праўках, зробленых з гэтага адрасу IP',
-'tooltip-pt-preferences' => 'Свае Ð½Ð°Ñ\81Ñ\82áÑ\9eленні',
+'tooltip-pt-preferences' => 'Ð\92аÑ\88Ñ\8b Ð½Ð°Ñ\81Ñ\82Ñ\80ойкі',
 'tooltip-pt-watchlist' => 'Пералік старонак, за змяненнямі ў якіх вы сочыце',
 'tooltip-pt-mycontris' => 'Пералік вашага ўкладу',
 'tooltip-pt-login' => 'Уваходзіць у сістэму неабавязкова, але вас вельмі запрашаюць гэтак зрабіць.',
@@ -2614,7 +2614,7 @@ $1',
 'tooltip-ca-talk' => 'Размовы пра змест гэтай старонкі',
 'tooltip-ca-edit' => 'Старонку можна правіць; ужывайце папярэдні паказ перад замацоўваннем.',
 'tooltip-ca-addsection' => 'Дадаць новы раздзел',
-'tooltip-ca-viewsource' => 'Ð\93Ñ\8dÑ\82аÑ\8f Ñ\81Ñ\82аÑ\80онка Ð°Ñ\85оÑ\9eваеÑ\86Ñ\86а, Ð°Ð»Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð¿Ð°Ð³Ð»Ñ\8fдзеÑ\86Ñ\8c Ñ\8fе ÐºÑ\80Ñ\8bнÑ\96Ñ\87ны тэкст.',
+'tooltip-ca-viewsource' => 'Ð\93Ñ\8dÑ\82аÑ\8f Ñ\81Ñ\82аÑ\80онка Ð°Ñ\85оÑ\9eваеÑ\86Ñ\86а, Ð°Ð»Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð¿Ð°Ð³Ð»Ñ\8fдзеÑ\86Ñ\8c Ñ\8fе Ð·Ñ\8bÑ\85одны тэкст.',
 'tooltip-ca-history' => 'Ранейшыя версіі гэтай старонкі.',
 'tooltip-ca-protect' => 'Паставіць ахову на старонку',
 'tooltip-ca-unprotect' => 'Змяніць ахову гэтай старонкі',
@@ -2622,7 +2622,7 @@ $1',
 'tooltip-ca-undelete' => 'Аднавіць праўкі, зробленыя на гэтай старонцы перад тым, як яна была сцёрта',
 'tooltip-ca-move' => 'Перанесці гэтую старонку пад іншую назву',
 'tooltip-ca-watch' => 'Дадаць гэтую старонку да свайго спісу назіраных старонак',
-'tooltip-ca-unwatch' => 'Выняць гэтую старонку з вашага спісу назіранага',
+'tooltip-ca-unwatch' => 'Выняць гэту старонку з вашага спіса назірання',
 'tooltip-search' => 'Знайсці ў {{SITENAME}}',
 'tooltip-search-go' => 'Перайсці да старонкі з дакладна такой назвай, калі такая наогул існуе',
 'tooltip-search-fulltext' => 'Знайсці гэты тэкст у тэкстах старонак',
@@ -2659,14 +2659,14 @@ $1',
 'tooltip-preview' => 'Паказаць, якім будзе вынік — ужывайце перад замацоўваннем!',
 'tooltip-diff' => 'Паказаць, што вы мяняеце ў тэксце.',
 'tooltip-compareselectedversions' => 'Паказаць розніцу паміж дзвюмя азначанымі версіямі гэтай старонкі.',
-'tooltip-watch' => 'Ð\94апÑ\96Ñ\81аÑ\86Ñ\8c Ñ\81Ñ\82аÑ\80онкÑ\83 Ð´Ð° Ñ\81пÑ\96Ñ\81Ñ\83 Ð½Ð°Ð·Ñ\96Ñ\80анага',
+'tooltip-watch' => 'Ð\94абавÑ\96Ñ\86Ñ\8c Ñ\81Ñ\82аÑ\80онкÑ\83 Ñ\9e Ñ\81пÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80аннÑ\8f',
 'tooltip-watchlistedit-normal-submit' => 'Выдаліць пазначаныя старонкі',
 'tooltip-watchlistedit-raw-submit' => 'Абнавіць спіс назірання',
 'tooltip-recreate' => 'Аднавіць старонку, хоць яна і была сцёрта',
 'tooltip-upload' => 'Пачаць укладанне',
 'tooltip-rollback' => '"Адкат" адным клікам вяртае тэкст, які быў тут перад адной ці некалькімі праўкамі апошняга аўтара.',
 'tooltip-undo' => '"Адкат" сцірае гэтую праўку і адкрывае для перадпаказу рэдактарскае акно. Так можна упісваць тлумачэнне адкату.',
-'tooltip-preferences-save' => 'Захаваць настаўленні',
+'tooltip-preferences-save' => 'Захаваць настройкі',
 'tooltip-summary' => 'Дайце кароткае апісанне',
 
 # Stylesheets
@@ -3207,7 +3207,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'Правіць файл у вонкавай праграме',
-'edit-externally-help' => '(Гл. падрабязней [//www.mediawiki.org/wiki/Manual:External_editors пра настаўлянне старонніх праграм-рэдактараў])',
+'edit-externally-help' => '(Гл. падрабязней [https://www.mediawiki.org/wiki/Manual:External_editors пра настаўлянне старонніх праграм-рэдактараў])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'усе',
@@ -3292,9 +3292,9 @@ $5
 
 # action=watch/unwatch
 'confirm-watch-button' => 'ОК',
-'confirm-watch-top' => 'Ð\94апÑ\96Ñ\81аÑ\86Ñ\8c Ñ\81Ñ\82аÑ\80онкÑ\83 Ð´Ð° Ñ\81пÑ\96Ñ\81Ñ\83 Ð½Ð°Ð·Ñ\96Ñ\80анага',
+'confirm-watch-top' => 'Ð\94абавÑ\96Ñ\86Ñ\8c Ñ\81Ñ\82аÑ\80онкÑ\83 Ñ\9e Ñ\81пÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80аннÑ\8f',
 'confirm-unwatch-button' => 'ОК',
-'confirm-unwatch-top' => 'Выняць гэтую старонку з вашага спісу назіранага',
+'confirm-unwatch-top' => 'Выняць гэту старонку з вашага спіса назірання?',
 
 # Multipage image navigation
 'imgmultipageprev' => '← папярэдняя старонка',
@@ -3333,17 +3333,17 @@ $5
 # Watchlist editor
 'watchlistedit-numitems' => 'У назіраным {{PLURAL:$1|1 складнік|$1 складнікаў}}, без уліку размоўных старонак.',
 'watchlistedit-noitems' => 'Нічога не назіраецца.',
-'watchlistedit-normal-title' => 'СпÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80анага',
-'watchlistedit-normal-legend' => 'Ð\92Ñ\8bйманне Ñ\81кладнÑ\96каÑ\9e Ð· Ð½Ð°Ð·Ñ\96Ñ\80анага',
+'watchlistedit-normal-title' => 'СпÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80аннÑ\8f',
+'watchlistedit-normal-legend' => 'Ð\92Ñ\8bдаленне Ñ\81кладнÑ\96каÑ\9e Ñ\81а Ñ\81пÑ\96Ñ\81а Ð½Ð°Ð·Ñ\96Ñ\80аннÑ\8f',
 'watchlistedit-normal-explain' => 'Назвы старонак з ліку назіраных паказаныя ніжэй. Каб нешта сцерці, адзначце клетку побач з адпаведным радком, пасля чаго націсніце "Выняць складнікі". Таксама можна правіць гэты спіс непасрэдна, [[Special:EditWatchlist/raw|без афармлення]].',
 'watchlistedit-normal-submit' => 'Выняць складнікі',
-'watchlistedit-normal-done' => 'Ð\97 Ð½Ð°Ð·Ñ\96Ñ\80анага Ð²Ñ\8bнÑ\8fÑ\82Ñ\8b{{PLURAL:$1| 1 Ñ\81кладнÑ\96к|Ñ\8f $1 складнікаў}}:',
-'watchlistedit-raw-title' => 'Ð\9dеÑ\84аÑ\80маÑ\82аванÑ\8b Ñ\81пÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80анага',
-'watchlistedit-raw-legend' => 'Праца з нефарматаваным спісам назіранага',
+'watchlistedit-normal-done' => 'Ð\97 Ð²Ð°Ñ\88ага Ñ\81пÑ\96Ñ\81а Ð½Ð°Ð·Ñ\96Ñ\80аннÑ\8f {{PLURAL:$1|бÑ\8bÑ\9e Ð²Ñ\8bдаленÑ\8b|бÑ\8bлÑ\96 Ð²Ñ\8bдаленÑ\8b|бÑ\8bло Ð²Ñ\8bдалена}} $1 {{PLURAL:$1|Ñ\81кладнÑ\96к|Ñ\81кладнÑ\96кÑ\96|складнікаў}}:',
+'watchlistedit-raw-title' => 'Ð\9dеÑ\84аÑ\80маÑ\82аванÑ\8b Ñ\81пÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80аннÑ\8f',
+'watchlistedit-raw-legend' => 'Правіць нефарматаваны спіс назірання',
 'watchlistedit-raw-explain' => 'Назвы старонак з ліку назіраных паказаныя ніжэй, без афармлення, адна назва на адзін радок; такім чынам, спіс можна правіць як звычайны тэкст. Па сканчэнні націсніце "{{int:Watchlistedit-raw-submit}}". Таксама гэта можна зрабіць праз [[Special:EditWatchlist|стандартны інтэрфейс]].',
 'watchlistedit-raw-titles' => 'Назвы:',
 'watchlistedit-raw-submit' => 'Абнавіць Назіранае',
-'watchlistedit-raw-done' => 'СпÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80анага абноўлены.',
+'watchlistedit-raw-done' => 'СпÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80аннÑ\8f абноўлены.',
 'watchlistedit-raw-added' => 'Дапісаны{{PLURAL:$1| 1 складнік|я $1 складнікаў}}:',
 'watchlistedit-raw-removed' => 'Выняты{{PLURAL:$1| 1 складнік|я $1 складнікаў}}:',
 
@@ -3376,7 +3376,7 @@ $5
 'version-hook-subscribedby' => 'Сюды падпісаныя',
 'version-version' => '(Версія $1)',
 'version-license' => 'Ліцэнзія',
-'version-poweredby-credits' => "Пляцоўка працуе на '''[//www.mediawiki.org/ MediaWiki]''', капірайт © 2001-$1 $2.",
+'version-poweredby-credits' => "Пляцоўка працуе на '''[https://www.mediawiki.org/ MediaWiki]''', капірайт © 2001-$1 $2.",
 'version-poweredby-others' => 'іншыя',
 'version-license-info' => "MediaWiki з'яўляецца свабодным праграмным забеспячэннем. Такім чынам, вы можаце паўторна распаўсюджваць прадукт і(або) змяняць яго на ўмовах пагаднення GNU General Public License у тым выглядзе, у якім яно публікуецца фондам Free Software Foundation; сілу мае версія (выпуск) 2 гэтага пагаднення або, на ваш выбар, навейшая версія (выпуск) пагаднення.
 
@@ -3402,8 +3402,7 @@ MediaWiki распаўсюджваецца, спадзеючыся на прыд
 
 # Special:SpecialPages
 'specialpages' => 'Адмысловыя старонкі',
-'specialpages-note' => '----
-* Звычайныя адмысловыя старонкі.
+'specialpages-note' => '* Звычайныя адмысловыя старонкі.
 * <span class="mw-specialpagerestricted">Адмысловыя старонкі з абмежаваным доступам.</span>
 * <span class="mw-specialpagecached">Закэшаваныя адмысловыя старонкі (могуць быць састарэлымі).</span>',
 'specialpages-group-maintenance' => 'Звесткі аб працы',
@@ -3444,7 +3443,7 @@ MediaWiki распаўсюджваецца, спадзеючыся на прыд
 'tags-description-header' => 'Поўнае апісанне значэння',
 'tags-hitcount-header' => 'Пазначаных правак',
 'tags-edit' => 'правіць',
-'tags-hitcount' => '$1 {{PLURAL:$1|змена|змены|зменаў}}',
+'tags-hitcount' => '$1 {{PLURAL:$1|змена|змены|змен}}',
 
 # Special:ComparePages
 'comparepages' => 'Параўнанне старонак',
index 54097af..4dc5cfa 100644 (file)
@@ -1389,7 +1389,6 @@ $1",
 'mypreferences' => 'Налады',
 'prefs-edits' => 'Колькасьць рэдагаваньняў:',
 'prefsnologin' => 'Вы не ўвайшлі ў сыстэму',
-'prefsnologintext' => 'Вам трэба <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ўвайсьці ў сыстэму]</span>, каб зьмяняць свае налады.',
 'changepassword' => 'Зьмяніць пароль',
 'prefs-skin' => 'Афармленьне',
 'skin-preview' => 'Папярэдні прагляд',
@@ -2928,7 +2927,7 @@ $1',
 'allmessagesdefault' => 'Тэкст па змоўчаньні',
 'allmessagescurrent' => 'Цяперашні тэкст',
 'allmessagestext' => 'Сьпіс усіх сыстэмных паведамленьняў, якія існуюць у прасторы назваў MediaWiki.
-Калі ласка, наведайце [//www.mediawiki.org/wiki/Localisation старонку пра лякалізацыю MediaWiki] і [//translatewiki.net translatewiki.net], калі Вы жадаеце ўдзельнічаць у перакладзе MediaWiki.',
+Калі ласка, наведайце [https://www.mediawiki.org/wiki/Localisation старонку пра лякалізацыю MediaWiki] і [//translatewiki.net translatewiki.net], калі Вы жадаеце ўдзельнічаць у перакладзе MediaWiki.',
 'allmessagesnotsupportedDB' => "'''{{ns:special}}:AllMessages''' не падтрымліваецца, таму што адключанае '''\$wgUseDatabaseMessages'''.",
 'allmessages-filter-legend' => 'Фільтар',
 'allmessages-filter' => 'Фільтар па стане зьменаў:',
@@ -3695,7 +3694,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'Рэдагаваць гэты файл з выкарыстаньнем вонкавай праграмы',
-'edit-externally-help' => '(Глядзіце падрабязнасьці ў [//www.mediawiki.org/wiki/Manual:External_editors інструкцыі па наладцы] (па-ангельску))',
+'edit-externally-help' => '(Глядзіце падрабязнасьці ў [https://www.mediawiki.org/wiki/Manual:External_editors інструкцыі па наладцы] (па-ангельску))',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'усё',
@@ -3886,7 +3885,7 @@ $5
 'version-version' => '(Вэрсія $1)',
 'version-svn-revision' => '(r$2)',
 'version-license' => 'Ліцэнзія',
-'version-poweredby-credits' => "{{SITENAME}} працуе на праграмным забесьпячэньні '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "{{SITENAME}} працуе на праграмным забесьпячэньні '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'іншыя',
 'version-poweredby-translators' => 'перакладчыкі з translatewiki.net',
 'version-credits-summary' => 'Нам вельмі хацелася б адзначыць наступных асобаў, што зрабілі ўнёсак у [[Special:Version|MediaWiki]].',
@@ -3929,8 +3928,7 @@ MediaWiki распаўсюджваецца з надзеяй, што будзе
 
 # Special:SpecialPages
 'specialpages' => 'Спэцыяльныя старонкі',
-'specialpages-note' => '----
-* Звычайныя спэцыяльныя старонкі.
+'specialpages-note' => '* Звычайныя спэцыяльныя старонкі.
 * <strong class="mw-specialpagerestricted">Спэцыяльныя старонкі з абмежаваным доступам.</strong>
 * <span class="mw-specialpagecached">Кэшаваныя спэцыяльныя старонкі (могуць быць састарэлымі).</span>',
 'specialpages-group-maintenance' => 'Тэхнічныя справаздачы',
index c1dabfd..225230e 100644 (file)
@@ -1038,8 +1038,8 @@ $2
 'edit-gone-missing' => 'Страницата не можа да се обнови.
 Вероятно междувременно е била изтрита.',
 'edit-conflict' => 'Редакционен конфликт.',
-'edit-no-change' => 'Ð\92аÑ\88аÑ\82а Ñ\80едакÑ\86иÑ\8f Ð±ÐµÑ\88е Ð¸Ð³Ð½Ð¾Ñ\80иÑ\80ана, Ñ\82Ñ\8aй ÐºÐ°то не съдържа промени по текста.',
-'postedit-confirmation' => 'Ð\92аÑ\88аÑ\82а Ñ\80едакÑ\86иÑ\8f беше съхранена',
+'edit-no-change' => 'РедакÑ\86иÑ\8fÑ\82а Ð²Ð¸ Ð±ÐµÑ\88е Ð¿Ñ\80енебÑ\80егнаÑ\82а, Ð·Ð°Ñ\89ото не съдържа промени по текста.',
+'postedit-confirmation' => 'РедакÑ\86иÑ\8fÑ\82а Ð²Ð¸ беше съхранена',
 'edit-already-exists' => 'Не можа да се създаде нова страница.
 Такава вече съществува.',
 'defaultmessagetext' => 'Текст на съобщението по подразбиране',
@@ -1170,8 +1170,8 @@ $2
 'revdelete-hide-text' => 'Скриване на текста на версията',
 'revdelete-hide-image' => 'Скриване на файловото съдържание',
 'revdelete-hide-name' => 'Скриване на действието и целта',
-'revdelete-hide-comment' => 'Скриване на коментара',
-'revdelete-hide-user' => 'СкÑ\80иване Ð½Ð° Ð¸Ð¼ÐµÑ\82о/IP-адÑ\80еÑ\81а Ð½Ð° Ð°Ð²тора',
+'revdelete-hide-comment' => 'Скриване на резюмето',
+'revdelete-hide-user' => 'Ð\9fоÑ\82Ñ\80ебиÑ\82елÑ\81ко Ð¸Ð¼Ðµ/IP Ð°Ð´Ñ\80еÑ\81 Ð½Ð° Ñ\80едактора',
 'revdelete-hide-restricted' => 'Прилагане на тези ограничения и за администраторите',
 'revdelete-radio-same' => '(да не се променя)',
 'revdelete-radio-set' => 'Да',
@@ -1323,13 +1323,13 @@ $1",
 'powersearch-togglenone' => 'Никои',
 'search-external' => 'Външно търсене',
 'searchdisabled' => 'Търсенето в {{SITENAME}} е временно изключено. Междувременно можете да търсите чрез Google. Обърнете внимание, че съхранените при тях страници най-вероятно са остарели.',
+'search-error' => 'Възникна грешка при търсене: $1',
 
 # Preferences page
 'preferences' => 'Настройки',
 'mypreferences' => 'Настройки',
 'prefs-edits' => 'Брой редакции:',
 'prefsnologin' => 'Не сте влезли',
-'prefsnologintext' => 'Необходимо е <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} да влезете]</span>, за да може да променяте потребителските си настройки.',
 'changepassword' => 'Смяна на парола',
 'prefs-skin' => 'Облик',
 'skin-preview' => 'предварителен преглед',
@@ -1459,7 +1459,7 @@ $1",
 'userrights-no-interwiki' => 'Нямате права да редактирате потребителските групи на други уикита.',
 'userrights-nodatabase' => 'Базата данни $1 не съществува или не е на локалния сървър.',
 'userrights-nologin' => 'За управление на потребителските права е необходимо [[Special:UserLogin|влизане]] с администраторска сметка.',
-'userrights-notallowed' => 'ТекÑ\83Ñ\89аÑ\82а Ñ\81меÑ\82ка Ð½Ñ\8fма Ð¿Ñ\80ава Ð´Ð° Ð´Ð¾Ð±Ð°Ð²Ñ\8f Ð¸Ð»Ð¸ Ð¿Ñ\80емаÑ\85ва потребителски права.',
+'userrights-notallowed' => 'Ð\9dÑ\8fмаÑ\82е Ð¿Ñ\80ава Ð´Ð° Ð´Ð¾Ð±Ð°Ð²Ñ\8fÑ\82е Ð¸Ð»Ð¸ Ð¿Ñ\80емаÑ\85ваÑ\82е потребителски права.',
 'userrights-changeable-col' => 'Групи, които можете да променяте',
 'userrights-unchangeable-col' => 'Групи, които не можете да променяте',
 
@@ -1944,6 +1944,11 @@ $1',
 'randompage' => 'Случайна страница',
 'randompage-nopages' => 'В {{PLURAL:$2|следното именно пространство|следните именни пространства}} няма страници: $1.',
 
+# Random page in category
+'randomincategory' => 'Случайна страница в категорията',
+'randomincategory-invalidcategory' => '„$1“ не е валидно име на категория.',
+'randomincategory-nopages' => 'В категория [[:Category:$1|$1]] няма страници.',
+
 # Random redirect
 'randomredirect' => 'Случайно пренасочване',
 'randomredirect-nopages' => 'В именно пространство „$1“ няма пренасочвания.',
@@ -2744,7 +2749,7 @@ $1',
 'allmessagesdefault' => 'Текст по подразбиране',
 'allmessagescurrent' => 'Текущ текст',
 'allmessagestext' => 'Тази страница съдържа списък на системните съобщения от именното пространство „МедияУики“.
-Посетете [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] и [//translatewiki.net translatewiki.net], ако желаете да допринесете за общата локализация на софтуера МедияУики.',
+Посетете [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] и [//translatewiki.net translatewiki.net], ако желаете да допринесете за общата локализация на софтуера МедияУики.',
 'allmessagesnotsupportedDB' => "Тази страница не може да бъде използвана, тъй като е изключена възможността '''\$wgUseDatabaseMessages'''.",
 'allmessages-filter-legend' => 'Филтър',
 'allmessages-filter' => 'Филтриране по ниво на персонализация:',
@@ -3023,7 +3028,7 @@ $1',
 'svg-long-desc' => 'Файл във формат SVG, основен размер: $1 × $2 пиксела, големина на файла: $3',
 'svg-long-desc-animated' => 'Анимиран SVG файл, основен размер $1 × $2 пиксела, големина на файла: $3',
 'svg-long-error' => 'Невалиден SVG файл: $1',
-'show-big-image' => 'Ð\9fÑ\8aлна Ñ\80азделиÑ\82елна Ñ\81поÑ\81обноÑ\81Ñ\82',
+'show-big-image' => 'Ð\9eÑ\80игинален Ñ\84айл',
 'show-big-image-preview' => 'Размер на този преглед: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Друга разделителна способност|Други разделителни способности}}: $1.',
 'show-big-image-size' => '$1 × $2 пиксела',
@@ -3444,7 +3449,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'Редактиране на файла чрез външно приложение',
-'edit-externally-help' => '(За повече информация прегледайте [//www.mediawiki.org/wiki/Manual:External_editors указанията за настройките]).',
+'edit-externally-help' => '(За повече информация прегледайте [https://www.mediawiki.org/wiki/Manual:External_editors указанията за настройките]).',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'всички',
@@ -3531,6 +3536,9 @@ $5
 'confirm-unwatch-button' => 'Потвърждаване',
 'confirm-unwatch-top' => 'Премахване на страницата от списъка ви за наблюдение?',
 
+# Separators for various lists, etc.
+'quotation-marks' => '„$1“',
+
 # Multipage image navigation
 'imgmultipageprev' => '← предишна страница',
 'imgmultipagenext' => 'следваща страница →',
@@ -3614,7 +3622,7 @@ $5
 'version-hook-subscribedby' => 'Ползвана от',
 'version-version' => '(Версия $1)',
 'version-license' => 'Лиценз',
-'version-poweredby-credits' => "Това уики се задвиждва от '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Това уики се задвиждва от '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'други',
 'version-poweredby-translators' => 'преводачи в translatewiki.net',
 'version-credits-summary' => 'Бихме искали да изкажем признателност на следните хора за техните приноси към [[Special:Version|MediaWiki]].',
@@ -3647,8 +3655,7 @@ MediaWiki се разпространява с надеждата, че ще б
 
 # Special:SpecialPages
 'specialpages' => 'Специални страници',
-'specialpages-note' => '----
-* Обикновени специални страници.
+'specialpages-note' => '* Обикновени специални страници.
 * <strong class="mw-specialpagerestricted">Специални страници с ограничения.</strong>
 * <span class="mw-specialpagecached">Само складирани специални страници (възможно е да са остарели).</span>',
 'specialpages-group-maintenance' => 'Доклади по поддръжката',
index fe44b3a..ce84736 100644 (file)
@@ -1180,7 +1180,6 @@ Catatan nang dihaharnya matan isi {{SITENAME}} kawa-ai sudah kadaluarsa.',
 'mypreferences' => 'Nang ulun katuju',
 'prefs-edits' => 'Rikinan babakan-babakan:',
 'prefsnologin' => 'Balum babuat log',
-'prefsnologintext' => 'Pian harus <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} babuat log]</span> gasat mengeset kakatujuan Pian.',
 'changepassword' => 'Ubah katasunduk',
 'prefs-skin' => 'Kulimbit',
 'skin-preview' => 'Titilikan',
@@ -2655,7 +2654,7 @@ Dalam kasus pahanyarnya Pian kawa jua mamuruk sabuah tautanm gasan cuntuh [[{{#S
 'allmessagesdefault' => 'Naskah baku pasan',
 'allmessagescurrent' => 'Naskah pasan wayahini.',
 'allmessagestext' => 'Ngini adalah sabuah daptar pasan sistem tasadia dalam ruang-ngaran MediaWiki.
-Muhun ilangi [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] wan [//translatewiki.net translatewiki.net] amun Pian hakun manyumbang palukalan umum MediaWiki.',
+Muhun ilangi [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] wan [//translatewiki.net translatewiki.net] amun Pian hakun manyumbang palukalan umum MediaWiki.',
 'allmessagesnotsupportedDB' => "Tungkaran ngini kada kawa dipuruk karana '''\$wgUseDatabaseMessages''' sudah dipajahakan.",
 'allmessages-filter-legend' => 'Saringan',
 'allmessages-filter' => 'Saringan lawan kaadaan kustom:',
@@ -3369,7 +3368,7 @@ Tautan-tautan abis tu pada baris sama dipartimbangkan sabagai pangacualian, nang
 
 # External editor support
 'edit-externally' => 'Babak barakas ngini puruk sabuah aplikasi luar',
-'edit-externally-help' => '(Lihati [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] untuk panjalasan labih)',
+'edit-externally-help' => '(Lihati [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] untuk panjalasan labih)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'samunyaan',
@@ -3558,7 +3557,7 @@ Pian kawa jua [[Special:EditWatchlist|mamuruk si pambabak standar]].',
 'version-hook-subscribedby' => 'Dilanggani ulih',
 'version-version' => '(Pirsi $1)',
 'version-license' => 'Lisansi',
-'version-poweredby-credits' => "Wiki ngini disukung ulih '''[//www.mediawiki.org/ MediaWiki]''', hak salin © 2001-$1 $2.",
+'version-poweredby-credits' => "Wiki ngini disukung ulih '''[https://www.mediawiki.org/ MediaWiki]''', hak salin © 2001-$1 $2.",
 'version-poweredby-others' => 'lainnya',
 'version-credits-summary' => 'Kami ingin ma-akui urang-urang ini atas sumbangan pikiran-tanaga kapada [[Special:Version|MediaWiki]].',
 'version-license-info' => 'MediaWiki adalah parangkat lunak bibas; Pian kawa manyabarakan wan/atawa maubahi ngini di bawah syarat Lisansi Publik Umum sawagai tarbitan ulih Free Software Foundation; apakah Lisansi virsi 2, atawa (pilihan Pian) pahanyarnya.
@@ -3584,8 +3583,7 @@ Pian saharusnya [{{SERVER}}{{SCRIPTPATH}}/COPYING sabuting salinan Lisansi Publi
 
 # Special:SpecialPages
 'specialpages' => 'Tungkaran istimiwa',
-'specialpages-note' => '----
-* Tutungkaran istimiwa normal
+'specialpages-note' => '* Tutungkaran istimiwa normal
 * <span class="mw-specialpagerestricted">Tutungkaran istimiwa tabatas.</span>
 * <span class="mw-specialpagecached">Tutungkaran istimiwa timbuluk (pinanya bakulat).</span>',
 'specialpages-group-maintenance' => 'Lapuran pamaliharaan',
index ba4745c..c957997 100644 (file)
@@ -713,6 +713,7 @@ $2
 'headline_tip' => '২য় স্তরের শিরোনাম',
 'nowiki_sample' => 'অ-ফরম্যাটকৃত টেক্সট এখানে প্রবিষ্ট করুন',
 'nowiki_tip' => 'উইকি ফরম্যাটিং উপেক্ষা করা হোক',
+'image_sample' => 'উদাহরণ.jpg',
 'image_tip' => 'গ্রথিত ফাইল',
 'media_tip' => 'ফাইল সংযোগ',
 'sig_tip' => 'সময় ও তারিখসহ আপনার স্বাক্ষর',
@@ -1033,8 +1034,8 @@ $3-এর দেয়া কারণ হল ''$2''",
 'revdelete-hide-user' => 'সম্পাদকে ব্যবহারকারীর নাম/আইপি',
 'revdelete-hide-restricted' => 'প্রশাসকবৃন্দ এবং অন্যদের ক্ষেত্রে এই ডাটা রোধ করো',
 'revdelete-radio-same' => 'পরিবর্তন নয়',
-'revdelete-radio-set' => 'দà§\83শà§\8dযমান',
-'revdelete-radio-unset' => 'লà§\81à¦\95ানà§\8b',
+'revdelete-radio-set' => 'লà§\81à¦\95ানà§\8b',
+'revdelete-radio-unset' => 'দà§\83শà§\8dযমান',
 'revdelete-suppress' => 'সব প্রশাসক ও অন্যান্যদের কাছ থেকে উপাত্ত লুকিয়ে রাখা হোক।',
 'revdelete-unsuppress' => 'সংশোধন পুনঃস্থাপনের উপর সীমাবদ্ধতা দূর করো',
 'revdelete-log' => 'কারণ:',
@@ -1190,7 +1191,6 @@ $1",
 'mypreferences' => 'পছন্দসমূহ',
 'prefs-edits' => 'সম্পাদনা সংখ্যা:',
 'prefsnologin' => 'আপনি লগ-ইন করেননি',
-'prefsnologintext' => 'ব্যবহারকারীর পছন্দ ঠিক করতে হলে আপনাকে অবশ্যই <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} লগইন]</span> করা অবস্থায় থাকতে হবে।',
 'changepassword' => 'শব্দচাবি পরিবর্তন',
 'prefs-skin' => 'আবরণ (Skin)',
 'skin-preview' => 'প্রাকদর্শন',
@@ -2203,7 +2203,7 @@ $PAGEINTRO $NEWPAGE
 ইমেইল: $PAGEEDITOR_EMAIL
 উইকি: $PAGEEDITOR_WIKI
 
-পাতাটির পরবর্তী পরিবর্তনগুলো জন্য আর কোন বিজ্ঞপ্তি পাঠানো হবে না, যতক্ষণ না আপনি এই পাতায় ব্রাউজ করবেন। এছাড়া আপনি আপনার নজরতালিকায় রাখা সবগুলি পাতা জন্য বিজ্ঞপ্তি ফ্ল্যাগ শুরুর অবস্থায় ফিরিয়ে নিতে পারেন।
+পাতাà¦\9fির à¦ªà¦°à¦¬à¦°à§\8dতà§\80 à¦ªà¦°à¦¿à¦¬à¦°à§\8dতনà¦\97à§\81লà§\8b à¦\9cনà§\8dয à¦\86র à¦\95à§\8bন à¦¬à¦¿à¦\9cà§\8dà¦\9eপà§\8dতি à¦ªà¦¾à¦ à¦¾à¦¨à§\8b à¦¹à¦¬à§\87 à¦¨à¦¾, à¦¯à¦¤à¦\95à§\8dষণ à¦¨à¦¾ à¦\86পনি à¦²à¦\97 à¦\87ন à¦\95রার à¦¸à¦®à¦¯à¦¼ à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦¯à¦¼ à¦¬à§\8dরাà¦\89à¦\9c à¦\95রবà§\87ন। à¦\8fà¦\9bাড়া à¦\86পনি à¦\86পনার à¦¨à¦\9cরতালিà¦\95ায় à¦°à¦¾à¦\96া à¦¸à¦¬à¦\97à§\81লি à¦ªà¦¾à¦¤à¦¾ à¦\9cনà§\8dয à¦¬à¦¿à¦\9cà§\8dà¦\9eপà§\8dতি à¦«à§\8dলà§\8dযাà¦\97 à¦¶à§\81রà§\81র à¦\85বসà§\8dথায় à¦«à¦¿à¦°à¦¿à¦¯à¦¼à§\87 à¦¨à¦¿à¦¤à§\87 à¦ªà¦¾à¦°à§\87ন।
 
 {{SITENAME}} নোটিফিকেশন
 
@@ -2715,7 +2715,7 @@ $1',
 'allmessagesdefault' => 'আদি টেক্সট',
 'allmessagescurrent' => 'বর্তমান টেক্সট',
 'allmessagestext' => 'এটি মিডিয়াউইকি নামস্থানে অন্তর্ভুক্ত সিস্টেম বার্তাগুলোর একটি তালিকা।
-আপনি যদি সাধারণ মিডিয়াউইকির স্থানীয়করণে অবদান রাখতে আগ্রহী হন, অনুগ্রহ করে [//www.mediawiki.org/wiki/Localisation মিডিয়াউইকি স্থানীয়করণ] এবং [//translatewiki.net translatewiki.net] দেখুন।',
+আপনি যদি সাধারণ মিডিয়াউইকির স্থানীয়করণে অবদান রাখতে আগ্রহী হন, অনুগ্রহ করে [https://www.mediawiki.org/wiki/Localisation মিডিয়াউইকি স্থানীয়করণ] এবং [//translatewiki.net translatewiki.net] দেখুন।',
 'allmessagesnotsupportedDB' => "এই পাতা ব্যবহার করা যাবে না কারণ '''\$wgUseDatabaseMessages''' বন্ধ করে রাখা আছে।",
 'allmessages-filter-legend' => 'ছাকনী',
 'allmessages-filter' => 'Filter by customization state:',
@@ -2917,6 +2917,7 @@ $2',
 'pageinfo-length' => 'পাতার দৈর্ঘ্য (বাইটে)',
 'pageinfo-article-id' => 'পাতার আইডি',
 'pageinfo-language' => 'পাতার তথ্যের ভাষা',
+'pageinfo-content-model' => 'পাতার বিষয়বস্তুর মডেল',
 'pageinfo-robot-policy' => 'রোবটের মাধ্যমে ইন্ডেক্স করা হচ্ছে',
 'pageinfo-robot-index' => 'অনুমোদিত',
 'pageinfo-robot-noindex' => 'অনুনমোদিন',
@@ -3002,7 +3003,7 @@ $1',
 'svg-long-desc' => 'এসভিজি ফাইল, সাধারণত $1 × $2 পিক্সেল, ফাইলের আকার: $3',
 'svg-long-desc-animated' => 'এনিমেটেড এসভিজি ফাইল, সাধারণত $1 × $2 পিক্সেল, ফাইলের আকার: $3',
 'svg-long-error' => 'অবৈধ SVG ফাইল: $1',
-'show-big-image' => 'পà§\82রà§\8dণ à¦°à§\87à¦\9cà§\8bলিà¦\89শন',
+'show-big-image' => 'মà§\82ল à¦«à¦¾à¦\87ল',
 'show-big-image-preview' => 'এই প্রিভিউ-এর আকার: $1।',
 'show-big-image-other' => 'অন্যান্য {{PLURAL:$2|আকার|আকারসমূহ}}: $1।',
 'show-big-image-size' => '$1 × $2 পিক্সেল',
@@ -3469,7 +3470,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'ফাইলটি অন্য কোন সফটওয়্যার দিয়ে সম্পাদনা করুন',
-'edit-externally-help' => 'আরও তথ্যের জন্য [//www.mediawiki.org/wiki/Manual:External_editors সেটআপ নির্দেশমালা] দেখুন।',
+'edit-externally-help' => 'আরও তথ্যের জন্য [https://www.mediawiki.org/wiki/Manual:External_editors সেটআপ নির্দেশমালা] দেখুন।',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'সবগুলো',
@@ -3692,7 +3693,7 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'version-hook-subscribedby' => 'সাবস্ক্রাইব করেছেন',
 'version-version' => '(সংস্করণ $1)',
 'version-license' => 'লাইসেন্স',
-'version-poweredby-credits' => "এইক উইকিটি পরিচালিত হচ্ছে '''[//www.mediawiki.org/ মিডিয়াউইকি]'''-এর মাধ্যমে, কপিরাইট © ২০০১-$1 $2।",
+'version-poweredby-credits' => "এইক উইকিটি পরিচালিত হচ্ছে '''[https://www.mediawiki.org/ মিডিয়াউইকি]'''-এর মাধ্যমে, কপিরাইট © ২০০১-$1 $2।",
 'version-poweredby-others' => 'অন্যান্য',
 'version-poweredby-translators' => 'translatewiki.net অনুবাদকগণ',
 'version-credits-summary' => '[[Special:Version|মিডিয়াউইকি]] সফটওয়্যারে অবদানের জন্য আমরা এই ব্যক্তিকে স্বীকৃতি দিতে চাই।',
@@ -3733,8 +3734,7 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 
 # Special:SpecialPages
 'specialpages' => 'বিশেষ পাতাসমূহ',
-'specialpages-note' => '----
-* সাধারণ বিশেষ পাতাসমূহ।
+'specialpages-note' => '* সাধারণ বিশেষ পাতাসমূহ।
 * <span class="mw-specialpagerestricted">সীমাবদ্ধ বিশেষ পাতা।</span>',
 'specialpages-group-maintenance' => 'রক্ষণাবেক্ষণের কার্যবিবরণীসমূহ',
 'specialpages-group-other' => 'অন্যান্য বিশেষ পাতাসমূহ',
index 8025ce8..2722af4 100644 (file)
@@ -1449,7 +1449,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'allmessagesdefault' => 'আদ্যকার টেক্সট',
 'allmessagescurrent' => 'হাদি এহানর ৱাহি',
 'allmessagestext' => 'তলে মিডিয়াউইকির নাঙরথাকে পানা একরের সিস্টেম পৌহানির তালিকাহান দেনা ইল।
-কৃপা করিয়া [//www.mediawiki.org/wiki/Localisation মিডিয়াউইকি অনুবাদর হেইচা পাতাত] বারো [//translatewiki.net translatewiki.net] মিডিয়াউইকি অনুবাদ করানির কা যানা পারর।',
+কৃপা করিয়া [https://www.mediawiki.org/wiki/Localisation মিডিয়াউইকি অনুবাদর হেইচা পাতাত] বারো [//translatewiki.net translatewiki.net] মিডিয়াউইকি অনুবাদ করানির কা যানা পারর।',
 'allmessages-filter-legend' => 'সাক',
 'allmessages-filter-unmodified' => 'নাসিলথাইতে',
 'allmessages-filter-all' => 'হাব্বি',
@@ -1586,7 +1586,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 
 # External editor support
 'edit-externally' => 'এর ফাইল এগ পতানির কা বারেদের এপ্লিকেশন আতা',
-'edit-externally-help' => 'আরাকউ হারপানির কা [//www.mediawiki.org/wiki/Manual:External_editors সেটাপর নির্দেশহানি] চা।',
+'edit-externally-help' => 'আরাকউ হারপানির কা [https://www.mediawiki.org/wiki/Manual:External_editors সেটাপর নির্দেশহানি] চা।',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'হাব্বি',
index 9191af5..4436f77 100644 (file)
@@ -187,12 +187,12 @@ $messages = array(
 'tog-hidepatrolled' => "Kuzhat ar c'hemmoù evezhiet e-touez ar c'hemmoù diwezhañ",
 'tog-newpageshidepatrolled' => 'Kuzhat ar pajennoù evezhiet diouzh roll ar pajennoù nevez',
 'tog-extendwatchlist' => 'Astenn ar roll evezhiañ a-benn diskouez an holl gemmoù ha neket ar re ziwezhañ hepken.',
-'tog-usenewrc' => "Diskouez ar c'hemmoù nevez en ur feson kempennoc'h (rekis eo JavaScript)",
+'tog-usenewrc' => "Diskouez ar c'hemmoù nevez en ur feson kempennoc'h",
 'tog-numberheadings' => 'Niverenniñ emgefre an titloù',
 'tog-showtoolbar' => 'Diskouez ar varrenn ostilhoù aozañ',
 'tog-editondblclick' => 'Daouglikañ evit kemmañ pajennoù',
 'tog-editsection' => 'Kemmañ ur rann dre al liammoù [kemmañ]',
-'tog-editsectiononrightclick' => 'Kemmañ ur rann dre glikañ a-zehou<br /> war titl ar rann',
+'tog-editsectiononrightclick' => 'Kemmañ ur rann dre glikañ a-zehou war titl ar rann',
 'tog-showtoc' => 'Diskouez an daolenn<br /> (evit ar pennadoù zo ouzhpenn 3 rann enno)',
 'tog-rememberpassword' => "Derc'hel soñj eus ma ger-tremen war an urzhiataer-mañ (evit $1 devezh{{PLURAL:$1||}} d'ar muiañ)",
 'tog-watchcreations' => "Ouzhpennañ ar pajennoù krouet ganin da'm roll evezhiañ",
@@ -398,7 +398,7 @@ $messages = array(
 'articlepage' => 'Sellet ouzh ar pennad',
 'talk' => 'Kaozeadenn',
 'views' => 'Gweladennoù',
-'toolbox' => 'Boest ostilhoù',
+'toolbox' => 'Ostilhoù',
 'userpage' => 'Pajenn implijer',
 'projectpage' => 'Pajenn meta',
 'imagepage' => 'Gwelet pajenn ar restr',
@@ -633,7 +633,7 @@ Na zisoñjit ket resisaat ho [[Special:Preferences|penndibaboù evit {{SITENAME}
 'gotaccount' => "Ur gont zo ganeoc'h dija ? '''$1'''.",
 'gotaccountlink' => 'Kevreañ',
 'userlogin-resetlink' => "Ha disoñjet eo bet ho titouroù kevreañ ganeoc'h ?",
-'userlogin-resetpassword-link' => 'Adderaouekaat ho ker-tremen',
+'userlogin-resetpassword-link' => 'Ankouaet ho peus ho ker-tremen ?',
 'helplogin-url' => 'Help:Kevreañ',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Skoazell evit kevreañ]]',
 'createacct-join' => 'Skrivit ho titouroù amañ dindan.',
@@ -700,7 +700,8 @@ A-raok na vije kaset postel ebet d'ar gont-se e vo ret deoc'h heuliañ ar c'huzu
 'mailerror' => 'Fazi en ur gas ar postel : $1',
 'acct_creation_throttle_hit' => "{{PLURAL:$1|1 gont|$1 kont}} zo bet krouet c'hoazh nevez zo dre ho chomlec'h IP gant gweladennerien d'ar wiki-mañ, ar pezh zo an niver brasañ aotreet. Dre se, n'hall ket ket ar weladennerien a implij an IP-mañ krouiñ kontoù mui evit ar mare.",
 'emailauthenticated' => "Gwiriet eo bet ho chomlec'h postel d'an $2 da $3.",
-'emailnotauthenticated' => "N'eo ket bet gwiriekaet ho chomlec'h postel evit c'hoazh. Ne vo ket tu da gas postel ebet deoc'h evit hini ebet eus an dezverkoù dindan.",
+'emailnotauthenticated' => "N'eo ket bet gwiriekaet ho chomlec'h postel evit c'hoazh.
+Ne vo ket tu da gas postel ebet deoc'h evit hini ebet eus an dezverkoù dindan.",
 'noemailprefs' => "Merkit ur chomlec'h postel mar fell deoc'h ez afe an arc'hwelioù-mañ en-dro.",
 'emailconfirmlink' => "Kadarnait ho chomlec'h postel",
 'invalidemailaddress' => "N'haller ket degemer ar chomlec'h postel-mañ rak faziek eo e furmad evit doare.
@@ -877,9 +878,7 @@ Moarvat ez eo bet dilerc'hiet pe dilamet abaoe ma oa bet lennet ganeoc'h.",
 'loginreqlink' => 'kevreañ',
 'loginreqpagetext' => "Ret eo deoc'h $1 evit gwelet pajennoù all.",
 'accmailtitle' => 'Ger-tremen kaset.',
-'accmailtext' => "Kaset ez eus bet ur ger-tremen dargouezhek evit [[User talk:$1|$1]] da $2.
-
-Cheñchet e c'hall ar ger-tremen evit ar gont nevez-mañ bezañ war ar bajenn ''[[Special:ChangePassword|cheñch ger-tremen]]'', ur wezh kevreet.",
+'accmailtext' => "Kaset ez eus bet ur ger-tremen dargouezhek evit [[User talk:$1|$1]] da $2. Cheñchet e c'hall ar ger-tremen evit ar gont nevez-mañ bezañ war ar bajenn ''[[Special:ChangePassword|cheñch ger-tremen]]'', ur wezh kevreet.",
 'newarticle' => '(Nevez)',
 'newarticletext' => "Heuliet hoc'h eus ul liamm a gas d'ur bajenn n'eo ket bet savet evit c'hoazh.
 A-benn krouiñ ar bajenn-se, krogit da skrivañ er prenestr skridaozañ dindan (gwelet ar [[{{MediaWiki:Helppage}}|bajenn skoazell]] evit gouzout hiroc'h).
@@ -1129,15 +1128,15 @@ Gouest e vo merourien all {{SITENAME}} da dapout krog en testennoù kuzhet ha da
 * Titouroù personel dizere
 *: ''chomlec'hioù, niverennoù pellgomz pe surentez sokial personel, hag all''",
 'revdelete-legend' => 'Lakaat strishadurioù gwelet',
-'revdelete-hide-text' => 'Kuzhat testenn ar stumm',
+'revdelete-hide-text' => 'Testenn ar stumm',
 'revdelete-hide-image' => 'Kuzhat danvez ar restr',
 'revdelete-hide-name' => 'Kuzhat an ober hag ar vukadenn',
-'revdelete-hide-comment' => "Kuzhat notenn ar c'hemm",
-'revdelete-hide-user' => "Kuzhat anv implijer pe chomlec'h IP an aozer",
+'revdelete-hide-comment' => "Notenn ar c'hemm",
+'revdelete-hide-user' => "Anv implijer pe chomlec'h IP an aozer",
 'revdelete-hide-restricted' => "Diverkañ ar roadennoù kement d'ar verourien ha d'ar re all",
 'revdelete-radio-same' => '(arabat cheñch)',
-'revdelete-radio-set' => 'Ya',
-'revdelete-radio-unset' => 'Ket',
+'revdelete-radio-set' => 'Hewel',
+'revdelete-radio-unset' => 'Kuzhet',
 'revdelete-suppress' => 'Diverkañ roadennoù ar verourien hag ar re all',
 'revdelete-unsuppress' => 'Lemel ar strishadurioù war ar stummoù assavet',
 'revdelete-log' => 'Abeg :',
@@ -1290,7 +1289,6 @@ Gallout a reot kavout munudoù e [{{fullurl:{{#Special:Log}}/delete|page={{FULLP
 'mypreferences' => 'Penndibaboù',
 'prefs-edits' => 'Niver a zegasadennoù :',
 'prefsnologin' => 'Digevreet',
-'prefsnologintext' => 'Ret eo deoc\'h bezañ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} kevreet]</span> a-benn gellout cheñch ho tibaboù implijer.',
 'changepassword' => 'Kemmañ ar ger-tremen',
 'prefs-skin' => 'Gwiskadur',
 'skin-preview' => 'Rakwelet',
@@ -2821,7 +2819,7 @@ Mard eo se e c'hallit ivez implijout ul liamm a seurt gant [[{{#Special:Export}}
 'allmessagesdefault' => 'Kemennadenn dre ziouer',
 'allmessagescurrent' => 'Kemennadenn zo bremañ',
 'allmessagestext' => "Setu roll ar c'hemennadennoù reizhiad a c'haller kaout en esaouennoù anv MediaWiki.
-Kit da welet [//www.mediawiki.org/wiki/Localisation Lec'heladur MediaWiki] ha [//translatewiki.net translatewiki.net] mar fell deoc'h kemer perzh e lec'heladur boutin MediaWiki.",
+Kit da welet [https://www.mediawiki.org/wiki/Localisation Lec'heladur MediaWiki] ha [//translatewiki.net translatewiki.net] mar fell deoc'h kemer perzh e lec'heladur boutin MediaWiki.",
 'allmessagesnotsupportedDB' => "N'haller ket kaout {{ns:special}}:AllMessages rak diweredekaet eo bet wgUseDatabaseMessages.",
 'allmessages-filter-legend' => 'Sil',
 'allmessages-filter' => "Silañ dre stad ar c'hemmoù",
@@ -3590,7 +3588,7 @@ Kuzhet e vo ar re all dre ziouer.
 
 # External editor support
 'edit-externally' => 'Kemmañ ar restr-mañ dre un arload diavaez',
-'edit-externally-help' => "(Gwelet [//www.mediawiki.org/wiki/Manual:External_editors erbedadennoù staliañ an aozer diavaez] a-benn gouzout hiroc'h).",
+'edit-externally-help' => "(Gwelet [https://www.mediawiki.org/wiki/Manual:External_editors erbedadennoù staliañ an aozer diavaez] a-benn gouzout hiroc'h).",
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'pep tra',
@@ -3793,7 +3791,7 @@ Gallout a rit [[Special:EditWatchlist|implijout an aozer boutin ivez]].',
 'version-hook-subscribedby' => 'Termenet gant',
 'version-version' => '(Stumm $1)',
 'version-license' => 'Aotre-implijout',
-'version-poweredby-credits' => "Mont a ra ar wiki-mañ en-dro a-drugarez da '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Mont a ra ar wiki-mañ en-dro a-drugarez da '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 're all',
 'version-poweredby-translators' => 'troerien translatewiki.net',
 'version-credits-summary' => 'Karout a rafemp trugarekaat an dud-mañ evit ho kenlabour e [[Special:Version|MediaWiki]].',
@@ -3832,8 +3830,7 @@ Sañset oc'h bezañ resevet [{{SERVER}}{{SCRIPTPATH}}/COPYING un eilskrid eus ar
 
 # Special:SpecialPages
 'specialpages' => 'Pajennoù dibar',
-'specialpages-note' => '----
-* Pajennoù dibar boutin.
+'specialpages-note' => '* Pajennoù dibar boutin.
 * <span class="mw-specialpagerestricted">Pajennoù dibar miret strizh.</span>
 * <span class="mw-specialpagecached">Pajennoù dibar krubuilhet hepken (a c\'hellfe bezañ re gozh).</span>',
 'specialpages-group-maintenance' => "Rentaoù-kont trezalc'h",
@@ -3924,14 +3921,14 @@ Sañset oc'h bezañ resevet [{{SERVER}}{{SCRIPTPATH}}/COPYING un eilskrid eus ar
 'logentry-delete-delete' => 'Diverket eo bet ar bajenn $3 gant $1',
 'logentry-delete-restore' => 'Assavet eo bet ar bajenn $3 gant $1',
 'logentry-delete-event' => "Kemmet eo bet gwelusted {{PLURAL:$5|un darvoud eus ar marilh|$5 darvoud eus ar marilh}} d'an $3 gant $1 : $4",
-'logentry-delete-revision' => 'Kemmet eo bet gwelusted {{PLURAL:$5|$5reizhadenn}} war ar bajenn $3 gant $1 : $4',
-'logentry-delete-event-legacy' => 'Kemmet eo bet gwelusted darvoudoù ar marilh $3 gant $1',
-'logentry-delete-revision-legacy' => 'Kemmet eo bet gwelusted ar reizhadennoù war ar bajenn $3 gant $1',
+'logentry-delete-revision' => '{{GENDER:$2|Kemmet}} eo bet gwelusted {{PLURAL:$5|reizhadenn|$5 reizhadenn}} war ar bajenn $3 gant $1 : $4',
+'logentry-delete-event-legacy' => '{{GENDER:$2|Kemmet}} eo bet gwelusted darvoudoù ar marilh $3 gant $1',
+'logentry-delete-revision-legacy' => '{{GENDER:$2|Kemmet}} eo bet gwelusted ar reizhadennoù war ar bajenn $3 gant $1',
 'logentry-suppress-delete' => '$1 {{GENDER:$2|en deus dilamet}} ar bajenn $3',
-'logentry-suppress-event' => "Kemmet eo bet dre guzh gwelusted {{PLURAL:$5|un darvoud eus ar marilh|$5 darvoud eus ar marilh}} d'an $3 gant $1 : $4",
+'logentry-suppress-event' => "{{GENDER:$2|Kemmet}} eo bet dre guzh gwelusted {{PLURAL:$5|un darvoud eus ar marilh|$5 darvoud eus ar marilh}} d'an $3 gant $1 : $4",
 'logentry-suppress-revision' => 'Kemmet eo bet dre guzh gwelusted {{PLURAL:$5|reizhadenn|$5 reizhadenn}} war ar bajenn $3 gant $1 : $4',
-'logentry-suppress-event-legacy' => "Kemmet eo bet dre guzh gwelusted darvoudoù ar marilh d'an $3 gant $1",
-'logentry-suppress-revision-legacy' => 'Kemmet eo bet dre guzh gwelusted ar reizhadennoù war ar bajenn $3 gant $1',
+'logentry-suppress-event-legacy' => "{{GENDER:$2|Kemmet}} eo bet dre guzh gwelusted darvoudoù ar marilh d'an $3 gant $1",
+'logentry-suppress-revision-legacy' => '{{GENDER:$2|Kemmet}} eo bet dre guzh gwelusted ar reizhadennoù war ar bajenn $3 gant $1',
 'revdelete-content-hid' => 'danvez kuzet',
 'revdelete-summary-hid' => 'kemmañ an diverrañ kuzhet',
 'revdelete-uname-hid' => 'anv implijer kuzhet',
@@ -3944,9 +3941,9 @@ Sañset oc'h bezañ resevet [{{SERVER}}{{SCRIPTPATH}}/COPYING un eilskrid eus ar
 'logentry-move-move-noredirect' => 'kaset ar bajenn $3 da $4 gant $1 hep adkas',
 'logentry-move-move_redir' => 'kaset ar bajenn $3 da $4 gant $1 dreist un adkas',
 'logentry-move-move_redir-noredirect' => 'kaset ar bajenn $3 da $4 gant $1 dreist un adkas hep lezel un adkas',
-'logentry-patrol-patrol' => 'Merket eo bet an adweladenn $4 eus ar bajenn $3 evel gwiriet gant $1',
-'logentry-patrol-patrol-auto' => 'Merket eo bet ent emgefre an adweladenn $4 eus ar bajenn $3 evel gwiriet gant $1',
-'logentry-newusers-newusers' => 'Krouet eo bet ar gont implijer $1',
+'logentry-patrol-patrol' => '{{GENDER:$2|Merket}} eo bet an adweladenn $4 eus ar bajenn $3 evel gwiriet gant $1',
+'logentry-patrol-patrol-auto' => '{{GENDER:$2|Merket}} eo bet ent emgefre an adweladenn $4 eus ar bajenn $3 evel gwiriet gant $1',
+'logentry-newusers-newusers' => '{{GENDER:$2|Krouet}} eo bet ar gont implijer $1',
 'logentry-newusers-create' => 'Krouet eo bet ar gont implijer $1',
 'logentry-newusers-create2' => 'Gant $1 eo bet krouet ar gont implijer $3',
 'logentry-newusers-byemail' => 'Krouet eo bet ar gont implijer $3 gant $1 ha kaset eo bet ar ger-tremen dre bostel',
index dc57112..a9cbef4 100644 (file)
@@ -730,9 +730,11 @@ Ne zaboravite da prilagodite sebi svoja [[Special:Preferences|{{SITENAME}} pode
 'gotaccount' => 'Već imate korisnički račun? $1.',
 'gotaccountlink' => 'Prijavi se',
 'userlogin-resetlink' => 'Zaboravili ste detalje vaše prijave?',
-'userlogin-resetpassword-link' => 'Resetirajte svoju šifru/lozinku',
+'userlogin-resetpassword-link' => 'Zaboravili ste šifru/lozinku?',
 'helplogin-url' => 'Help:Prijavljivanje',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Pomoć pri prijavljivanju]]',
+'userlogin-loggedin' => 'Već ste prijavljeni kao {{GENDER:$1|$1}}.
+Koristite donji obrazac da biste se prijavili kao drugi korisnik.',
 'userlogin-createanother' => 'Napravi još jedan račun',
 'createacct-join' => 'Unesite svoje podatke ispod.',
 'createacct-another-join' => 'Unesite informacije o novom računu ispod.',
@@ -790,16 +792,16 @@ Ako je neko drugi napravio ovaj zahtjev ili ako ste se sjetili vaše šifre i ne
 'passwordsent' => 'Nova šifra je poslata na adresu e-pošte korisnika "$1".
 Molimo Vas da se prijavite pošto je primite.',
 'blocked-mailpassword' => 'Da bi se spriječila nedozvoljena akcija, Vašoj IP adresi je onemogućeno uređivanje stranica kao i mogućnost zahtijevanje nove šifre.',
-'eauthentsent' => 'Na navedenu adresu poslan je e-mail s potvrdom.
-Prije nego što pošaljemo daljnje poruke, molimo vas da otvorite e-mail i slijedite u njemu sadržana uputstva da potvrdite da ste vi kreirali korisnički račun.',
+'eauthentsent' => 'Na navedenu adresu poslana je e-poruka s potvrdom.
+Prije nego što pošaljemo daljnje poruke, pratite uputstva s e-pošte da biste potvrdili da je račun zaista Vaša.',
 'throttled-mailpassword' => 'Već Vam je poslan e-mail za promjenu šifre u {{PLURAL:$1|zadnjih sat vremena|zadnja $1 sata|zadnjih $1 sati}}.
 Da bi se spriječila zloupotreba, može se poslati samo jedan e-mail za promjenu šifre {{PLURAL:$1|svakih sat vremena|svaka $1 sata|svakih $1 sati}}.',
 'mailerror' => 'Greška pri slanju e-pošte: $1',
 'acct_creation_throttle_hit' => 'Posjetioci na ovoj wiki koji koriste Vašu IP adresu su već napravili {{PLURAL:$1|$1 račun|$1 računa}} u zadnjih nekoliko dana, što je najveći broj dopuštenih napravljenih računa za ovaj period.
 Kao rezultat, posjetioci koji koriste ovu IP adresu ne mogu trenutno praviti više računa.',
-'emailauthenticated' => 'Vaša e-mail adresa je autentificirana na $2 u $3.',
-'emailnotauthenticated' => 'Vaša e-mail adresa još nije autentificirana.
-Nijedan e-mail neće biti poslan za bilo koju uslugu od slijedećih.',
+'emailauthenticated' => 'Vaša adresa e-pošte je potvrđena $2 u $3.',
+'emailnotauthenticated' => 'Vaša adresa e-pošte još nije potvrđena.
+Nijedna e-poruka neće biti poslana za bilo koju uslugu od slijedećih.',
 'noemailprefs' => 'Unesite e-mail adresu za osposobljavanje slijedećih usluga.',
 'emailconfirmlink' => 'Potvrdite Vašu e-mail adresu',
 'invalidemailaddress' => 'Ova e-mail adresa ne može biti prihvaćena jer je u neodgovarajućem obliku.
@@ -1397,7 +1399,6 @@ Pokušajte u Vaš upit uključiti prefiks ''all:'' da bi ste pretražili sav sad
 'mypreferences' => 'Postavke',
 'prefs-edits' => 'Broj izmjena:',
 'prefsnologin' => 'Niste prijavljeni',
-'prefsnologintext' => 'Da biste mogli podešavati korisničke postavke, morate <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} biti prijavljeni]</span>.',
 'changepassword' => 'Promijeni šifru',
 'prefs-skin' => 'Koža',
 'skin-preview' => 'Pregled',
@@ -2926,7 +2927,7 @@ U drugom slučaju možete koristiti i vezu, npr. [[{{#Special:Export}}/{{MediaWi
 'allmessagesdefault' => 'Uobičajeni tekst',
 'allmessagescurrent' => 'Trenutni tekst',
 'allmessagestext' => 'Ovo je spisak svih sistemskih poruka u dostupnih u MediaWiki imenskom prostoru.
-Molimo posjetite [//www.mediawiki.org/wiki/Localisation MediaWiki lokalizaciju] i [//translatewiki.net translatewiki.net] ako želite doprinijeti općoj lokalizaciji MediaWikija.',
+Molimo posjetite [https://www.mediawiki.org/wiki/Localisation MediaWiki lokalizaciju] i [//translatewiki.net translatewiki.net] ako želite doprinijeti općoj lokalizaciji MediaWikija.',
 'allmessagesnotsupportedDB' => 'Ova stranica ne može biti korištena jer je <i>wgUseDatabaseMessages</i> isključen.',
 'allmessages-filter-legend' => 'Filter',
 'allmessages-filter' => 'Filter po stanju podešavanja:',
@@ -3697,7 +3698,7 @@ Svi drugi linkovi u istoj liniji se smatraju izuzecima, npr. kod stranica gdje s
 
 # External editor support
 'edit-externally' => 'Izmjeni ovu datoteku koristeći vanjski program',
-'edit-externally-help' => '(Pogledajte [//www.mediawiki.org/wiki/Manual:External_editors instrukcije za podešavanje] za više informacija)',
+'edit-externally-help' => '(Pogledajte [https://www.mediawiki.org/wiki/Manual:External_editors instrukcije za podešavanje] za više informacija)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'sve',
@@ -3939,7 +3940,7 @@ Također možete [[Special:EditWatchlist|koristiti standardni uređivač]].',
 'version-hook-subscribedby' => 'Pretplaćeno od',
 'version-version' => '(Verzija $1)',
 'version-license' => 'Licenca',
-'version-poweredby-credits' => "Ova wiki je zasnovana na '''[//www.mediawiki.org/ MediaWiki]''', autorska prava zadržana © 2001-$1 $2.",
+'version-poweredby-credits' => "Ova wiki je zasnovana na '''[https://www.mediawiki.org/ MediaWiki]''', autorska prava zadržana © 2001-$1 $2.",
 'version-poweredby-others' => 'ostali',
 'version-credits-summary' => 'Željeli bismo se zahvaliti sljedećim ljudima na njihovom doprinosu [[Special:Version|MediaWikiju]].',
 'version-license-info' => 'Mediawiki je slobodni softver, možete ga redistribuirati i/ili mijenjati pod uslovima GNU opće javne licence kao što je objavljeno od strane Fondacije Slobodnog Softvera, bilo u verziji 2 licence, ili (po vašoj volji) nekoj od kasniji verzija.
@@ -3975,8 +3976,7 @@ Trebali biste dobiti [{{SERVER}}{{SCRIPTPATH}}/KOPIJU GNU opće javne licence] z
 
 # Special:SpecialPages
 'specialpages' => 'Posebne stranice',
-'specialpages-note' => '----
-* Normalne posebne stranice.
+'specialpages-note' => '* Normalne posebne stranice.
 * <strong class="mw-specialpagerestricted">Zaštićene posebne stranice.</strong>',
 'specialpages-group-maintenance' => 'Izvještaji za održavanje',
 'specialpages-group-other' => 'Ostale posebne stranice',
@@ -4015,6 +4015,7 @@ Trebali biste dobiti [{{SERVER}}{{SCRIPTPATH}}/KOPIJU GNU opće javne licence] z
 'tags-tag' => 'Naziv oznake',
 'tags-display-header' => 'Vidljivost na spisku izmjena',
 'tags-description-header' => 'Puni opis značenja',
+'tags-active-header' => 'Aktivna?',
 'tags-hitcount-header' => 'Označene izmjene',
 'tags-active-yes' => 'Da',
 'tags-active-no' => 'Ne',
index 6e58102..53718ae 100644 (file)
@@ -407,10 +407,10 @@ $messages = array(
 'undeletethispage' => "Desfés l'eliminació d'aquesta pàgina",
 'undelete_short' => "Restaura {{PLURAL:$1|l'edició eliminada|$1 edicions eliminades}}",
 'viewdeleted_short' => 'Mostra {{PLURAL:$1|una edició eliminada|$1 edicions eliminades}}',
-'protect' => 'Protecció',
+'protect' => 'Protegeix',
 'protect_change' => 'canvia',
-'protectthispage' => 'Protecció de la pàgina',
-'unprotect' => 'Desprotecció',
+'protectthispage' => 'Protegeix aquesta pàgina',
+'unprotect' => 'Desprotegeix',
 'unprotectthispage' => 'Desprotegeix aquesta pàgina',
 'newpage' => 'Pàgina nova',
 'talkpage' => 'Discussió',
@@ -539,6 +539,7 @@ Això pot indicar un error en el programari.",
 'databaseerror-textcl' => "S'ha produït un error en la consulta de la base de dades.",
 'databaseerror-query' => 'Consulta: $1',
 'databaseerror-function' => 'Funció: $1',
+'databaseerror-error' => 'Error:$1',
 'laggedslavemode' => 'Avís: La pàgina podria mancar de modificacions recents.',
 'readonly' => 'La base de dades es troba bloquejada',
 'enterlockreason' => 'Escriviu una raó pel bloqueig, així com una estimació de quan tindrà lloc el desbloqueig',
@@ -609,6 +610,7 @@ L\'administrador que l\'ha bloquejat ha donat aquesta explicació: "$3".',
 'invalidtitle-unknownnamespace' => 'Títol no vàlid amb espai de noms desconegut de número «$1» i text «$2»',
 'exception-nologin' => 'No has iniciat sessió',
 'exception-nologin-text' => 'Aquesta pàgina o acció requereix que iniciïs sessió a aquest wiki.',
+'exception-nologin-text-manual' => 'Si us plau, $1 per poder accedir a aquesta pàgina o acció.',
 
 # Virus scanner
 'virus-badscanner' => "Mala configuració: antivirus desconegut: ''$1''",
@@ -655,7 +657,7 @@ No oblideu de canviar les vostres [[Special:Preferences|preferències de {{SITEN
 'gotaccount' => 'Ja teniu un compte? $1.',
 'gotaccountlink' => 'Inicia una sessió',
 'userlogin-resetlink' => "Heu oblidat les vostres dades d'accés?",
-'userlogin-resetpassword-link' => 'Reinicia la contrasenya',
+'userlogin-resetpassword-link' => 'Has oblidat la teva contrasenya?',
 'helplogin-url' => 'Help:Registrar-se',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Ajuda]]',
 'userlogin-loggedin' => 'Heu iniciat una sessió com {{GENDER:$1|$1}}.
@@ -1318,7 +1320,6 @@ Es pot trobar més informació en el [{{fullurl:{{#Special:Log}}/delete|page={{F
 'mypreferences' => 'Preferències',
 'prefs-edits' => "Nombre d'edicions:",
 'prefsnologin' => 'No heu iniciat cap sessió',
-'prefsnologintext' => 'Heu d\'estar <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} autenticats]</span> per a seleccionar les preferències d\'usuari.',
 'changepassword' => 'Canvia la contrasenya',
 'prefs-skin' => 'Aparença',
 'skin-preview' => 'prova',
@@ -2841,7 +2842,7 @@ En el darrer cas, podeu fer servir un enllaç com ara [[{{#Special:Export}}/{{Me
 'allmessagesname' => 'Nom',
 'allmessagesdefault' => 'Text per defecte',
 'allmessagescurrent' => 'Text actual',
-'allmessagestext' => "Tot seguit hi ha una llista dels missatges del sistema que es troben a l'espai de noms ''MediaWiki''. La traducció genèrica d'aquests missatges no s'hauria de fer localment sinó a la traducció del programari MediaWiki. Si voleu ajudar-hi visiteu [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] i [//translatewiki.net translatewiki.net].",
+'allmessagestext' => "Tot seguit hi ha una llista dels missatges del sistema que es troben a l'espai de noms ''MediaWiki''. La traducció genèrica d'aquests missatges no s'hauria de fer localment sinó a la traducció del programari MediaWiki. Si voleu ajudar-hi visiteu [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] i [//translatewiki.net translatewiki.net].",
 'allmessagesnotsupportedDB' => "No es pot processar '''{{ns:special}}:Allmessages''' perquè la variable '''\$wgUseDatabaseMessages''' està desactivada.",
 'allmessages-filter-legend' => 'Filtre',
 'allmessages-filter' => "Filtra per l'estat de personalització:",
@@ -3051,6 +3052,7 @@ Això deu ser degut per un enllaç a un lloc extern inclòs a la llista negra.',
 'pageinfo-length' => 'Mida de la pàgina (en bytes)',
 'pageinfo-article-id' => 'ID de la pàgina',
 'pageinfo-language' => 'Llengua del contingut de la pàgina',
+'pageinfo-content-model' => 'Plantilla de contingut de pàgina',
 'pageinfo-robot-policy' => 'Indexació per robots',
 'pageinfo-robot-index' => 'Permès',
 'pageinfo-robot-noindex' => 'No permès',
@@ -3603,7 +3605,7 @@ La resta d'enllaços de la línia són les excepcions, és a dir, les pàgines o
 
 # External editor support
 'edit-externally' => 'Edita aquest fitxer fent servir una aplicació externa',
-'edit-externally-help' => '(Vegeu les [//www.mediawiki.org/wiki/Manual:External_editors instruccions de configuració] per a més informació)',
+'edit-externally-help' => '(Vegeu les [https://www.mediawiki.org/wiki/Manual:External_editors instruccions de configuració] per a més informació)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'totes',
@@ -3791,7 +3793,7 @@ També podeu [[Special:EditWatchlist|utilitzar l'editor estàndard]].",
 'version-hook-subscribedby' => 'Subscrit per',
 'version-version' => '(Versió $1)',
 'version-license' => 'Llicència',
-'version-poweredby-credits' => "El wiki funciona gràcies a '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "El wiki funciona gràcies a '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'altres',
 'version-poweredby-translators' => 'Traductors de translatewiki.net',
 'version-credits-summary' => 'El nostre reconeixement a les següents persones per la seva aportació a [[Special:Version|MediaWiki]]',
@@ -3832,8 +3834,8 @@ Amb aquest programa heu d'haver rebut [{{SERVER}}{{SCRIPTPATH}}/COPYING una còp
 
 # Special:SpecialPages
 'specialpages' => 'Pàgines especials',
-'specialpages-note' => '----
-* Pàgines especials normals.
+'specialpages-note-top' => 'Llegenda',
+'specialpages-note' => '* Pàgines especials normals.
 * <span class="mw-specialpagerestricted">Pàgines especials restringides.</span>
 * <span class="mw-specialpagecached">Pàgines especials en memòria cau (poden ser obsoletes).</span>',
 'specialpages-group-maintenance' => 'Informes de manteniment',
index 94734b1..42cb98b 100644 (file)
@@ -1179,7 +1179,7 @@ If a new page with the same name has been created since the deletion, the restor
 'allmessagesdefault' => '默認其消息文字',
 'allmessagescurrent' => '現時其文字',
 'allmessagestext' => '茲是敆媒體維基命名空間底裏系統消息其蜀萆單單。
-如果汝卜想貢獻通用其媒體維基本地化服務,請訪問[//www.mediawiki.org/wiki/Localisation 媒體維基本地化]共[//translatewiki.net translatewiki.net]。',
+如果汝卜想貢獻通用其媒體維基本地化服務,請訪問[https://www.mediawiki.org/wiki/Localisation 媒體維基本地化]共[//translatewiki.net translatewiki.net]。',
 'allmessagesnotsupportedDB' => "茲蜀頁𣍐使其,因為'''\$wgUseDatabaseMessages'''已經乞禁止去了。",
 
 # Thumbnails
@@ -1257,7 +1257,7 @@ If a new page with the same name has been created since the deletion, the restor
 
 # External editor support
 'edit-externally' => '使外程序來編輯茲文件',
-'edit-externally-help' => '(參考[//www.mediawiki.org/wiki/Manual:External_editors setup instructions]來瞭解更価信息)',
+'edit-externally-help' => '(參考[https://www.mediawiki.org/wiki/Manual:External_editors setup instructions]來瞭解更価信息)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => '所有',
index 2639d51..b9c263c 100644 (file)
@@ -75,54 +75,52 @@ $specialPageAliases = array(
        'Activeusers'               => array( 'Жигара_декъашхой' ),
        'Allmessages'               => array( 'ГӀирса_хаамаш' ),
        'Allpages'                  => array( 'Массо_агӀонаш' ),
-       'Ancientpages'              => array( 'Яззамаш_оцу_терахьца_тяххьара_тадар_дина_долу' ),
+       'Ancientpages'              => array( 'Яззамаш_оцу_терахьца_тӀаьххьара_тадар_дина_долу' ),
        'Badtitle'                  => array( 'Хилийта_йиш_йоцу_цӀе' ),
        'Blankpage'                 => array( 'Еса_агӀо' ),
        'Block'                     => array( 'Блоктоха' ),
-       'Blockme'                   => array( 'Блоктоха_суна' ),
-       'Booksources'               => array( 'Жайнашан_хьосташ' ),
+       'Booksources'               => array( 'Жайнийн_хьосташ' ),
        'BrokenRedirects'           => array( 'ДIахаьдна_долу_дIасахьажораш' ),
        'Categories'                => array( 'Категореш' ),
        'ChangeEmail'               => array( 'Хийца_e-mail' ),
-       'ChangePassword'            => array( 'ХийÑ\86а_иÑ\88аÑ\80' ),
+       'ChangePassword'            => array( 'ХийÑ\86а_паÑ\80олÑ\8c' ),
        'ComparePages'              => array( 'АгӀонаш_юстар' ),
        'Confirmemail'              => array( 'Бакъе_e-mail' ),
        'Contributions'             => array( 'Къинхьегам' ),
-       'CreateAccount'             => array( 'Кхолла_декъашхон_дӀаяздар' ),
+       'CreateAccount'             => array( 'Кхолла_декъашхочун_дӀаяздар' ),
        'Deadendpages'              => array( 'Дика_йоцу_агӀонаш' ),
-       'DeletedContributions'      => array( 'ДӀабяхкина_къинхьегам' ),
-       'Disambiguations'           => array( 'Цхьатера_маьӀна_дерш' ),
-       'DoubleRedirects'           => array( 'ШалгӀа_дӀасахьажийнарш' ),
+       'DeletedContributions'      => array( 'ДӀабаьккхина_къинхьегам' ),
+       'DoubleRedirects'           => array( 'Шалха_дӀасахьажийнарш' ),
        'EditWatchlist'             => array( 'Табе_тергаме_могӀам' ),
        'Emailuser'                 => array( 'Декъашхочунга_кехат' ),
        'Export'                    => array( 'Экспорт' ),
-       'Fewestrevisions'           => array( 'Наггахь_беш_болу_хицамаш' ),
+       'Fewestrevisions'           => array( 'Наггахь_беш_болу_хийцамаш' ),
        'FileDuplicateSearch'       => array( 'Цхьатера_файлаш_лахар' ),
        'Filepath'                  => array( 'Файл_йолче' ),
        'Import'                    => array( 'Импорт' ),
        'Invalidateemail'           => array( 'Адрес_бакъдар_юхадаккха' ),
        'JavaScriptTest'            => array( 'JavaScript_тестировать_ян' ),
        'BlockList'                 => array( 'Блоктоьхнарш' ),
-       'LinkSearch'                => array( 'Ð¥Ñ\8cажоÑ\80игаш_лахар' ),
-       'Listadmins'                => array( 'Куьгалхойн_могӀам' ),
+       'LinkSearch'                => array( 'Ð¥Ñ\8cажоÑ\80агаш_лахар' ),
+       'Listadmins'                => array( 'Ð\9aÑ\83Ñ\8cйгалÑ\85ойн_могÓ\80ам' ),
        'Listbots'                  => array( 'Шаболх_бечара_могӀам' ),
-       'Listfiles'                 => array( 'Файланши_могӀам' ),
-       'Listgrouprights'           => array( 'Декъашхошан_бакъонаш' ),
+       'Listfiles'                 => array( 'Файлаш' ),
+       'Listgrouprights'           => array( 'Декъашхойн_бакъонаш' ),
        'Listredirects'             => array( 'ДIасахьажоран_могIам' ),
        'Listusers'                 => array( 'Декъашхойн_могӀам' ),
        'Lockdb'                    => array( 'Хааман_базан_блоктохар' ),
        'Log'                       => array( 'Тептарш' ),
-       'Lonelypages'               => array( 'Байлахь_йисина_агIонаш' ),
+       'Lonelypages'               => array( 'Байлахь_йисина_агӀонаш' ),
        'Longpages'                 => array( 'Беха_яззамаш' ),
-       'MergeHistory'              => array( 'ЦÑ\85Ñ\8cаÑ\8cнаÑ\82оÑ\8cÑ\85на_каÑ\82егоÑ\80еÑ\88' ),
+       'MergeHistory'              => array( 'Ð\98Ñ\81Ñ\82оÑ\80и_Ñ\86Ñ\85Ñ\8cаÑ\8cнаÑ\82оÑ\85аÑ\80' ),
        'MIMEsearch'                => array( 'MIME_чухула_лахар' ),
        'Mostcategories'            => array( 'Дуккха_категореш_тӀе_тоьхна_йолу_агӀонаш' ),
        'Mostimages'                => array( 'Массарел_дуккха_лелайо_файлаш' ),
-       'Mostinterwikis'            => array( 'Ð\94Ñ\83кÑ\85а_Ñ\8eкÑ\8aаÑ\80вики_Ñ\85Ñ\8cажоÑ\80игаш' ),
-       'Mostlinked'                => array( 'Ð\94Ñ\83ккÑ\85а_Ñ\85Ñ\8cажоÑ\80игаÑ\88\82Iе_Ñ\82оÑ\8cÑ\85на_йолÑ\83_агIонаш' ),
+       'Mostinterwikis'            => array( 'Ð\94Ñ\83кÑ\85а_Ñ\8eкÑ\8aаÑ\80вики_Ñ\85Ñ\8cажоÑ\80агаш' ),
+       'Mostlinked'                => array( 'Ð\94Ñ\83ккÑ\85а_Ñ\85Ñ\8cажоÑ\80агаÑ\88\82Ó\80е_Ñ\82оÑ\8cÑ\85на_йолÑ\83_агÓ\80онаш' ),
        'Mostlinkedcategories'      => array( 'Дуккха_тӀе_хьажораш_йолу_категореш' ),
        'Mostlinkedtemplates'       => array( 'Массарел_дуккха_а_леладо_кепаш' ),
-       'Mostrevisions'             => array( 'Сих_сиха_нисйина_йолу_агIонаш' ),
+       'Mostrevisions'             => array( 'Сих_сиха_нисйина_йолу_агӀонаш' ),
        'Movepage'                  => array( 'АгӀона_цӀе_хийцар' ),
        'Mycontributions'           => array( 'Сан_къинхьегам' ),
        'Mypage'                    => array( 'Сан_агӀо' ),
@@ -130,26 +128,27 @@ $specialPageAliases = array(
        'Myuploads'                 => array( 'Сан_файлаш' ),
        'Newimages'                 => array( 'Керла_файлаш' ),
        'Newpages'                  => array( 'Керла_агӀонаш' ),
-       'PermanentLink'             => array( 'Гуттарлера_хьажориг' ),
-       'Popularpages'              => array( 'ГӀарялла_агӀонаш' ),
+       'PasswordReset'             => array( 'Пароль_кхоссар' ),
+       'PermanentLink'             => array( 'Гуттарлера_хьажораг' ),
+       'Popularpages'              => array( 'ГӀараяьлла_агӀонаш' ),
        'Preferences'               => array( 'ГӀирсаш' ),
-       'Prefixindex'               => array( 'Хьалха_агIонашан_цIераш_хIотто_йеза' ),
-       'Protectedpages'            => array( 'ГIаролла_дина_агIонаш' ),
-       'Protectedtitles'           => array( 'ГIаролла_дина_цIераш' ),
+       'Prefixindex'               => array( 'Хьалха_агӀонийн_цӀераш_хӀотто_еза' ),
+       'Protectedpages'            => array( 'ГӀаролла_дина_агӀонаш' ),
+       'Protectedtitles'           => array( 'ГӀаролла_дина_цӀераш' ),
        'Randompage'                => array( 'Цахууш_нисйелла_агIо' ),
        'Randomredirect'            => array( 'Цахууш_нисделла_дIасахьажор' ),
        'Recentchanges'             => array( 'Керла_нисдарш' ),
        'Recentchangeslinked'       => array( 'Кхуьнца_долу_нисдарш' ),
        'Revisiondelete'            => array( 'ДӀадяхна_нисдарш' ),
        'Search'                    => array( 'Лахар' ),
-       'Shortpages'                => array( 'Ð\91оÑ\86оа_Ñ\8fззамаÑ\88' ),
+       'Shortpages'                => array( 'Боца_яззамаш' ),
        'Specialpages'              => array( 'Леррина_агӀонаш' ),
        'Statistics'                => array( 'Бухехьдерг' ),
        'Tags'                      => array( 'Билгалонаш' ),
-       'Unblock'                   => array( 'БлокдӀаякхар' ),
+       'Unblock'                   => array( 'БлокдӀаяккхар' ),
        'Uncategorizedcategories'   => array( 'Категореш_йоцу_категореш' ),
        'Uncategorizedimages'       => array( 'Категореш_йоцу_файлаш' ),
-       'Uncategorizedpages'        => array( 'Категореш_йоцу_агIонаш' ),
+       'Uncategorizedpages'        => array( 'Категореш_йоцу_агӀонаш' ),
        'Uncategorizedtemplates'    => array( 'Категореш_йоцу_кепаш' ),
        'Undelete'                  => array( 'МеттахӀоттор' ),
        'Unlockdb'                  => array( 'БлокдӀаякхар_ХБ' ),
@@ -158,17 +157,17 @@ $specialPageAliases = array(
        'Unusedtemplates'           => array( 'Лелош_доцу_кепаш' ),
        'Upload'                    => array( 'Файл_чуяккхар' ),
        'UploadStash'               => array( 'ДӀахьулйина_файл_чуяккхар' ),
-       'Userlogin'                 => array( 'ЧÑ\83валаÑ\80\8fлар' ),
-       'Userlogout'                => array( 'Ð\90Ñ\80авалаÑ\80\8fлар' ),
+       'Userlogin'                 => array( 'ЧÑ\83далар' ),
+       'Userlogout'                => array( 'Ð\90Ñ\80адалар' ),
        'Userrights'                => array( 'Бакъона_урхалладар' ),
        'Version'                   => array( 'Верси' ),
        'Wantedcategories'          => array( 'Оьшуш_йолу_категореш' ),
        'Wantedfiles'               => array( 'Оьшуш_йолу_файлаш' ),
-       'Wantedpages'               => array( 'Оьшуш_йолу_агIонаш' ),
+       'Wantedpages'               => array( 'Оьшуш_йолу_агӀонаш' ),
        'Wantedtemplates'           => array( 'Оьшуш_йолу_кепаш' ),
        'Watchlist'                 => array( 'Тергаме_могӀам' ),
        'Whatlinkshere'             => array( 'Хьажоригаш_кхузе' ),
-       'Withoutinterwiki'          => array( 'Ð\9aÑ\85еÑ\87Ñ\83_меÑ\82Ñ\82анаÑ\88ан_Ñ\85Ñ\8cажоÑ\80иг_йоÑ\86Ñ\83_агIонаш' ),
+       'Withoutinterwiki'          => array( 'ЮкÑ\8aаÑ\80вики_Ñ\85Ñ\8cажоÑ\80агаÑ\88_йоÑ\86Ñ\83_агÓ\80онаш' ),
 );
 
 $magicWords = array(
@@ -325,17 +324,17 @@ $messages = array(
 'tog-hidepatrolled' => 'Къайладаха гlаролладина нисдарш оц могlама керла нисдашкахь',
 'tog-newpageshidepatrolled' => 'Къайлайаха гlароллайина агlонаш оц могlама керла агlонашкахь',
 'tog-extendwatchlist' => 'Шорбина тlехьажарна могlам, ша беригге а хийцамаш чубогlуш, тlяхьабина боцурш а',
-'tog-usenewrc' => 'Лелабе дика могlам керла чу хийцамашна (оьшу JavaScript)',
+'tog-usenewrc' => 'Лелабе дика могӀам керла чу хийцамашна (оьшу JavaScript)',
 'tog-numberheadings' => 'Ша шех хlитто терахь корташна',
-'tog-showtoolbar' => 'Гайта лакхара гlирсан дакъа нисйеш аттон оц тадар чохь (JavaScript)',
-'tog-editondblclick' => 'Нисйе агlонаш шозза тlетаlийча (JavaScript)',
+'tog-showtoolbar' => 'Гайта лакхара гӀирсан дакъа нисйеш аттон оц тадар чохь (JavaScript)',
+'tog-editondblclick' => 'Нисйе агӀонаш шозза тӀетаӀийча (JavaScript)',
 'tog-editsection' => 'Гайта хьажораг «нисйе» аьлла хӀора агӀона',
-'tog-editsectiononrightclick' => 'Нисде дакъа шозза бакъехьар дахка тlетаlийча оцу кортан (JavaScript)',
+'tog-editsectiononrightclick' => 'Нисде дакъа шозза бакъехьар дахка тӀетаӀийча оцу кортан (JavaScript)',
 'tog-showtoc' => 'Гойти коьртнаш (оцу агlонашна лаххара 3 коьртнашца)',
 'tog-rememberpassword' => 'Даглаца сан дӀаяздар хӀокху браузеран тӀяхь (цхьан $1 {{PLURAL:$1|де|ден|динахь}})',
-'tog-watchcreations' => 'Тlетоха ас кхоллина агlонаш тергаме могlам чу',
-'tog-watchdefault' => 'Тlетоха ас нисйина агlонаш тергаме могlам чу',
-'tog-watchmoves' => 'Тlетоха ас цlераш хийцина агlонаш тергаме могlам чу',
+'tog-watchcreations' => 'ТӀетоха ас кхоьллина агӀонаш тергаме могӀам чу',
+'tog-watchdefault' => 'ТӀетоха ас нисйина агӀонаш тергаме могӀам чу',
+'tog-watchmoves' => 'ТӀетоха ас цӀераш хийцина агӀонаш тергаме могӀам чу',
 'tog-watchdeletion' => 'Тlетоха ас дӀаяхина агlонаш тергаме могlам чу',
 'tog-minordefault' => 'Къастам бе нисйиначарн хlумцадеш кегийра долушсанна',
 'tog-previewontop' => 'Чуяккха хьалххьажар рéдоккхучу кора хьалха',
@@ -343,10 +342,10 @@ $messages = array(
 'tog-nocache' => 'Ма латае гойтучун къайлаха латториг',
 'tog-enotifwatchlistpages' => 'Хаам бо зlе чухул, тергаме могlаман хийцамах лаьцна',
 'tog-enotifusertalkpages' => 'Хаам бо зlе чухул, долахь йолу дийцаре агlон хийцамах лаьцна',
-'tog-enotifminoredits' => 'Хаам бо зlе чухул, цхьа жимма а хийцамаш биняхь',
+'tog-enotifminoredits' => 'Хаам бо зӀе чухул, цхьа жимма а хийцамаш биняхь',
 'tog-enotifrevealaddr' => 'Гайта сан зlе оцу хаамаш барехь',
 'tog-shownumberswatching' => 'Гайта декъашхойн терахь, агlо латийна болу шай тергаме могlам юкъа',
-'tog-oldsig' => 'Ð¥Ñ\8cалÑ\85Ñ\85Ñ\8cажаÑ\80 Ð´Ð¾Ð»Ñ\83Ñ\87Ñ\83 ÐºÑ\83Ñ\8cгÑ\82аlорна:',
+'tog-oldsig' => 'Ð\9aаÑ\80аÑ\80а ÐºÑ\83Ñ\8cгÑ\82аÓ\80орна:',
 'tog-fancysig' => 'Шен вики-къастаман куьгтаӀдар (ша шех хьажораг йоцуш)',
 'tog-uselivepreview' => 'Лелайа чехка хьалха хьажа (JavaScript, муха ю хьажарна)',
 'tog-forceeditsummary' => 'Дага даийта, нагахь нисйарх лаьцна чохь язйина яцахь',
@@ -550,7 +549,7 @@ $messages = array(
 'redirectedfrom' => '(ДӀасахьажийна кху $1)',
 'redirectpagesub' => 'АгӀо-дӀасахьажайар',
 'lastmodifiedat' => 'ХӀокху агӀон тӀаьххьаралера хийцам: $2, $1.',
-'viewcount' => 'ХӀокху агӀонга хьойсина $1 {{PLURAL:$1|за|за|за}}.',
+'viewcount' => 'ХӀокху агӀонга хьойсина $1 {{PLURAL:$1|за}}.',
 'protectedpage' => 'ГӀароллийца йолу агӀо',
 'jumpto' => 'Дехьа гӀо:',
 'jumptonavigation' => 'Навигаци',
@@ -615,7 +614,7 @@ $1',
 'collapsible-expand' => 'хьайаста',
 'thisisdeleted' => 'Хьажа йа меттахlоттайé $1?',
 'viewdeleted' => 'Хьалххьожи $1?',
-'restorelink' => '{{PLURAL:$1|$1 дӀадяккхина нийсдар|$1 дӀадяхна нийсдарш|$1 дӀадяхна нийсдарш}}',
+'restorelink' => '{{PLURAL:$1|$1 дӀадаьккхина нийсдар|$1 дӀадяхна нийсдарш}}',
 'feedlinks' => 'Оцу хатlаьхь:',
 'feed-invalid' => 'Тайпан нийсадоцу талол оцу куьгтаlорна.',
 'feed-unavailable' => 'Хаитарца йолу асанаш тlекхочучехь яц',
@@ -651,6 +650,9 @@ $1',
 # General errors
 'error' => 'Гlалат',
 'databaseerror' => 'Гlалат хаамийн бухера',
+'databaseerror-query' => 'Дехар: $1',
+'databaseerror-function' => 'Функци: $1',
+'databaseerror-error' => 'ГӀалат: $1',
 'laggedslavemode' => 'Тергам бе: агӀона чохь керла йаьхинарш ца хила мега.',
 'readonly' => 'Блоктоьхна дӀайаздар хаамийн бухе',
 'enterlockreason' => 'Билгал де блоктохаран бахьна а и чекх йолу хан а.',
@@ -702,6 +704,8 @@ $1',
 'customjsprotected' => 'Хьан бакъо яц хӀара JavaScript-агӀо тая, иза кхечу декъашхочун гӀерс болу дера.',
 'mycustomcssprotected' => 'Хьан бакъо яц хӀара CSS агӀо тая.',
 'mycustomjsprotected' => 'Хьан бакъо яц JavaScript агӀо тая.',
+'myprivateinfoprotected' => 'Хьайн долара хаамна хийцам ба хьа йиш яц',
+'mypreferencesprotected' => 'Хьай гӀирс нисбан хьа бакъо яц.',
 'exception-nologin' => 'Ахьа хӀой вовзийтина/йовзийтина вац/яц',
 
 # Virus scanner
@@ -709,13 +713,14 @@ $1',
 'virus-unknownscanner' => 'йозуш йоцу антивирус:',
 
 # Login and logout pages
-'logouttext' => "'''Ð¥Ñ\8cо Ð°Ñ\80авела/ела.'''
-Хьан йиш ю {{grammar:genitive|{{SITENAME}}}} чохь хьой ца вовзийташ/йовзийташ болх бан я <span class='plainlinks'>[$1 кхин чувала/яла ]</span> хьой чохь хила цӀарца я кхин цӀарца.
-Цхьа йолу агӀонаш чохь хьо хьай цӀарца болх беш сана хила тарло ишта ца хилийта керлаякха браузеран кэш.",
+'logouttext' => "'''Ð\90Ñ\85Ñ\8cа Ð±Ð¾Ð»Ñ\85 Ð´Ó\80абеÑ\80зийна.'''
+
+Цхьайолу агӀонаш чохь хьо хьай цӀарца болх беш сана хила тарло ишта ца хилийта керлаякха браузеран кэш.",
 'welcomeuser' => 'Марша ДогӀийла, $1!',
 'yourname' => 'Декъашхочун цӀе:',
 'userlogin-yourname' => 'Декъашхочун цӀе',
 'userlogin-yourname-ph' => 'Язъе декъашхочун цӀе',
+'createacct-another-username-ph' => 'Язъе декъашхочун цӀе',
 'yourpassword' => 'Пароль:',
 'userlogin-yourpassword' => 'Пароль',
 'userlogin-yourpassword-ph' => 'Язъе хьай пароль',
@@ -751,17 +756,20 @@ $1',
 Лахара форманца кхин цӀарца чугӀо.',
 'userlogin-createanother' => 'Кхолла декъашхочун кхин дӀаяздар',
 'createacct-join' => 'ДӀаязбе лахахь хай хаам.',
+'createacct-another-join' => 'Язбе лахахь керлачу декъашхочун дӀаяздаран хаам.',
 'createacct-emailrequired' => 'Электронни почтан адрес',
 'createacct-emailoptional' => 'Электронни почтан адрес (ца яздича мега)',
 'createacct-email-ph' => 'ДӀаязде электронни почтан адрес',
+'createacct-another-email-ph' => 'ДӀаязде электронни почтан адрес',
 'createaccountmail' => 'хааман зӀене хула',
 'createacct-realname' => 'Хьан цӀе (ца язйича мега)',
 'createaccountreason' => 'Бахьан:',
 'createacct-reason' => 'Бахьна',
-'createacct-reason-ph' => '{{PLURAL:$1|агӀо|агӀонаш}}‎',
+'createacct-reason-ph' => 'Стен кхуллуш ду ахьа керла декъашхочун дӀаяздар',
 'createacct-captcha' => 'Кхерамзалла хьажар',
 'createacct-imgcaptcha-ph' => 'ДӀаязде хьайна лакхахь гуш долу йоза',
 'createacct-submit' => 'Кхолла декъашхочун дӀаяздар',
+'createacct-another-submit' => 'Кхолла декъашхочун кхин дӀаяздар',
 'createacct-benefit-heading' => '{{SITENAME}} кхолийна хьо санначу наха.',
 'createacct-benefit-body1' => '{{PLURAL:$1|нисдар|нисдарш}}',
 'createacct-benefit-body2' => '{{PLURAL:$1|яззам|яззамаш}}',
@@ -790,6 +798,8 @@ $1',
 'noemailcreate' => 'Ахьа нийса электронни почтан адрес дӀаяздан деза',
 'passwordsent' => 'Керла пароль декъашхочун $1 электронни адрес тӀе дӀахьажина. Дехар до, керла пароль еъча юху системин чугӀо.',
 'blocked-mailpassword' => 'Хьан IP-адрес ца тадарш дан магийна дац, цуьндела пароль меттахӀотош йолу функци блоктоьхна ю.',
+'throttled-mailpassword' => 'Пароль дага йоуьйту функци {{PLURAL:$1|тӀехьара $1 сахьтехь}} лелина.
+Зулам цахилийта $1 {{PLURAL:$1|сахьтан чохь}} цӀа бен функци лело йиш яц.',
 'mailerror' => 'Кехат дохьуьйтуш гӀалат ду: $1',
 'emailauthenticated' => 'Хьан почтан адрес бакъдина $2 $3.',
 'accountcreated' => 'Декъашхочун дӀаяздар кхоьллина',
@@ -1275,7 +1285,7 @@ $1',
 'right-nominornewtalk' => 'агӀонашкахь къезиг нисдарш цахиларо хуьлуьйту керла хаамийн хӀоттам',
 'right-apihighlimits' => 'API-дехарш кхочушдан кӀезиг дихкар',
 'right-writeapi' => 'дӀаяздеш лелойо API',
-'right-delete' => 'агӀош дӀаяхар',
+'right-delete' => 'агӀонаш дӀаяхар',
 'right-bigdelete' => 'еха хийцаман истори йолу агӀонаш дӀаяхар',
 'right-deletelogentry' => 'тептар чура билгала дӀаяздарш дӀадахар а меттахӀиттадар а.',
 'right-deleterevision' => 'агӀонийн билгала версеш дӀаяхар а меттахӀиттаяр а',
@@ -1401,6 +1411,10 @@ $1',
 'ignorewarnings' => 'ДӀахедар тергал ца дан',
 'badfilename' => 'Файлан цӀе оцу $1.',
 'emptyfile' => 'Ахьа чуйоккхуш йолу файл еса хийла там бу. Иза гӀалат хийла мега файлан цӀе нийса язйина йоцу дела. Дехар до хьажа бакъалла и юьй ахьа чуйоккхуш йолу файл.',
+'fileexists' => 'Иштта цӀе йолу файл йолуш ю. Дехар до, хьажа <strong>[[:$1]]</strong>, лаьий хьуна и хийца. 
+[[$1|thumb]]',
+'fileexists-forbidden' => 'Иштта цӀе йолу файл йолуш ю цундела тӀехула дӀаязян йиш яц.
+ТӀаккха а хьара файл чуяккха лууш делахь, дехар до, юха а гӀой файлан цӀе хийца а яй чуяккха файл. [[File:$1|thumb|center|$1]]',
 'file-deleted-duplicate' => 'Иштта файл ([[:$1]]) хӀинцале дӀаяьккхина хилла. Дехар до, юху файл чуяккхале файл дӀаяккхаран историга хьажа.',
 'uploadwarning' => 'Дlахьедар',
 'uploadedimage' => 'чуяккхина «[[$1]]»',
@@ -1412,6 +1426,7 @@ $1',
 'upload-description' => 'Файлах лаьцна',
 'upload-options' => 'Чуякхаран параметраш',
 'watchthisupload' => 'Латайе хӀара файл тергаме могӀам юкъахь',
+'filewasdeleted' => 'Иштта цӀе йолуш файл хьалха чуяьккхина хила, амма дӀаяьккхина. Дехар до, юху чуяккхале $1 хьажа.',
 'filename-prefix-blacklist' => '#<!-- битийша хlара могlа ша мабарра --> <pre>
 # Бухасиз шолгlа:
 #  * Массо, саболчунтlийра йуьлалуш ерш «#» хуьлу хетаме дерг (могlа чекх балац)
@@ -1440,7 +1455,7 @@ PICT # тайп тайпан
 Декъашхо къастичи, цун керла файлаш гойту.',
 'listfiles_search_for' => 'Лаха хIуман цIарца:',
 'imgfile' => 'файл',
-'listfiles' => 'Файлийн Ð¼Ð¾Ð³Ó\80ам',
+'listfiles' => 'ФайлаÑ\88',
 'listfiles_date' => 'Терахь',
 'listfiles_name' => 'Файлан цӀе',
 'listfiles_user' => 'Декъашхо',
@@ -1481,6 +1496,7 @@ PICT # тайп тайпан
 'filerevert-success' => "Юхаерзина файл '''[[Media:$1|$1]]''' оцу [$4 верси $3, $2].",
 
 # File deletion
+'filedelete' => '$1 — дӀаяккхар',
 'filedelete-legend' => 'ДӀаяккха файл',
 'filedelete-intro' => "Хьо файл '''[[Media:$1|$1]]''' дӀаяккха гӀерта цунна массо истори цхьан.",
 'filedelete-comment' => 'Бахьан:',
@@ -1688,6 +1704,8 @@ PICT # тайп тайпан
 'emailuser' => 'Декъашхочун хааман кехат',
 'emailuser-title-target' => 'Декъашхочунга кехат яздар',
 'emailuser-title-notarget' => 'Декъашхочунга кехат яздар',
+'emailpagetext' => 'ХӀокху агӀона гӀоьнца йиш ю {{GENDER:$1|декъашхочун}} электронан почте хаам бахьийта.
+Хьоьга жоп лур ду ахьа [[Special:Preferences|хьайн гӀирса чу]] дӀаяздина долу адрес тӀе.',
 'defemailsubject' => 'Хаам {{grammar:genitive|{{SITENAME}}}} чура бу',
 'emailusername' => 'Декъашхочун цӀе:',
 'emailusernamesubmit' => 'ДӀадахьийта',
@@ -1695,6 +1713,8 @@ PICT # тайп тайпан
 'emailfrom' => 'Хьаьнгара',
 'emailto' => 'Хьаьнга:',
 'emailmessage' => 'Хаам:',
+'emailsend' => 'ДӀадахьийта',
+'emailccme' => 'Соьга а кхосса хааман копи.',
 'emailsent' => 'Кехат дӏадахьийтина',
 'emailsenttext' => 'Хьан электроннан хаам дӏабахьийтина.',
 
@@ -1765,7 +1785,7 @@ PICT # тайп тайпан
 'protectedarticle' => 'гlаролла дина агlо «[[$1]]»',
 'modifiedarticleprotection' => 'агlонан гlаролли локхалла хийцина «[[$1]]»',
 'unprotectedarticle' => 'ГӀоролла дӀадаьстина «[[$1]]»',
-'movedarticleprotection' => '«[[$2]]» Ð³Ó\80аÑ\80олла Ñ\81еÑ\85Ñ\8cадаккÑ\85а Â«[[$1]]»',
+'movedarticleprotection' => '«[[$2]]» Ð°Ð³Ó\80она Ñ\82Ó\80еÑ\80а Ð³Ó\80аÑ\80олла Â«[[$1]]» Ð°Ð³Ó\80она Ñ\82Ó\80е Ð´Ð°Ñ\8cккÑ\85ина',
 'protect-title' => 'Оцунна «$1» гӀоралла дар',
 'prot_1movedto2' => '«[[$1]]» цlе хийцина оцу «[[$2]]»',
 'protect-legend' => 'Бакъде гӀоралла дар',
@@ -2064,7 +2084,7 @@ PICT # тайп тайпан
 'allmessagesdefault' => 'Шаьшха йоза',
 'allmessagescurrent' => 'Карарчу хенан йоза',
 'allmessagestext' => 'ХӀара «MediaWiki» цӀерийн меттигера системан хаамийн могӀа бу.
-Хьайна MediaWiki тая лууш делахь, дехар до, проект [//translatewiki.net translatewiki.net] [//www.mediawiki.org/wiki/Localisation юьйцучу хьажа].',
+Хьайна MediaWiki тая лууш делахь, дехар до, проект [//translatewiki.net translatewiki.net] [https://www.mediawiki.org/wiki/Localisation юьйцучу хьажа].',
 'allmessages-filter-legend' => 'Литтар',
 'allmessages-filter' => 'Литтар оцу хьола хийцамца:',
 'allmessages-filter-unmodified' => 'Хийцан йоцурш',
@@ -2216,6 +2236,7 @@ PICT # тайп тайпан
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
 'seconds-abbrev' => '$1оцу',
+'hours' => '{{PLURAL:$1|1 сахьат}}',
 'days' => '{{PLURAL:$1|$1 де}}',
 'ago' => '$1 хьалха',
 
@@ -2320,7 +2341,7 @@ PICT # тайп тайпан
 
 # External editor support
 'edit-externally' => 'Рéдаккха хlокху хlуман, арахьара диллагlарам лелош',
-'edit-externally-help' => '(мадарра хьажа. оцу [//www.mediawiki.org/wiki/Manual:External_editors куьйгалийца дlахlотторе])',
+'edit-externally-help' => '(мадарра хьажа. оцу [https://www.mediawiki.org/wiki/Manual:External_editors куьйгалийца дlахlотторе])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'массо',
@@ -2413,8 +2434,7 @@ PICT # тайп тайпан
 
 # Special:SpecialPages
 'specialpages' => 'Леррина агlонаш',
-'specialpages-note' => '----
-* Гуттарлера белха агlонаш.
+'specialpages-note' => '* Гуттарлера белха агlонаш.
 * <strong class="mw-specialpagerestricted">Кlеззиг таронаш йолу леррина агlонаш.</strong>',
 'specialpages-group-maintenance' => 'Жамlаш гlирса хьашташ кхочушдар',
 'specialpages-group-other' => 'Кхин гlуллакхан агlонаш',
@@ -2490,6 +2510,7 @@ PICT # тайп тайпан
 'searchsuggest-search' => 'Лаха',
 
 # Durations
+'duration-hours' => '$1 {{PLURAL:$1|сахьат}}',
 'duration-days' => '$1 {{PLURAL:$1|де}}',
 
 # Limit report
index 7bb494f..1ca9645 100644 (file)
@@ -725,7 +725,6 @@ Hinumdomi nga ang ilang indeks sa sulod sa {{SITENAME}} mahimong dugay-dugay na.
 'mypreferences' => 'Akong preperensiya',
 'prefs-edits' => 'Gidaghanon sa nausab:',
 'prefsnologin' => 'Wala maka-log-in',
-'prefsnologintext' => 'Kinahanglan ikaw <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} naka-log-in]</span> aron ma-set ang imong mga preperensiya.',
 'changepassword' => 'Usba ang pasword',
 'prefs-skin' => 'Panit',
 'skin-preview' => 'Paunang tan-aw',
@@ -1203,7 +1202,7 @@ Ang uban default nga nakatago.
 
 # External editor support
 'edit-externally' => 'Usba kining payl gamit ang eksternal nga aplikasyon',
-'edit-externally-help' => '(Tan-awa ang [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] para sa dugang nga impormasyon)',
+'edit-externally-help' => '(Tan-awa ang [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] para sa dugang nga impormasyon)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tanan',
index 53e4306..0c53642 100644 (file)
@@ -12,6 +12,7 @@
  * @author Jatrobat
  * @author Magalahi
  * @author MisterWiki
+ * @author Shirayuki
  */
 
 $namespaceNames = array(
@@ -659,7 +660,6 @@ Fanapunta na fana'an ti gus nuebu i listan-ñiha i guinahan {{SITENAME}}.",
 'mypreferences' => "I ga'ña-hu",
 'prefs-edits' => 'Numirun tinilaika:',
 'prefsnologin' => "Ti ma'log in",
-'prefsnologintext' => "Un nesisita [[Special:UserLogin|muna'log in]] para un tulaika i ga'ña-mu muna'sesetbi.",
 'changepassword' => 'Tulaika password',
 'prefs-skin' => 'Låssas',
 'skin-preview' => "Na'annok",
@@ -1086,7 +1086,7 @@ Ti mantattiyi i areklo ni sigienten ina'chetton siha gi mismo liña, i.e. i påh
 
 # External editor support
 'edit-externally' => 'Tulaika i atkibu yan un aplikasion sanhiyong',
-'edit-externally-help' => 'Hånao para [//www.mediawiki.org/wiki/Manual:External_editors i plantan chinachalani] para mas infotmasion.',
+'edit-externally-help' => 'Hånao para [https://www.mediawiki.org/wiki/Manual:External_editors i plantan chinachalani] para mas infotmasion.',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'todu',
index d083eb5..33e5887 100644 (file)
@@ -1217,7 +1217,6 @@ $1",
 'mypreferences' => 'ھەڵبژاردەکان',
 'prefs-edits' => 'ژمارەی گۆڕانکارییەکان:',
 'prefsnologin' => 'لەژوورەوە نیت',
-'prefsnologintext' => 'بۆ دانانی هەڵبژاردەکانی بەکارهێنەر دەبێ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} بچیتە ژوورەوە]</span>.',
 'changepassword' => 'تێپەڕوشە بگۆڕە',
 'prefs-skin' => 'پێستە',
 'skin-preview' => 'پێش بینین',
@@ -2321,7 +2320,7 @@ $1',
 
 'sp-contributions-newbies' => 'تەنھا بەشدارییەکانی بەکارھێنەرە تازەکان نیشان بدە',
 'sp-contributions-newbies-sub' => 'لە بەکارھێنەرە تازەکانەوە',
-'sp-contributions-newbies-title' => 'هاوبەشیەکانی بەکارهێنەر بۆ هەژمارە نوێکان',
+'sp-contributions-newbies-title' => 'بەشدارییەکانی بەکارھێنەر بۆ ھەژمارە نوێکان',
 'sp-contributions-blocklog' => 'لۆگی بەربەستن',
 'sp-contributions-deleted' => 'بەشدارییە سڕاوەکان',
 'sp-contributions-uploads' => 'بارکردنەکان',
@@ -2607,7 +2606,7 @@ $1',
 'allmessagesdefault' => 'دەقی بنەڕەتی',
 'allmessagescurrent' => 'دەقی ھەنووکە',
 'allmessagestext' => 'ئەمە لیستێکە لە پەیامەکانی بەردەست لە بۆشایی‌ناوی میدیاویکی.
-تکایە سەردانی [//www.mediawiki.org/wiki/Localisation ناوچەیی‌کردنی میدیاویکی] و [//translatewiki.net translatewiki.net] بکە ئەگەر دەتەوێ لە ناوچەیی‌کردنی میدیاویکی بە گشتی بەشداری بکەیت.',
+تکایە سەردانی [https://www.mediawiki.org/wiki/Localisation ناوچەیی‌کردنی میدیاویکی] و [//translatewiki.net translatewiki.net] بکە ئەگەر دەتەوێ لە ناوچەیی‌کردنی میدیاویکی بە گشتی بەشداری بکەیت.',
 'allmessagesnotsupportedDB' => "ئەم لاپەڕە ناتوانی بەکاربێت لەبەر ئەوەی '''\$wgUseDatabaseMessages''' لەکار خستراوە.",
 'allmessages-filter-legend' => 'پاڵێو',
 'allmessages-filter-unmodified' => 'نەگۆڕدراو',
@@ -3175,7 +3174,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'دەستکاریی ئەم پەڕەیە بکە بە بەکارھێنانی پڕۆگرامێکی دەرەکی',
-'edit-externally-help' => '(بۆ زانیاریی زیاتر سەیری [//www.mediawiki.org/wiki/Manual:External_editors  ڕێنماییەکانی دامەزراندن] بکە)',
+'edit-externally-help' => '(بۆ زانیاریی زیاتر سەیری [https://www.mediawiki.org/wiki/Manual:External_editors  ڕێنماییەکانی دامەزراندن] بکە)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ھەموو',
@@ -3408,8 +3407,7 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'پەڕە تایبەتەکان',
-'specialpages-note' => '----
-* پەڕە تایبەتە ئاسایییەکان.
+'specialpages-note' => '* پەڕە تایبەتە ئاسایییەکان.
 * <span class="mw-specialpagerestricted">پەڕە تایبەتە بەرگری‌لێکراوەکان.</span>',
 'specialpages-group-maintenance' => 'ڕاپۆرتەکانی چاکسازی',
 'specialpages-group-other' => 'پەڕە تایبەتەکانی دیکە',
index 17de57f..b86f919 100644 (file)
@@ -953,7 +953,7 @@ Ang iban ay pagataguon sang default.
 
 # External editor support
 'edit-externally' => 'Islan ang mini nga file gamit ang panluwas nga aplikasyon',
-'edit-externally-help' => '(Tan-awa ang [//www.mediawiki.org/wiki/Manual:External_editors mga pama-agi sa paghanda kag pag-ayos] para sa mga dugang nga impormasyon)',
+'edit-externally-help' => '(Tan-awa ang [https://www.mediawiki.org/wiki/Manual:External_editors mga pama-agi sa paghanda kag pag-ayos] para sa mga dugang nga impormasyon)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tanan',
index c07de24..8d040c7 100644 (file)
@@ -880,7 +880,6 @@ $3 мына бу себепни бильдирди: ''$2''",
 'mypreferences' => 'Сазламалар',
 'prefs-edits' => 'Денъиштирмелер сайысы:',
 'prefsnologin' => 'Отурым ачмадынъыз',
-'prefsnologintext' => 'Шахсий сазламаларынъызны денъиштирмек ичюн <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} отурым ачмакъ]</span> керексинъиз.',
 'changepassword' => 'Пароль денъиштир',
 'prefs-skin' => 'Ресимлеме',
 'skin-preview' => 'Бакъып чыкъув',
@@ -1680,7 +1679,7 @@ $UNWATCHURL
 'allmessagesdefault' => 'Оригиналь метин',
 'allmessagescurrent' => 'Шимди къулланылгъан метин',
 'allmessagestext' => 'Ишбу джедвель MediaWiki-де мевджут олгъан бутюн система беянатларынынъ джедвелидир.
-MediaWiki интерфейсининъ чешит тиллерге терджиме этювде иштирак этмеге истесенъиз [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] ве [//translatewiki.net translatewiki.net] саифелерине зиярет этинъиз.',
+MediaWiki интерфейсининъ чешит тиллерге терджиме этювде иштирак этмеге истесенъиз [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] ве [//translatewiki.net translatewiki.net] саифелерине зиярет этинъиз.',
 
 # Thumbnails
 'thumbnail-more' => 'Буют',
@@ -1917,7 +1916,7 @@ MediaWiki интерфейсининъ чешит тиллерге терджи
 
 # External editor support
 'edit-externally' => 'Файл узеринде компьютеринъизде булунгъан программалар иле денъишикликлер япынъыз',
-'edit-externally-help' => '(Даа зияде малюмат ичюн [//www.mediawiki.org/wiki/Manual:External_editors бу саифеге] (Инглиздже) бакъып оласынъыз.)',
+'edit-externally-help' => '(Даа зияде малюмат ичюн [https://www.mediawiki.org/wiki/Manual:External_editors бу саифеге] (Инглиздже) бакъып оласынъыз.)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'эписини',
index 6bb6a4c..70138a1 100644 (file)
@@ -876,7 +876,6 @@ Vikide bu saifege oşağan saifelerni [[Special:Search|tapıp baqıñız]].',
 'mypreferences' => 'Sazlamalar',
 'prefs-edits' => 'Deñiştirmeler sayısı:',
 'prefsnologin' => 'Oturım açmadıñız',
-'prefsnologintext' => 'Şahsiy sazlamalarıñıznı deñiştirmek içün <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} oturım açmaq]</span> kereksiñiz.',
 'changepassword' => 'Parol deñiştir',
 'prefs-skin' => 'Resimleme',
 'skin-preview' => 'Baqıp çıquv',
@@ -1674,7 +1673,7 @@ Jurnalnıñ soñki yazısı aşağıda berilgen:",
 'allmessagesdefault' => 'Original metin',
 'allmessagescurrent' => 'Şimdi qullanılğan metin',
 'allmessagestext' => 'İşbu cedvel MediaWikide mevcut olğan bütün sistema beyanatlarınıñ cedvelidir.
-MediaWiki interfeysiniñ çeşit tillerge tercime etüvde iştirak etmege isteseñiz [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] ve [//translatewiki.net translatewiki.net] saifelerine ziyaret etiñiz.',
+MediaWiki interfeysiniñ çeşit tillerge tercime etüvde iştirak etmege isteseñiz [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] ve [//translatewiki.net translatewiki.net] saifelerine ziyaret etiñiz.',
 
 # Thumbnails
 'thumbnail-more' => 'Büyüt',
@@ -1911,7 +1910,7 @@ Er satır * işaretinen başlamalı. Satırnıñ birinci bağlantısı qоşmağ
 
 # External editor support
 'edit-externally' => 'Fayl üzerinde kompyuteriñizde bulunğan programmalar ile deñişiklikler yapıñız',
-'edit-externally-help' => '(Daa ziyade malümat içün [//www.mediawiki.org/wiki/Manual:External_editors bu saifege] (İnglizce)  baqıp olasıñız.)',
+'edit-externally-help' => '(Daa ziyade malümat içün [https://www.mediawiki.org/wiki/Manual:External_editors bu saifege] (İnglizce)  baqıp olasıñız.)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'episini',
index a5cedec..e24ce65 100644 (file)
@@ -769,7 +769,8 @@ Správce serveru, který úložiště zamkl, poskytl toto zdůvodnění: „''$3
 'invalidtitle-knownnamespace' => 'Neplatný název se jmenným prostorem „$2“ a textem „$3“',
 'invalidtitle-unknownnamespace' => 'Neplatný název s neznámým číslem jmenného prostoru $1 a textem „$2“',
 'exception-nologin' => 'Nejste přihlášen(a)',
-'exception-nologin-text' => 'Tato stránka nebo akce vyžaduje, abyste byli na této wiki přihlášeni.',
+'exception-nologin-text' => 'Pro přístup na tuto stránku nebo k této akci se prosím [[Special:Userlogin|přihlaste]].',
+'exception-nologin-text-manual' => 'Pro přístup na tuto stránku nebo k této akci se musíte $1.',
 
 # Virus scanner
 'virus-badscanner' => "Špatná konfigurace: neznámý antivirový program: ''$1''",
@@ -1325,8 +1326,8 @@ pokud nebyla nastavena další omezení.",
 'revdelete-hide-user' => 'Uživatelské jméno / IP adresa',
 'revdelete-hide-restricted' => 'Utajit data i před správci',
 'revdelete-radio-same' => '(neměnit)',
-'revdelete-radio-set' => 'Viditelný',
-'revdelete-radio-unset' => 'Skrytý',
+'revdelete-radio-set' => 'Skrytý',
+'revdelete-radio-unset' => 'Viditelný',
 'revdelete-suppress' => 'Utajit data i před správci',
 'revdelete-unsuppress' => 'Odstranit omezení na vrácené verze',
 'revdelete-log' => 'Důvod:',
@@ -1482,7 +1483,7 @@ Pokud na začátek dotazu přidáte ''all:'', bude se hledat všude (včetně di
 'mypreferences' => 'Nastavení',
 'prefs-edits' => 'Počet editací:',
 'prefsnologin' => 'Nejste přihlášen(a)!',
-'prefsnologintext' => 'Pokud chcete měnit uživatelská nastavení, musíte se <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} přihlásit]</span>.',
+'prefsnologintext2' => 'Pro změnu uživatelských nastavení se musíte $1.',
 'changepassword' => 'Změna hesla',
 'prefs-skin' => 'Vzhled',
 'skin-preview' => 'Náhled',
@@ -1521,7 +1522,7 @@ Pokud na začátek dotazu přidáte ''all:'', bude se hledat všude (včetně di
 'prefs-help-recentchangescount' => 'Týká se posledních změn, historie stránek a protokolovacích záznamů.',
 'prefs-help-watchlist-token2' => 'Toto je tajný klíč k webovému kanálu vašich sledovaných stránek. Kdokoli, kdo bude tento klíč znát, bude moci váš seznam sledovaných stránek číst, takže ho nešiřte.
 [[Special:ResetTokens|Kliknutím sem ho můžete reinicializovat.]]',
-'savedprefs' => 'Vaše nastavení bylo uloženo.',
+'savedprefs' => 'Nastavení byla uložena.',
 'timezonelegend' => 'Časové pásmo:',
 'localtime' => 'Místní čas:',
 'timezoneuseserverdefault' => 'Použít časové pásmo wiki ($1)',
@@ -2503,9 +2504,9 @@ Uživatele, který změnu provedl, můžete kontaktovat:
 e-mailem: $PAGEEDITOR_EMAIL
 na wiki: $PAGEEDITOR_WIKI
 
-Dokud stránku nenavštívíte, nebudou vám zasílána další oznámení o změnách této stránky. Případně si můžete vynulovat příznaky ve svém seznamu sledovaných stránek.
+Do doby, než stránku navštívíte jako přihlášený uživatel, vám další oznámení k této stránce nebudou zasílána. Případně si můžete vynulovat příznaky ve svém seznamu sledovaných stránek.
 
-       S pozdravem váš zasílač hlášení {{grammar:2sg|{{SITENAME}}}}
+S pozdravem váš zasílač hlášení {{grammar:2sg|{{SITENAME}}}}
 
 --
 Změnit nastavení e-mailových oznámení můžete na
@@ -3005,7 +3006,7 @@ V druhém případě můžete také používat přímý odkaz, např. pomocí [[
 'allmessagesdefault' => 'Původní text',
 'allmessagescurrent' => 'Aktuální text',
 'allmessagestext' => 'Toto je seznam všech hlášení dostupných ve jmenném prostoru MediaWiki.
-Pokud si přejete přispívat k lokalizaci softwaru MediaWiki, navštivte [//www.mediawiki.org/wiki/Localisation lokalizační stránku na mediawiki.org] a [//translatewiki.net server translatewiki.net].',
+Pokud si přejete přispívat k lokalizaci softwaru MediaWiki, navštivte [https://www.mediawiki.org/wiki/Localisation lokalizační stránku na mediawiki.org] a [//translatewiki.net server translatewiki.net].',
 'allmessagesnotsupportedDB' => '{{ns:special}}:AllMessages není podporováno, neboť wgUseDatabaseMessages je vypnuto.',
 'allmessages-filter-legend' => 'Filtr',
 'allmessages-filter' => 'Filtr podle stavu:',
@@ -3165,6 +3166,7 @@ Uložte jej na svůj disk a nahrajte ho sem.',
 'tooltip-undo' => '„Zrušit editaci“ otevře okno editace, které neobsahuje změny provedené v rušené editaci. Je možné doplnit zdůvodnění do shrnutí editace.',
 'tooltip-preferences-save' => 'Uložit nastavení',
 'tooltip-summary' => 'Zadejte stručné shrnutí',
+'interlanguage-link-title' => '$1 – $2',
 
 # Stylesheets
 'common.css' => '/* Zde uvedené CSS bude ovlivňovat všechny styly */',
@@ -3228,6 +3230,7 @@ Uložte jej na svůj disk a nahrajte ho sem.',
 'pageinfo-length' => 'Velikost stránky (v bajtech)',
 'pageinfo-article-id' => 'ID stránky',
 'pageinfo-language' => 'Jazyk obsahu stránky',
+'pageinfo-content-model' => 'Model obsahu stránky',
 'pageinfo-robot-policy' => 'Indexování roboty',
 'pageinfo-robot-index' => 'Dovoleno',
 'pageinfo-robot-noindex' => 'Zakázáno',
@@ -3314,7 +3317,7 @@ Otevřením souboru můžete ohrozit svůj počítač.",
 'svg-long-desc' => 'soubor SVG, nominální rozměr: $1 × $2 pixelů, velikost souboru: $3',
 'svg-long-desc-animated' => 'Animovaný soubor SVG, nominální rozměr: $1 × $2 pixelů, velikost souboru: $3',
 'svg-long-error' => 'Neplatný soubor SVG: $1',
-'show-big-image' => 'Obrázek ve vyšším rozlišení',
+'show-big-image' => 'Původní soubor',
 'show-big-image-preview' => 'Velikost tohoto náhledu: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Jiné|Jiná}} rozlišení: $1.',
 'show-big-image-size' => '$1 × $2 pixelů',
@@ -3778,7 +3781,7 @@ Obsahuje pouze seznam s odrážkami (řádka začíná s *). První odkaz na ř
 
 # External editor support
 'edit-externally' => 'Editovat tento soubor v externím programu',
-'edit-externally-help' => '(Více informací najdete v [//www.mediawiki.org/wiki/Manual:External_editors nápovědě pro nastavení].)',
+'edit-externally-help' => '(Více informací najdete v [https://www.mediawiki.org/wiki/Manual:External_editors nápovědě pro nastavení].)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'všechny',
@@ -3881,6 +3884,7 @@ Opravdu si přejete znovu tuto stránku založit?',
 # Separators for various lists, etc.
 'ellipsis' => '…',
 'percent' => '$1&#160;%',
+'quotation-marks' => '„$1“',
 
 # Multipage image navigation
 'imgmultipageprev' => '← předchozí stránka',
@@ -4024,7 +4028,7 @@ Seznam editovaných stránek můžete také [[Special:EditWatchlist|editovat ve
 'version-hook-subscribedby' => 'Volán z',
 'version-version' => '(Verze $1)',
 'version-license' => 'Licence',
-'version-poweredby-credits' => "Tato wiki běží na '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001–$1 $2.",
+'version-poweredby-credits' => "Tato wiki běží na '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001–$1 $2.",
 'version-poweredby-others' => 'další',
 'version-poweredby-translators' => 'překladatelé na translatewiki.net',
 'version-credits-summary' => 'Následujícím lidem bychom rádi poděkovali za jejich příspěvky [[Special:Version|MediaWiki]].',
@@ -4067,8 +4071,8 @@ MediaWiki je distribuována v naději, že bude užitečná, avšak BEZ JAKÉKOL
 
 # Special:SpecialPages
 'specialpages' => 'Speciální stránky',
-'specialpages-note' => '----
-* Normální speciální stránky
+'specialpages-note-top' => 'Legenda',
+'specialpages-note' => '* Normální speciální stránky
 * <span class="mw-specialpagerestricted">Speciální stránky s&nbsp;vyhrazeným přístupem</span>',
 'specialpages-group-maintenance' => 'Údržba',
 'specialpages-group-other' => 'Ostatní',
index 2d2d4bf..1465f5d 100644 (file)
@@ -1090,7 +1090,7 @@ W taczich przëtrôfkach zamkłosc diskùsëji mòże przeniesc blós rãczno.',
 'allmessagesdefault' => 'Domëslny tekst',
 'allmessagescurrent' => 'Aktualny tekst',
 'allmessagestext' => 'To je zestôwk systemòwëch ògłosów przistãpnëch w rumie mionów MediaWiki.
-Proszã zazdrzë na [//www.mediawiki.org/wiki/Localisation Lokalizacëjô MediaWiki] ë [//translatewiki.net translatewiki.net] jeżlë chcesz dolmaczëc softwôrã MediaWiki.',
+Proszã zazdrzë na [https://www.mediawiki.org/wiki/Localisation Lokalizacëjô MediaWiki] ë [//translatewiki.net translatewiki.net] jeżlë chcesz dolmaczëc softwôrã MediaWiki.',
 'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' nie mòże bëc brëkòwónô, temù że '''\$wgUseDatabaseMessages''' je wëłączony.",
 
 # Thumbnails
@@ -1224,7 +1224,7 @@ Jinszé pòla bãdą domëslno zataconé.
 
 # External editor support
 'edit-externally' => 'Editëjë nen lopk brëkùjąc bùtnowi aplikacëji',
-'edit-externally-help' => '(Zdrzë na [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] dlô dobëcô wicy wëdowiédzë).',
+'edit-externally-help' => '(Zdrzë na [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] dlô dobëcô wicy wëdowiédzë).',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'wszëtczé',
index 706051c..c954f6c 100644 (file)
@@ -927,7 +927,7 @@ $messages = array(
 
 # External editor support
 'edit-externally' => 'дѣла иꙁмѣнѥниѥ вънѣщьниимь орѫдиѥмь',
-'edit-externally-help' => '(ꙁьри [//www.mediawiki.org/wiki/Manual:External_editors помощь] вѧщєи плирофорїѩ дѣлꙗ)',
+'edit-externally-help' => '(ꙁьри [https://www.mediawiki.org/wiki/Manual:External_editors помощь] вѧщєи плирофорїѩ дѣлꙗ)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'вьсꙗ',
index 23948f3..b9c1cee 100644 (file)
@@ -1059,6 +1059,7 @@ Serch hyn, gallwch eu cymharu o hyd; cewch weld y manylion ar y [{{fullurl:{{#Sp
 Fe fydd gweinyddwyr eraill {{SITENAME}} o hyd yn gallu gweld yr hyn a guddiwyd. Fe allant ei ddatguddio trwy ddefnyddio'r dudalen arbennig hon, cyhyd ag nad oes cyfyngiadau ychwanegol wedi eu gosod.",
 'revdelete-confirm' => "Byddwch gystal â chadarnhau eich bod yn bwriadu gwneud hyn, eich bod yn deall yr effaith a gaiff, a'ch bod yn ei wneud yn ôl y [[{{MediaWiki:Policy-url}}|y polisi]].",
 'revdelete-suppress-text' => "'''Dim ond''' yn yr achosion sy'n dilyn y dylech fentro cuddio gwybodaeth:
+* Gwybodaeth a all fod yn enllib
 * Gwybodaeth bersonol anaddas
 *: ''cyfeiriad cartref, rhif ffôn, rhif yswiriant cenedlaethol, ayb.''",
 'revdelete-legend' => 'Gosod cyfyngiadau ar y gallu i weld',
@@ -1069,8 +1070,8 @@ Fe fydd gweinyddwyr eraill {{SITENAME}} o hyd yn gallu gweld yr hyn a guddiwyd.
 'revdelete-hide-user' => 'Enw defnyddiwr/IP y golygydd',
 'revdelete-hide-restricted' => 'Gosod y cyfyngiadau gweld data ar weinyddwyr yn ogystal ag eraill',
 'revdelete-radio-same' => '(peidier â newid)',
-'revdelete-radio-set' => 'Gweladwy',
-'revdelete-radio-unset' => 'Cudd',
+'revdelete-radio-set' => 'Cudd',
+'revdelete-radio-unset' => 'Gweladwy',
 'revdelete-suppress' => 'Atal data oddi wrth Weinyddwyr yn ogystal ag eraill',
 'revdelete-unsuppress' => "Tynnu'r cyfyngiadau ar y golygiadau a adferwyd",
 'revdelete-log' => 'Rheswm:',
@@ -1227,7 +1228,6 @@ Cofiwch y gall mynegeion Google o gynnwys {{SITENAME}} fod ar ei hôl hi.",
 'mypreferences' => 'Dewisiadau',
 'prefs-edits' => 'Nifer y golygiadau:',
 'prefsnologin' => 'Nid ydych wedi mewngofnodi',
-'prefsnologintext' => 'Rhaid i chi <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} fewngofnodi]</span> er mwyn gosod eich dewisiadau defnyddiwr.',
 'changepassword' => 'Newid y cyfrinair',
 'prefs-skin' => 'Gwedd',
 'skin-preview' => 'Rhagolwg',
@@ -2245,7 +2245,7 @@ Cysylltu â\'r golygydd:
 e-bost: $PAGEEDITOR_EMAIL
 wici: $PAGEEDITOR_WIKI
 
-Os bydd mwy o drin a thrafod ar y dudalen cyn i chi ymweld â hi, ni chewch ragor o negeseuon hysbysu. Nodwn bod modd i chi ailosod y fflagiau hysbysu ar eich rhestr wylio, ar gyfer y tudalennau rydych yn eu gwylio.
+Os bydd mwy o drin a thrafod ar y dudalen cyn i chi ymweld â hi tra eich bod wedi mewngofnodi, ni chewch ragor o negeseuon hysbysu. Nodwn bod modd i chi ailosod y fflagiau hysbysu ar eich rhestr wylio, ar gyfer y tudalennau rydych yn eu gwylio.
 
              Sustem hysbysu {{SITENAME}}
 
@@ -2451,7 +2451,7 @@ $1',
 
 # Contributions
 'contributions' => "{{GENDER:$1|Cyfraniadau'r defnyddiwr}}",
-'contributions-title' => "Cyfraniadau'r defnyddiwr am $1",
+'contributions-title' => "Cyfraniadau'r defnyddiwr $1",
 'mycontris' => 'Cyfraniadau',
 'contribsub2' => 'Gan {{GENDER:$3|$1}} ($2)',
 'nocontribs' => "Heb ddod o hyd i newidiadau gyda'r meini prawf hyn.",
@@ -2766,7 +2766,7 @@ Yn achos yr ail ddewis, mae modd defnyddio cyswllt, e.e. [[{{#Special:Export}}/{
 'allmessagesdefault' => 'Testun rhagosodedig',
 'allmessagescurrent' => 'Testun cyfredol',
 'allmessagestext' => "Dyma restr o'r holl negeseuon yn y parth MediaWici.
-Os ydych am gyfrannu at y gwaith o gyfieithu ar gyfer holl prosiectau MediaWiki ar y cyd, mae croeso i chi ymweld â [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] a [//translatewiki.net translatewiki.net].",
+Os ydych am gyfrannu at y gwaith o gyfieithu ar gyfer holl prosiectau MediaWiki ar y cyd, mae croeso i chi ymweld â [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] a [//translatewiki.net translatewiki.net].",
 'allmessagesnotsupportedDB' => "Nid yw '''{{ns:special}}:PobNeges''' yn cael ei gynnal gan fod '''\$wgUseDatabaseMessages''' wedi ei ddiffodd.",
 'allmessages-filter-legend' => 'Hidl',
 'allmessages-filter' => 'Hidlo yn ôl eu cyflwr addasu:',
@@ -2931,7 +2931,7 @@ Mae ffolder dros dro yn eisiau.',
 Gellir ychwanegu rheswm dros y dadwneud yn y crynodeb.',
 'tooltip-preferences-save' => 'Rhodder y dewisiadau ar gadw',
 'tooltip-summary' => 'Rhowch grynodeb byr',
-'tooltip-iwiki' => '$1 - $2',
+'interlanguage-link-title' => '$1 - $2',
 
 # Metadata
 'notacceptable' => "Dydy gweinydd y wici ddim yn medru rhoi'r data mewn fformat darllenadwy i'ch cleient.",
@@ -2972,6 +2972,7 @@ Achos hyn yn fwy na thebyg yw presenoldeb cysylltiad i wefan ar y rhestr wahardd
 'pageinfo-length' => 'Hyd y dudalen (beitiau)',
 'pageinfo-article-id' => 'ID y dudalen',
 'pageinfo-language' => 'Iaith cynnwys y dudalen',
+'pageinfo-content-model' => 'Ffurf cynnwys y dudalen',
 'pageinfo-robot-policy' => 'Rhestrwyd gan robot',
 'pageinfo-robot-index' => 'Caniateir',
 'pageinfo-robot-noindex' => 'Gwrthodedig',
@@ -3055,7 +3056,7 @@ Mae'n bosib y bydd eich cyfrifiadur yn cael ei danseilio wrth ddefnyddio'r ffeil
 'svg-long-desc' => 'Ffeil SVG, maint mewn enw $1 × $2 picsel, maint y ffeil: $3',
 'svg-long-desc-animated' => 'Ffeil SVG animeiddiedig, maint mewn enw $1 × $2 picsel, maint y ffeil: $3',
 'svg-long-error' => 'Ffeil SVG annilys: $1',
-'show-big-image' => 'Maint llawn',
+'show-big-image' => 'Y ffeil gwreiddiol',
 'show-big-image-preview' => 'Maint y rhagolwg: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Datrysiad arall|Datrysiad arall|Datrysiadau eraill|Datrysiadau eraill|Datrysiadau eraill|Datrysiadau eraill}}: $1.',
 'show-big-image-size' => '$1 × $2 picsel',
@@ -3525,7 +3526,7 @@ Cuddir y meysydd eraill trwy ragosodiad.
 
 # External editor support
 'edit-externally' => 'Golygwch y ffeil gyda rhaglen allanol',
-'edit-externally-help' => '(Gwelwch y [//www.mediawiki.org/wiki/Manual:External_editors cyfarwyddiadau gosod] am fwy o wybodaeth)',
+'edit-externally-help' => '(Gwelwch y [https://www.mediawiki.org/wiki/Manual:External_editors cyfarwyddiadau gosod] am fwy o wybodaeth)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'holl',
@@ -3613,6 +3614,9 @@ Cadarnhewch eich bod chi wir am ail-greu'r dudalen.",
 'confirm-unwatch-button' => 'Iawn',
 'confirm-unwatch-top' => 'Tynner y dudalen hon oddi ar eich rhestr wylio?',
 
+# Separators for various lists, etc.
+'quotation-marks' => "'$1'",
+
 # Multipage image navigation
 'imgmultipageprev' => "← i'r dudalen gynt",
 'imgmultipagenext' => "i'r dudalen nesaf →",
@@ -3697,7 +3701,7 @@ Gallwch hefyd [[Special:EditWatchlist|ddefnyddio\'r rhestr arferol]].',
 'version-hook-subscribedby' => 'Tanysgrifwyd gan',
 'version-version' => '(Fersiwn $1)',
 'version-license' => 'Trwydded',
-'version-poweredby-credits' => "Mae'r wici hwn wedi'i nerthu gan '''[//www.mediawiki.org/ MediaWiki]''', hawlfraint © 2001 - $1 $2.",
+'version-poweredby-credits' => "Mae'r wici hwn wedi'i nerthu gan '''[https://www.mediawiki.org/ MediaWiki]''', hawlfraint © 2001 - $1 $2.",
 'version-poweredby-others' => 'eraill',
 'version-poweredby-translators' => 'cyfieithwyr translatewiki.net',
 'version-credits-summary' => 'Hoffem gydnabod cyfraniad y bobl canlynol i [[Special:Version|MediaWiki]].',
@@ -3740,8 +3744,8 @@ Defnydd:
 
 # Special:SpecialPages
 'specialpages' => 'Tudalennau arbennig',
-'specialpages-note' => '----
-* Tudalennau arbennig ar gael i bawb.
+'specialpages-note-top' => 'Allwedd',
+'specialpages-note' => '* Tudalennau arbennig ar gael i bawb.
 * <span class="mw-specialpagerestricted">Tudalennau arbennig cyfyngedig.</span>
 * <span class="mw-specialpagecached">Tudalennau arbennig wedi eu cynhyrchu o\'r celc (gallant fod heb eu harfer rhagor).</span>',
 'specialpages-group-maintenance' => 'Adroddiadau cynnal a chadw',
index 162fee0..ebe2fd6 100644 (file)
@@ -43,6 +43,7 @@
  * @author Qaqqalik
  * @author Remember the dot
  * @author Sarrus
+ * @author Shirayuki
  * @author Simeondahl
  * @author Sir48
  * @author Slomox
@@ -648,7 +649,7 @@ Glem ikke at ændre dine [[Special:Preferences|{{SITENAME}} indstillinger]].',
 'gotaccount' => 'Har du allerede en konto? $1.',
 'gotaccountlink' => 'Log på',
 'userlogin-resetlink' => 'Har du glemt dine login oplysninger?',
-'userlogin-resetpassword-link' => 'Nulstil din adgangskode',
+'userlogin-resetpassword-link' => 'Glemt din adgangskode?',
 'helplogin-url' => 'Help:Logge på',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hjælp til at logge på]]',
 'userlogin-loggedin' => 'Du er allerede logget på som {{GENDER:$1|$1}}.
@@ -712,14 +713,14 @@ kan du bare ignorere denne e-mail og fortsætte med at bruge din gamle adgangsko
 'passwordsent' => 'En ny adgangskode er sendt til e-mailadressen, som er registreret for "$1".
 Du bør logge på og ændre din adgangskode straks efter du har modtaget e-mailen.',
 'blocked-mailpassword' => 'Din IP-adresse er spærret for ændring af sider. For at forhindre misbrug, er det heller ikke muligt, at bestille en ny adgangskode.',
-'eauthentsent' => 'En bekræftelsesmail er sendt til den angivne e-mailadresse.
+'eauthentsent' => 'En e-mailbekræftelse er sendt til den angivne e-mailadresse.
 
-Før en e-mail kan modtages af andre brugere af {{SITENAME}}-mailfunktionen, skal adressen og dens tilhørsforhold til denne bruger bekræftes. Følg venligst anvisningerne i denne mail.',
+Før flere e-mails bliver sendt til kontoen, skal du følge instruktionerne i e-mailen, for at bekræfte at kontoen rent faktisk er din.',
 'throttled-mailpassword' => 'Indenfor {{PLURAL:$1|den sidste time|de sidste $1 timer}} er der allerede sendt en ny adgangskode. For at forhindre misbrug af funktionen, kan der kun bestilles en ny adgangskode én gang for hver {{PLURAL:$1|time|$1 timer}}.',
 'mailerror' => 'Fejl ved afsendelse af e-mail: $1',
 'acct_creation_throttle_hit' => 'Besøgende med samme IP-adresse som dig har oprettet {{PLURAL:$1|en konto|$1 kontoer}} det sidste døgn, og det er ikke tilladt at oprette flere.
 Derfor kan besøgende ikke oprette flere kontoer fra denne IP-adresse i øjeblikket.',
-'emailauthenticated' => 'Din e-mailadresse blev bekræftet $2 $3.',
+'emailauthenticated' => 'Din e-mailadresse blev bekræftet den $2 kl. $3.',
 'emailnotauthenticated' => 'Din e-mailadresse er endnu ikke bekræftet.
 Ingen e-mail vil blive sendt for de følgende funktioner.',
 'noemailprefs' => 'Angiv en e-mailadresse, så følgende funktioner er til rådighed.',
@@ -1143,19 +1144,20 @@ Du kan se denne forskel; der kan findes detaljer i [{{fullurl:{{#Special:Log}}/s
 'revdelete-text' => "'''Slettede versioner vil fortsat vises i sidehistorik og på logsider, men dele af deres indhold vil ikke være offentligt tilgængeligt.'''
 Andre administratorer på {{SITENAME}} vil fortsat være i stand til at se det skjulte indhold og kan gendanne det igen, medmindre der laves yderligere restriktioner.",
 'revdelete-confirm' => 'Vær venlig at bekræfte at du vil gøre dette, at du forstår konsekvenserne, og at du gør det i overensstemmelse med [[{{MediaWiki:Policy-url}}|retningslinjerne]].',
-'revdelete-suppress-text' => "Skjulning bør '''kun''' bruges i de følgende tilfælde:
+'revdelete-suppress-text' => "Der bør '''kun''' skjules i de følgende tilfælde:
+* Potentielt injurierende oplysninger
 * Upassende personlige oplysninger
-*: ''hjemadresser og -telefonnumre, CPR-numre og lign.''",
+*: ''hjemmeadresser og -telefonnumre, CPR-numre og lign.''",
 'revdelete-legend' => 'Fastlægge begrænsninger for versionerne:',
-'revdelete-hide-text' => 'Skjul versionens tekst',
+'revdelete-hide-text' => 'Tekst for versionen',
 'revdelete-hide-image' => 'Skjul filindhold',
 'revdelete-hide-name' => 'Skjul handling og mål',
-'revdelete-hide-comment' => 'Skjul ændringskommentar',
-'revdelete-hide-user' => 'Skjul brugerens brugernavn/IP',
+'revdelete-hide-comment' => 'Redigeringssammendrag',
+'revdelete-hide-user' => 'Brugerens brugernavn/IP-adrsse',
 'revdelete-hide-restricted' => 'Skjul også informationen for administratorer',
 'revdelete-radio-same' => '(ikke ændre)',
-'revdelete-radio-set' => 'Ja',
-'revdelete-radio-unset' => 'Nej',
+'revdelete-radio-set' => 'Skjult',
+'revdelete-radio-unset' => 'Synligt',
 'revdelete-suppress' => 'Skjul også informationen for administratorer',
 'revdelete-unsuppress' => 'Ophæv begrænsninger for gendannede versioner',
 'revdelete-log' => 'Begrundelse:',
@@ -1313,7 +1315,6 @@ Du kan prøve at bruge \"all:\" som præfiks for at søge i alt indhold (inkl. d
 'mypreferences' => 'Indstillinger',
 'prefs-edits' => 'Antal redigeringer:',
 'prefsnologin' => 'Ikke logget på',
-'prefsnologintext' => 'Du skal være <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} logget på]</span> for at ændre brugerindstillinger.',
 'changepassword' => 'Skift adgangskode',
 'prefs-skin' => 'Udseende',
 'skin-preview' => 'Forhåndsvisning',
@@ -2664,7 +2665,7 @@ Se [[Special:BlockList|blokeringslisten]] for alle blokeringer.',
 'ipblocklist-no-results' => 'Den angivene IP-addresse eller brugernavn er ikke blokeret.',
 'blocklink' => 'bloker',
 'unblocklink' => 'ophæv blokering',
-'change-blocklink' => 'ændre blokering',
+'change-blocklink' => 'ændr blokering',
 'contribslink' => 'bidrag',
 'emaillink' => 'send e-mail',
 'autoblocker' => 'Du er automatisk blokeret, fordi du deler IP-adresse med "[[User:$1|$1]]".
@@ -2846,7 +2847,7 @@ Hvis du kun vil have den seneste version, kan du også bruge en henvisning, for
 'allmessagesdefault' => 'Standardtekst',
 'allmessagescurrent' => 'Nuværende tekst',
 'allmessagestext' => 'Dette er en liste med alle systembeskeder i MediaWiki-navnerummet.
-Besøg venligst [//www.mediawiki.org/wiki/Localisation MediaWiki-lokalisering] og [//translatewiki.net translatewiki.net] hvis du ønsker at bidrage til den generelle lokalisering (oversættelse og andre lokale tilpasninger) af MediaWiki.',
+Besøg venligst [https://www.mediawiki.org/wiki/Localisation MediaWiki-lokalisering] og [//translatewiki.net translatewiki.net] hvis du ønsker at bidrage til den generelle lokalisering (oversættelse og andre lokale tilpasninger) af MediaWiki.',
 'allmessagesnotsupportedDB' => '{{ns:special}}:AllMessages ikke understøttet fordi wgUseDatabaseMessages er slået fra.',
 'allmessages-filter-legend' => 'Filtrér',
 'allmessages-filter' => 'Filtrér efter tilpasningsstatus:',
@@ -3057,6 +3058,7 @@ Udfyld '''IKKE''' dette!",
 'pageinfo-length' => 'Sidelængde (i bytes)',
 'pageinfo-article-id' => 'Side-ID',
 'pageinfo-language' => 'Sprog for sideindholdet',
+'pageinfo-content-model' => 'Sidens indhold er',
 'pageinfo-robot-policy' => 'Indeksering af robotter',
 'pageinfo-robot-index' => 'Tilladt',
 'pageinfo-robot-noindex' => 'Ikke tilladt',
@@ -3142,7 +3144,7 @@ Du kan beskadige dit system hvis du udfører den.",
 'svg-long-desc' => 'SVG fil, basisstørrelse $1 × $2 punkters, størrelse: $3',
 'svg-long-desc-animated' => 'Animeret SVG-fil, basisstørrelse $1 × $2 punkter, filstørrelse: $3',
 'svg-long-error' => 'Ugyldig SVG-fil: $1',
-'show-big-image' => 'Version i større opløsning',
+'show-big-image' => 'Oprindelige fil',
 'show-big-image-preview' => 'Størrelse af denne forhåndsvisning: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Anden opløsning|Andre opløsninger}}: $1.',
 'show-big-image-size' => '$1 × $2 pixels',
@@ -3609,7 +3611,7 @@ Kun indholdet af lister (linjer startende med *) bliver brugt. Den første henvi
 
 # External editor support
 'edit-externally' => 'Rediger denne fil med en ekstern editor',
-'edit-externally-help' => '(Se [//www.mediawiki.org/wiki/Manual:External_editors setup instruktionerne] for mere information)',
+'edit-externally-help' => '(Se [https://www.mediawiki.org/wiki/Manual:External_editors setup instruktionerne] for mere information)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'alle',
@@ -3788,7 +3790,7 @@ Du kan også [[Special:EditWatchlist|bruge standard editoren]].',
 'version-hook-subscribedby' => 'Brugt af',
 'version-version' => '(Version $1)',
 'version-license' => 'Licens',
-'version-poweredby-credits' => "Denne wiki er drevet af '''[//www.mediawiki.org/ MediaWiki ]''', copyright © 2001-$1 $2.",
+'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',
 'version-credits-summary' => 'Vi vil gerne anerkende følgende personer for deres bidrag til [[Special:Version|MediaWiki]].',
@@ -3807,7 +3809,7 @@ Du skulle have modtaget [{{SERVER}}{{SCRIPTPATH}}/COPYING en kopi af GNU General
 # Special:Redirect
 'redirect' => 'Omdirigering pga. fil, bruger eller udgave ID',
 'redirect-legend' => 'Omstilling til en fil eller en side',
-'redirect-summary' => "Denne side omdirigerer en (hvis filnavnet er angivet), en side (hvis udgave ID'et er angivet) eller en brugerside (hvis et numerisk brugernummer er angivet).",
+'redirect-summary' => "Denne specialside omdirigerer til en fil (hvis filnavnet er angivet), en side (hvis udgave ID'et er angivet) eller en brugerside (hvis et numerisk brugernummer er angivet). Eksempler på brug: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]] eller [[{{#Special:Redirect}}/user/101]].",
 'redirect-submit' => 'Kør',
 'redirect-lookup' => 'Slå op:',
 'redirect-value' => 'Værdi:',
@@ -3829,8 +3831,7 @@ Du skulle have modtaget [{{SERVER}}{{SCRIPTPATH}}/COPYING en kopi af GNU General
 
 # Special:SpecialPages
 'specialpages' => 'Specialsider',
-'specialpages-note' => '----
-* Normale specialsider.
+'specialpages-note' => '* Normale specialsider.
 * <span class="mw-specialpagerestricted">Specialsider med begrænset adgang.</span>',
 'specialpages-group-maintenance' => 'Vedligeholdelsesside',
 'specialpages-group-other' => 'Andre specialsider',
@@ -3872,7 +3873,7 @@ Du skulle have modtaget [{{SERVER}}{{SCRIPTPATH}}/COPYING en kopi af GNU General
 'tags-hitcount-header' => 'Taggede ændringer',
 'tags-active-yes' => 'Ja',
 'tags-active-no' => 'Nej',
-'tags-edit' => 'Redigér',
+'tags-edit' => 'redigér',
 'tags-hitcount' => '{{PLURAL:$1|en ændring|$1 ændringer}}',
 
 # Special:ComparePages
index 3392d38..e9444d0 100644 (file)
@@ -698,8 +698,8 @@ Siehe die [[Special:Version|Versionsseite]]',
 'newmessagesdifflink' => 'Letzte Änderung',
 'youhavenewmessagesfromusers' => 'Du hast $1 von {{PLURAL:$3|einem anderen Benutzer|$3 Benutzern}} ($2).',
 'youhavenewmessagesmanyusers' => 'Du hast $1 von vielen Benutzern ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|eine neue Nachricht|neue Nachrichten}}',
-'newmessagesdifflinkplural' => 'letzte {{PLURAL:$1|Änderung|Änderungen}}',
+'newmessageslinkplural' => '{{PLURAL:$1|eine neue Nachricht|999=neue Nachrichten}}',
+'newmessagesdifflinkplural' => 'letzte {{PLURAL:$1|Änderung|999=Änderungen}}',
 'youhavenewmessagesmulti' => 'Du hast neue Nachrichten: $1',
 'editsection' => 'Bearbeiten',
 'editold' => 'Bearbeiten',
@@ -830,7 +830,8 @@ Der Administrator, der den Schreibzugriff sperrte, gab folgenden Grund an: „$3
 'invalidtitle-knownnamespace' => 'Ungültiger Titel mit Namensraum „$2“ und Text „$3“',
 'invalidtitle-unknownnamespace' => 'Ungültiger Titel mit unbekannter Namensraumnummer $1 und Text „$2“',
 'exception-nologin' => 'Nicht angemeldet',
-'exception-nologin-text' => 'Diese Seite oder Aktion erfordert, dass du auf diesem Wiki angemeldet bist.',
+'exception-nologin-text' => 'Du musst dich [[Special:Userlogin|anmelden]], um auf diese Seite oder Aktion zugreifen zu können.',
+'exception-nologin-text-manual' => 'Du musst dich $1, um auf diese Seite oder Aktion zugreifen zu können.',
 
 # Virus scanner
 'virus-badscanner' => "Fehlerhafte Konfiguration: unbekannter Virenscanner: ''$1''",
@@ -1375,6 +1376,7 @@ Du kannst diesen Versionsunterschied einsehen, sofern du möchtest. Nähere Anga
 Andere Administratoren auf {{SITENAME}} haben Zugriff auf den versteckten Inhalt und können ihn mit der gleichen Seite wiederherstellen, sofern nicht zusätzliche Einschränkungen bestehen.",
 'revdelete-confirm' => 'Bitte bestätige, dass du beabsichtigst, dies zu tun, die Konsequenzen verstehst und es in Übereinstimmung mit den [[{{MediaWiki:Policy-url}}|Richtlinien]] tust.',
 'revdelete-suppress-text' => "Unterdrückungen sollten '''nur''' in den folgenden Fällen vorgenommen werden:
+* Potentiell beleidigende Informationen
 * Unangebrachte persönliche Informationen
 *: ''Adressen, Telefonnummern, Sozialversicherungsnummern etc.''",
 'revdelete-legend' => 'Setzen der Sichtbarkeitseinschränkungen',
@@ -1385,8 +1387,8 @@ Andere Administratoren auf {{SITENAME}} haben Zugriff auf den versteckten Inhalt
 'revdelete-hide-user' => 'Benutzername/IP-Adresse des Bearbeiters',
 'revdelete-hide-restricted' => 'Daten sowohl vor Administratoren als auch anderen Benutzern unterdrücken',
 'revdelete-radio-same' => '(nicht ändern)',
-'revdelete-radio-set' => 'Sichtbar',
-'revdelete-radio-unset' => 'Versteckt',
+'revdelete-radio-set' => 'Versteckt',
+'revdelete-radio-unset' => 'Sichtbar',
 'revdelete-suppress' => 'Grund der Löschung auch vor Administratoren verstecken',
 'revdelete-unsuppress' => 'Einschränkungen für wiederhergestellte Versionen aufheben',
 'revdelete-log' => 'Grund:',
@@ -1541,7 +1543,7 @@ Einzelheiten sind im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}
 'mypreferences' => 'Einstellungen',
 'prefs-edits' => 'Anzahl der Bearbeitungen:',
 'prefsnologin' => 'Nicht angemeldet',
-'prefsnologintext' => 'Du musst <span class="plainlinks">[{{fullurl:{{#special:UserLogin}}|returnto=$1}} angemeldet]</span> sein, um deine Einstellungen ändern zu können.',
+'prefsnologintext2' => 'Du musst dich $1, um Benutzereinstellungen festzulegen.',
 'changepassword' => 'Passwort ändern',
 'prefs-skin' => 'Benutzeroberfläche',
 'skin-preview' => 'Vorschau',
@@ -2567,7 +2569,7 @@ Kontakt zum Bearbeiter:
 E-Mail: $PAGEEDITOR_EMAIL
 Wiki: $PAGEEDITOR_WIKI
 
-Bei weiterer Aktivität auf der Seite werden dir so lange keine weiteren Benachrichtigungs-E-Mails gesendet, bis du die Seite wieder besucht hast. Auf deiner Beobachtungsliste kannst du alle Benachrichtigungsmarkierungen zusammen zurücksetzen.
+Bei weiterer Aktivität auf der Seite werden dir so lange keine weiteren Benachrichtigungs-E-Mails gesendet, bis du die Seite wieder angemeldet besucht hast. Auf deiner Beobachtungsliste kannst du alle Benachrichtigungsmarkierungen zusammen zurücksetzen.
 
 Dein freundliches {{SITENAME}}-Benachrichtigungssystem
 
@@ -3071,7 +3073,7 @@ Alternativ ist der Export auch mit der Syntax [[{{#Special:Export}}/{{MediaWiki:
 'allmessagesdefault' => 'Standardtext',
 'allmessagescurrent' => 'Aktueller Text',
 'allmessagestext' => 'Dies ist eine Liste der MediaWiki-Systemtexte.
-Bitte besuche die Seiten [//www.mediawiki.org/wiki/Localisation MediaWiki-Lokalisierung] und [//translatewiki.net translatewiki.net], sofern du dich an der Lokalisierung von MediaWiki beteiligen möchtest.',
+Bitte besuche die Seiten [https://www.mediawiki.org/wiki/Localisation MediaWiki-Lokalisierung] und [//translatewiki.net translatewiki.net], sofern du dich an der Lokalisierung von MediaWiki beteiligen möchtest.',
 'allmessagesnotsupportedDB' => 'Diese Spezialseite steht nicht zur Verfügung, da sie über den Parameter <tt>$wgUseDatabaseMessages</tt> deaktiviert wurde.',
 'allmessages-filter-legend' => 'Filter',
 'allmessages-filter' => 'Filter für angepassten Zustand:',
@@ -3233,7 +3235,7 @@ Diese auf dem lokalen Rechner speichern und danach hier hochladen.',
 'tooltip-undo' => 'Macht lediglich diese eine Änderung rückgängig und zeigt das Resultat in der Vorschau an, damit in der Zusammenfassungszeile eine Begründung angegeben werden kann.',
 'tooltip-preferences-save' => 'Einstellungen speichern',
 'tooltip-summary' => 'Gib eine kurze Zusammenfassung ein.',
-'tooltip-iwiki' => '$1 – $2',
+'interlanguage-link-title' => '$1 – $2',
 
 # Stylesheets
 'common.css' => '/* Das folgende CSS wird für alle Benutzeroberflächen geladen. */',
@@ -3298,6 +3300,7 @@ Hier '''NICHTS''' eintragen!",
 'pageinfo-length' => 'Seitenlänge (in Bytes)',
 'pageinfo-article-id' => 'Seitenkennnummer',
 'pageinfo-language' => 'Seiteninhaltssprache',
+'pageinfo-content-model' => 'Seiteninhaltsmodell',
 'pageinfo-robot-policy' => 'Indexierung durch Robots',
 'pageinfo-robot-index' => 'Erlaubt',
 'pageinfo-robot-noindex' => 'Nicht erlaubt',
@@ -3385,7 +3388,7 @@ Durch das Herunterladen und Öffnen der Datei kann dein Computer beschädigt wer
 'svg-long-desc' => 'SVG-Datei, Basisgröße: $1 × $2 Pixel, Dateigröße: $3',
 'svg-long-desc-animated' => 'Animierte SVG-Datei, Basisgröße $1 × $2 Pixel, Dateigröße: $3',
 'svg-long-error' => 'Ungültige SVG-Datei: $1',
-'show-big-image' => 'Volle Auflösung',
+'show-big-image' => 'Originaldatei',
 'show-big-image-preview' => 'Größe dieser Vorschau: $1.',
 'show-big-image-other' => 'Weitere {{PLURAL:$2|Auflösung|Auflösungen}}: $1.',
 'show-big-image-size' => '$1 × $2 Pixel',
@@ -3851,7 +3854,7 @@ Weitere werden standardmäßig nicht angezeigt.
 
 # External editor support
 'edit-externally' => 'Diese Datei mit einem externen Programm bearbeiten',
-'edit-externally-help' => '(weitere Informationen in den [//www.mediawiki.org/wiki/Manual:External_editors Installationsanweisungen])',
+'edit-externally-help' => '(weitere Informationen in den [https://www.mediawiki.org/wiki/Manual:External_editors Installationsanweisungen])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'alle',
@@ -3952,6 +3955,7 @@ Bitte bestätige, dass du diese Seite wirklich neu erstellen möchten.",
 # Separators for various lists, etc.
 'ellipsis' => '…',
 'percent' => '$1&#160;%',
+'quotation-marks' => '„$1“',
 
 # Multipage image navigation
 'imgmultipageprev' => '← vorherige Seite',
@@ -4054,7 +4058,7 @@ Du kannst auch die [[Special:EditWatchlist|Standardseite]] zum Bearbeiten benutz
 'version-version' => '(Version $1)',
 'version-svn-revision' => '(Version $2)',
 'version-license' => 'Lizenz',
-'version-poweredby-credits' => "Diese Website nutzt '''[//www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
+'version-poweredby-credits' => "Diese Website nutzt '''[https://www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
 'version-poweredby-others' => 'andere',
 'version-poweredby-translators' => 'Übersetzer von translatewiki.net',
 'version-credits-summary' => 'Wir danken folgenden Personen für ihre Beiträge zu [[Special:Version|MediaWiki]].',
@@ -4097,10 +4101,9 @@ Eine [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie der ''GNU General Public License'']
 
 # Special:SpecialPages
 'specialpages' => 'Spezialseiten',
-'specialpages-note' => '----
-* Reguläre Spezialseiten
-* <span class="mw-specialpagerestricted">Zugriffsbeschränkte Spezialseiten</span>
-* <span class="mw-specialpagecached">Gecachte Spezialseiten (Deren Inhalt ist möglicherweise veraltet.)</span>',
+'specialpages-note-top' => 'Legende',
+'specialpages-note' => '* Normale Spezialseiten.
+* <span class="mw-specialpagerestricted">Spezialseiten mit beschränktem Zugang.</span>',
 'specialpages-group-maintenance' => 'Wartungslisten',
 'specialpages-group-other' => 'Andere Spezialseiten',
 'specialpages-group-login' => 'Benutzerkonto',
index ab87bab..93b5fbd 100644 (file)
@@ -14,6 +14,7 @@
  * @author George Animal
  * @author Gorizon
  * @author Kaganer
+ * @author Marmase
  * @author Mirzali
  * @author Nemo bis
  * @author Neribij
@@ -374,50 +375,50 @@ $messages = array(
 'editfont-serif' => 'Babetê serifi',
 
 # Dates
-'sunday' => 'Kırê',
-'monday' => 'Dışeme',
-'tuesday' => 'Sêşeme',
-'wednesday' => 'Çeharşeme',
-'thursday' => 'Pancşeme',
-'friday' => 'Ã\8ane',
-'saturday' => 'Şeme',
-'sun' => 'Krê',
-'mon' => 'Dış',
-'tue' => 'Sêş',
+'sunday' => 'Bazar',
+'monday' => 'Berarek',
+'tuesday' => 'Telete',
+'wednesday' => 'Çarşeme',
+'thursday' => 'Panşeme',
+'friday' => 'Ã\89ne',
+'saturday' => 'Bahdé éni',
+'sun' => 'Baz',
+'mon' => 'Bbz',
+'tue' => 'Tlt',
 'wed' => 'Çrş',
 'thu' => 'Pşm',
 'fri' => 'Êne',
-'sat' => 'Şem',
+'sat' => 'Bdé',
 'january' => 'Çele',
-'february' => 'Sıbate',
-'march' => 'Adar',
-'april' => 'Nisane',
-'may_long' => 'Gulane',
+'february' => 'Zemherı',
+'march' => 'Mert',
+'april' => 'Lisan',
+'may_long' => 'Gúlan',
 'june' => 'Heziran',
-'july' => 'Temuze',
-'august' => 'Tebaxe',
+'july' => 'Temuz',
+'august' => 'Ağustos',
 'september' => 'Keşkelun',
-'october' => 'Tışrino Verên',
-'november' => 'Tışrino Peyên',
-'december' => 'Kanun',
+'october' => 'Cetan',
+'november' => 'Kelverdan',
+'december' => 'Gağand',
 'january-gen' => 'Çele',
-'february-gen' => 'Sıbate',
-'march-gen' => 'Adar',
-'april-gen' => 'Nisane',
-'may-gen' => 'Gulane',
+'february-gen' => 'Zemherı',
+'march-gen' => 'Mert',
+'april-gen' => 'Lisan',
+'may-gen' => 'Gúlan',
 'june-gen' => 'Heziran',
-'july-gen' => 'Temuze',
-'august-gen' => 'Tebaxe',
+'july-gen' => 'Temuz',
+'august-gen' => 'Ağustos',
 'september-gen' => 'Keşkelun',
-'october-gen' => 'Tışrino Verên',
-'november-gen' => 'Tışrino Peyên',
-'december-gen' => 'Kanun',
+'october-gen' => 'Cetan',
+'november-gen' => 'Kelverdan',
+'december-gen' => 'Gağand',
 'jan' => 'Çel',
 'feb' => 'Sbt',
 'mar' => 'Adr',
 'apr' => 'Nsn',
 'may' => 'Gln',
-'jun' => 'Hzr',
+'jun' => 'Hez',
 'jul' => 'Tmz',
 'aug' => 'Tbx',
 'sep' => 'Kşk',
@@ -438,8 +439,8 @@ $messages = array(
 'december-date' => 'Kanun $1',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|Kategoriye|Kategoriy}}',
-'category_header' => 'Pelê ke kategoriya "$1" derê',
+'pagecategories' => '{{PLURAL:$1|Kategori|Kategoriy}}',
+'category_header' => 'Perré ke kategori da "$1" de yé',
 'subcategories' => 'Kategoriyê bınêni',
 'category-media-header' => 'Dosyeyê ke kategoriya "$1" derê',
 'category-empty' => "''Ena kategoriye de hewna qet nuştey ya zi medya çıniyê.''",
@@ -452,30 +453,30 @@ $messages = array(
 'category-file-count' => '<noinclude>{{PLURAL:$2|Na kategoriye tenya dosyayanê cêrênan muhtewa kena.}}</noinclude>
 *Na kategoriye de $2 dosyayan ra {{PLURAL:$1|yew dosya tenêka esta| $1 dosyey asenê}}.',
 'category-file-count-limited' => '{{PLURAL:$1|Dosya cêrêne|$1 Dosyê cêrêni}} na kategoriye derê.',
-'listingcontinuesabbrev' => '(dewam)',
+'listingcontinuesabbrev' => 'dewam...',
 'index-category' => 'Pelê endeksıni',
 'noindex-category' => 'Pelê ke zerrekê cı çıniyo',
 'broken-file-category' => 'Peleye ke gıreyê dosyeyanê ğeletan muhtewa kenê',
 'categoryviewer-pagedlinks' => '($1) ($2)',
 
-'about' => 'Heqa cı de',
+'about' => 'Heqdé cı',
 'article' => 'Wesiqe',
 'newwindow' => '(pençereyê newey de beno a)',
-'cancel' => 'Bıtexelne',
+'cancel' => 'Bıterkne',
 'moredotdotdot' => 'Vêşi...',
 'morenotlisted' => 'Vêşi lista nêbi...',
-'mypage' => 'Pele',
-'mytalk' => 'Werênayış',
+'mypage' => 'Per',
+'mytalk' => 'Vaten',
 'anontalk' => 'Pela werênayışê nê IPy',
-'navigation' => 'Geyrayış',
+'navigation' => 'Pusula',
 'and' => '&#32;u',
 
 # Cologne Blue skin
 'qbfind' => 'Bıvêne',
 'qbbrowse' => 'Rovete',
-'qbedit' => 'Bıvurne',
+'qbedit' => 'Timar ke',
 'qbpageoptions' => 'Ena pele',
-'qbmyoptions' => 'Pe mı',
+'qbmyoptions' => 'Pe mı',
 'qbspecialpages' => 'Pelê xısusiy',
 'faq' => 'PZP (Persê ke zehf persiyenê)',
 'faqpage' => 'Project: PZP',
@@ -483,38 +484,38 @@ $messages = array(
 # Vector skin
 'vector-action-addsection' => 'Mewzu vıraze',
 'vector-action-delete' => 'Bestere',
-'vector-action-move' => 'Berê',
-'vector-action-protect' => 'Bıpawe',
+'vector-action-move' => 'Beré',
+'vector-action-protect' => 'Star ke',
 'vector-action-undelete' => 'Esterıtışi peyser bıgê',
 'vector-action-unprotect' => 'Starkerdışi bıvurne',
 'vector-simplesearch-preference' => 'Çuweya cı geyreyış de rehater aktiv ke (Tenya vector skin de)',
-'vector-view-create' => 'Vıraze',
-'vector-view-edit' => 'Bıvurne',
-'vector-view-history' => 'Vurnayışê verêni',
-'vector-view-view' => 'Bıwane',
-'vector-view-viewsource' => 'Çımey bıvêne',
-'actions' => 'Kerdışi',
+'vector-view-create' => 'İycad ke',
+'vector-view-edit' => 'Timar ke',
+'vector-view-history' => 'Veréni bıvin',
+'vector-view-view' => 'Buwan',
+'vector-view-viewsource' => 'Çımi bıvin',
+'actions' => 'Hereketi',
 'namespaces' => 'Cayê namey',
 'variants' => 'Varyanti',
 
 'navigation-heading' => 'Menuya Navigasyoni',
-'errorpagetitle' => 'Xırab',
+'errorpagetitle' => 'Ğeta',
 'returnto' => 'Peyser şo $1.',
 'tagline' => '{{SITENAME}} ra',
-'help' => 'Peşti',
+'help' => 'Desteg',
 'search' => 'Cı geyre',
 'searchbutton' => 'Cı geyre',
 'go' => 'Şo',
 'searcharticle' => 'Şo',
 'history' => 'Verora perer',
-'history_short' => 'Vurnayışê verêni',
+'history_short' => 'Verén',
 'updatedmarker' => 'cıkewtena mına peyêne ra dıme biyo rocane',
 'printableversion' => 'Asayışê çapkerdışi',
 'permalink' => 'Gıreyo jûqere',
 'print' => 'Nusten ke',
 'view' => 'Bıvin',
 'edit' => 'Bıvurnên',
-'create' => 'Vıraze',
+'create' => 'İycad ke',
 'editthispage' => 'Ena pele bıvurne',
 'create-this-page' => 'Na pele bınuse',
 'delete' => 'Bestere',
@@ -522,19 +523,19 @@ $messages = array(
 'undeletethispage' => 'Na perer mebesterne',
 'undelete_short' => '{{PLURAL:$1|Yew vurnayışi|$1 Vurnayışan}} mestere',
 'viewdeleted_short' => '{{PLURAL:$1|Yew vurnayışo esterıte|$1 Vurnayışanê esterıtan}} bımocne',
-'protect' => 'Bıpawe',
+'protect' => 'Star ke',
 'protect_change' => 'bıvurne',
 'protectthispage' => 'Ena pele bıpawe',
 'unprotect' => 'Starkerdışi bıvurne',
 'unprotectthispage' => 'Starkerdışe ena peler bıvurne',
 'newpage' => 'Pera newiye',
 'talkpage' => 'Ena pele sero werêne',
-'talkpagelinktext' => 'Mesac',
+'talkpagelinktext' => 'Vaten',
 'specialpage' => 'Pela xısusiye',
 'personaltools' => 'Hacetê şexsiy',
 'postcomment' => 'Qısımo newe',
 'articlepage' => 'Pela zerreki bıvêne',
-'talk' => 'Werênayış',
+'talk' => 'Vaten',
 'views' => 'Asayışi',
 'toolbox' => 'Haceti',
 'userpage' => 'Pela karberi bıvêne',
@@ -552,7 +553,7 @@ $messages = array(
 'viewcount' => 'Ena pele {{PLURAL:$1|rae|$1 rey}} vêniya.',
 'protectedpage' => 'Pela pawıtiye',
 'jumpto' => 'Şo:',
-'jumptonavigation' => 'karfiyê',
+'jumptonavigation' => 'Pusula',
 'jumptosearch' => 'cı geyre',
 'view-pool-error' => 'Qaytê qısuri mekerên, serverê ma enıka zêde bar gırewto xo ser.
 Hedê xo ra zêde karberi kenê ke seyrê na pele bıkerê.
@@ -564,7 +565,7 @@ $1',
 'pool-errorunknown' => 'Xeta nêzanıtiye',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
-'aboutsite' => 'Heqa {{SITENAME}}i de',
+'aboutsite' => 'Heqdé {{SITENAME}}',
 'aboutpage' => 'Project:Heqdê cı',
 'copyright' => 'Zerrekacı $1 bındı not biya.',
 'copyrightpage' => '{{ns:project}}:Heqa telifi',
@@ -573,9 +574,9 @@ $1',
 'disclaimers' => 'Redê mesuliyeti',
 'disclaimerpage' => 'Project:Reddê mesuliyetê bıngey',
 'edithelp' => 'Peştdariya vurnayışi',
-'helppage' => 'Help:Estêni',
+'helppage' => 'Help:Zerrek',
 'mainpage' => 'Pera Seri',
-'mainpage-description' => 'Pela Seri',
+'mainpage-description' => 'Pera Seri',
 'policy-url' => 'Project:Terzê hereketi',
 'portal' => 'Portalê cemaeti',
 'portal-url' => 'Project:Portalê cemaeti',
@@ -607,7 +608,7 @@ $1',
 'editold' => 'bıvurne',
 'viewsourceold' => 'çımey cı bıvinê',
 'editlink' => 'bıvurne',
-'viewsourcelink' => 'çımey bıvêne',
+'viewsourcelink' => 'Ã\87ımi bıvin',
 'editsectionhint' => 'Leteyo ke bıvuriyo: $1',
 'toc' => 'Sernameyê meselan',
 'showtoc' => 'bımocne',
@@ -631,16 +632,16 @@ $1',
 'sort-ascending' => 'Ratnayışê Zeydnayışi',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main' => 'Pele',
+'nstab-main' => 'Wesiqe',
 'nstab-user' => 'Pera Karberi',
-'nstab-media' => 'Pela Medya',
-'nstab-special' => 'Pela xısusiye',
+'nstab-media' => 'Pera Medya',
+'nstab-special' => 'Pera bağsi',
 'nstab-project' => 'Pera proci',
 'nstab-image' => 'Dosya',
 'nstab-mediawiki' => 'Mesac',
-'nstab-template' => 'Şablon',
+'nstab-template' => 'Tewre',
 'nstab-help' => 'Pela peşti',
-'nstab-category' => 'Kategoriye',
+'nstab-category' => 'Kategori',
 
 # Main script and global functions
 'nosuchaction' => 'Fealiyeto wınasi çıniyo',
@@ -653,8 +654,8 @@ Keyepelê {{SITENAME}} eşkeno xeta eşkera bıkero.',
 Seba lista pelanê xasanê vêrdeyan reca kena: [[Special:SpecialPages|{{int:specialpages}}]].',
 
 # General errors
-'error' => 'Xırab',
-'databaseerror' => 'Xeta serveri',
+'error' => 'Ğeta',
+'databaseerror' => 'Ğetay ardoği',
 'databaseerror-query' => 'Perskerdış:$1',
 'databaseerror-function' => 'Fonksiyon: $1',
 'databaseerror-error' => 'Xırab: $1',
@@ -698,7 +699,7 @@ Beno ke, tede yew ya zi zêdê işareti estê ke sernaman de nêxebetiyenê.',
 'wrong_wfQuery_params' => 'wfQuery() parametreyo şaş<br />
 Fonksiyon: $1<br />
 Perse: $2',
-'viewsource' => 'Çımey bıvêne',
+'viewsource' => 'Çımi bıvin',
 'viewsource-title' => "Cı geyrayışê $1'i bıvin",
 'actionthrottled' => 'Kerden peysnaya',
 'actionthrottledtext' => 'Riyê tedbirê anti-spami ra,  wextê do kılmek de şıma nê fealiyeti nêşkenê zaf zêde bıkerê, şıma ki no hedi viyarna ra.
@@ -717,6 +718,8 @@ $2',
 'customjsprotected' => 'Mısadeyê şıma çıniyo ke na pela Java Scripti bıvurnên, çıke na pela xısusiye eyaranê karberan muhtewa kena.',
 'mycustomcssprotected' => "Na pera CSS'i re tenya idarekari şene bıvurne",
 'mycustomjsprotected' => "Na pera JavaScript'i re tenya idarekari şene bıvurne",
+'myprivateinfoprotected' => 'Ğısusi malumatana ğo timar kerdışire icazeta şıma çıniya.',
+'mypreferencesprotected' => 'Terciha timar kerdışire icazeta şıam çıniya.',
 'ns-specialprotected' => 'Pelê xısusiy nênê vurnayış.',
 'titleprotected' => 'Eno [[User:$1|$1]] zerreyê ena peli nişeno vuriye.
 Sebeb: "\'\'$2\'\'".',
@@ -737,12 +740,12 @@ Xızmetkarê  kılitkerdışi wa bewni ro enay wa çımra ravyarno: "$3".',
 'logouttext' => "'''Şıma hesabra newke vicyay.'''
 
 Wexta ke verhafızayê cıgerayoxê şıma pak beno no benate de taye peli de hesabe şıma akerde aseno.",
-'welcomeuser' => 'Xeyr ameyê $1',
+'welcomeuser' => 'Ğeyr amey, $1!',
 'welcomecreation-msg' => 'Hesabê şıma abiyo.
 [[Special:Preferences|{{SITENAME}} vurnayişê tercihanê xo]], xo vir ra mekere.',
 'yourname' => 'Nameyê karberi:',
 'userlogin-yourname' => 'Nameyê karberi',
-'userlogin-yourname-ph' => 'Nameyê xoye karberi cıkewe',
+'userlogin-yourname-ph' => 'Namey ğoyé karberi cı kewe',
 'createacct-another-username-ph' => 'Namey karberi de fi',
 'yourpassword' => 'Parola',
 'userlogin-yourpassword' => 'Parola',
@@ -773,7 +776,7 @@ Wexta ke verhafızayê cıgerayoxê şıma pak beno no benate de taye peli de he
 'gotaccount' => "Hesabê şıma esto? '''$1'''.",
 'gotaccountlink' => 'Cı kewe',
 'userlogin-resetlink' => 'Melumatê cıkewtışi xo vira kerdê?',
-'userlogin-resetpassword-link' => 'Parolaya xo reset ke',
+'userlogin-resetpassword-link' => 'To parola ke ğo vira?',
 'helplogin-url' => 'Help:Qeydbiyayış',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Desteg be qeydbiyayış ra]]',
 'userlogin-createanother' => 'Zewbi hesab vıraz',
@@ -841,17 +844,17 @@ Seba xırabgurenayışê xızmete ra, her {{PLURAL:$1|yew saete|$1 saetan}} de r
 'mailerror' => 'Erşawıtışe xetayê e-posta: $1',
 'acct_creation_throttle_hit' => 'Yew ten IP adresê şıma xebıtnayo u kewto no wiki, roco peyin de {{PLURAL:$1|1 hesab|$1 hesab}} vıraşto.
 xulasa ney kesê ke IP adresê şıma xebıtneni hini nêeşkeni ney ra zêdêr hesab akeri.',
-'emailauthenticated' => "Adresê E-posta da şıma '''$2''' seate $3 dı kerdo araşt.",
-'emailnotauthenticated' => 'No format de nuştışê e-postayi qebul nêbeno.
-Yew formato meqbul de adresê e-posta bınuse ya zi veng bıverde.',
+'emailauthenticated' => 'E-postay şıma $2 sehat $3 dı biya araşt',
+'emailnotauthenticated' => 'Adresa e-pota da şıma qebul nébiya.
+Qandé céréna şımaré teba do nérışiyo.',
 'noemailprefs' => 'Hesab biyo a.',
 'emailconfirmlink' => 'E-postayê xo araşt kerê',
 'invalidemailaddress' => 'No format de nuştışê e-postayi qebul nêbeno. Yew formato meqbul de adresê e-posta bınuse ya zi veng bıverde.',
 'cannotchangeemail' => 'E-postay hesabi ena wiki sera nêvurneyêno.',
 'emaildisabled' => 'Na site ra e-posta nêrışêno.',
-'accountcreated' => 'Hesab vıraciya',
+'accountcreated' => 'Hesab iycat bı',
 'accountcreatedtext' => 'Qandê [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) hesabê karberi vıraziyayo.',
-'createaccount-title' => 'Qey {{SITENAME}} newe yew heab vıraştış',
+'createaccount-title' => 'Qandé  {{SITENAME}} hesabé karberi iycat kerdış',
 'createaccount-text' => 'Kesê, be e-posteyê şıma ra {{SITENAME}} ($4) de, ebe nameyê "$2" u parola "$3" ra yew hesab vıraşto.
 Şıma gani cı kewê u parola xo nıka bıvurnê.',
 'usernamehasherror' => 'Namey karberi de karakteri gani têmiyan ra mebê',
@@ -879,7 +882,7 @@ Bıne vındere u newe ra dest pê bıkere.',
 'resetpass_forbidden' => 'parolayi nêvuryayi',
 'resetpass-no-info' => 'şıma gani hesab akere u hona bıeşke bırese cı',
 'resetpass-submit-loggedin' => 'Parola bıvurne',
-'resetpass-submit-cancel' => 'Bıtexelne',
+'resetpass-submit-cancel' => 'Bıterkne',
 'resetpass-wrong-oldpass' => 'parolayo parola maqbul niyo.
 şıma ya parolaye xo vurnayo ya zi parolayo muwaqqat waşto.',
 'resetpass-temp-password' => 'parolayo muweqet:',
@@ -926,7 +929,7 @@ Parola vêrdiye: $2',
 'changeemail-none' => '(Çıno)',
 'changeemail-password' => 'Parolaya şımaya {{SITENAME}}i:',
 'changeemail-submit' => 'E-postay xo bıvurne',
-'changeemail-cancel' => 'Bıtexelne',
+'changeemail-cancel' => 'Bıterkne',
 
 # Special:ResetTokens
 'resettokens' => 'Reset fi ye',
@@ -960,8 +963,8 @@ Parola vêrdiye: $2',
 # Edit pages
 'summary' => "<font style=\"color:Blue\">'''Xulasa:'''</font>",
 'subject' => 'Mewzu/sernuşte:',
-'minoredit' => "<font style=\"color:Green\">'''Eno vurnayışo de qıckeko'''</font>",
-'watchthis' => "<font style=\"color:Green\">'''Ena pele seyr ke'''</font>",
+'minoredit' => "'''Eno vurnayışo de qıckeko'''",
+'watchthis' => "'''Ena pele seyr ke'''",
 'savearticle' => 'Pele qeyd ke',
 'preview' => 'Verqayt',
 'showpreview' => 'Verqayti bımocne',
@@ -1052,7 +1055,7 @@ Cıkewtışo tewr peyêno ke bloke biyo, cêr seba referansi belikerdeyo:',
 '''hewna qayd nebı!'''",
 'userinvalidcssjstitle' => "'''Teme:''' Mewzuyê \"\$1\" çıniyo.
 Dosyanê be namey .css u .js'i de herfa werdiye bıgurêne, mesela herında {{ns:user}}:Foo/Vector.css'i de {{ns:user}}:Foo/vector.css bınuse.",
-'updated' => '(Newenyaya)',
+'updated' => '(Rozeneya)',
 'note' => "'''Not:'''",
 'previewnote' => "'''Xo vira mekerê ke ena yew verqayta.'''
 Vurnayışê şıma hona qeyd nêbiyo!",
@@ -1118,8 +1121,8 @@ Loge peniye cor de este:",
 'recreate-moveddeleted-warn' => "'''Hişyari: no pel o ke şıma vırazeni vere cû vırazyayo.'''
 
 Diqet bıkeri no vurnayişê şıma re gerek esto:",
-'moveddeleted-notice' => 'Ma ena pele wederna.
-Qe referansi logê wedernayışi bın de mocnayiya.',
+'moveddeleted-notice' => 'Na per besternyaya.
+Qeydé  besternayışi uq hewadayışi cér dé deyayo.',
 'log-fulllog' => 'Temamê rocaneyi bıvine',
 'edit-hook-aborted' => 'Vurnayiş vınderiya.
 Yew sebeb beyan nibı.',
@@ -1188,7 +1191,7 @@ Sebebo ke terefê $3 ra diyao ''$2''",
 'nextrevision' => 'Rewizyono newên →',
 'currentrevisionlink' => 'Tewr halê rocaniye bımocne',
 'cur' => 'ferq',
-'next' => 'badên',
+'next' => 'bahdoyên',
 'last' => 'peyên',
 'page_first' => 'verên',
 'page_last' => 'peyên',
@@ -1200,7 +1203,7 @@ Lecant: '''({{int:cur}})''' = ferqê versiyonê peyêni,
 'histfirst' => 'Verênêr',
 'histlast' => 'Peyênêr',
 'historysize' => '({{PLURAL:$1|1 bayt|$1 bayti}})',
-'historyempty' => '(thal)',
+'historyempty' => '(veng)',
 
 # Revision feed
 'history-feed-title' => 'Tarixê çımraviyarnayışi',
@@ -1251,7 +1254,7 @@ Eke şıma serkari u devam bıkeri [$1 no vurnayiş şıma eşkeni bıvini].",
 'revdelete-nologid-text' => 'Şıma vıraştışê nê fonksiyoni rê ya yew cıkewtışo waşte diyar nêkerdo, ya ki çıkewtışo diyarkerde çıniyo.',
 'revdelete-no-file' => 'Dosya diyarkerdiye çıniya.',
 'revdelete-show-file-confirm' => 'Şıma eminê ke wazenê çımraviyarnayışê esterıtey na dosya "<nowiki>$1</nowiki>" $2 ra $3 de bıvênê?',
-'revdelete-show-file-submit' => 'Eya',
+'revdelete-show-file-submit' => 'E',
 'revdelete-selected' => "'''[[:$1]]: ra {{PLURAL:$2|çımraviyarnayışo weçinıte|çımraviyarnayışê weçinıtey}}'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Qeydbiyayışo weçinıte|Qeydbiyayışê weçinıtey}}:'''",
 'revdelete-text' => "'''Çımraviyarnayışê esterıtey u kerdışi hewna tarixê pele u qeydan de asenê, hema parçeyê zerrekê dinan areze nêbenê.'''
@@ -1262,15 +1265,15 @@ Eke şertê ilawekerdey ke niyê ro, idarekerê bini {{SITENAME}} de nêşenê h
 * Melumatê şexio bêmınasıb
 *: ''adresa keyey u numreyê têlefoni, numreyê siğorta sosyale, uêb.''",
 'revdelete-legend' => 'Şertanê vênayışi rone',
-'revdelete-hide-text' => 'Nuştey çımraviyarnayışi bınımne',
+'revdelete-hide-text' => 'Nuştey revizyoni',
 'revdelete-hide-image' => 'zerreyê dosyay bınımnê',
 'revdelete-hide-name' => "hedef u vaqa' bınımne",
-'revdelete-hide-comment' => 'kılmvatış memocne',
-'revdelete-hide-user' => 'Karber u IP ê ke vurnayiş kerdo bınım.',
+'revdelete-hide-comment' => 'Menıni timar ke',
+'revdelete-hide-user' => 'IP asresa/namey  vırnoği',
 'revdelete-hide-restricted' => 'Malumatan pa serkaran u karberan ra bınım.',
 'revdelete-radio-same' => '(mevurne)',
-'revdelete-radio-set' => 'Eya',
-'revdelete-radio-unset' => '',
+'revdelete-radio-set' => 'Nımnaye',
+'revdelete-radio-unset' => 'Aseno',
 'revdelete-suppress' => 'Hem ê binan ra hem zi serkaran ra malumatan bınım',
 'revdelete-unsuppress' => 'reizyonê ke tepiya anciye serbest ker',
 'revdelete-log' => 'Sebeb:',
@@ -1316,7 +1319,7 @@ Listey xırabi u bloki re pelay [[Special:BlockList|IP'yê ke bloke biyê]] bivi
 'mergehistory-header' => 'No pel, reviyonê yew peli eşkeno yewna pelo newe de piyawano.
 no vurnayişo ke şıma keni kontrol bıkere yew pelo kehen nêbo.',
 'mergehistory-box' => 'revizyonê pelanî yew bike:',
-'mergehistory-from' => 'Pela çimeyî',
+'mergehistory-from' => 'Para Çımi:',
 'mergehistory-into' => 'Pela destinasyonî',
 'mergehistory-list' => 'tarixê vurnayîşî ke eşkeno yew bi.',
 'mergehistory-merge' => '[[:$1]] qey ney revizyonê cêrini [[:$2]] şıma ekeni piyawani. Benatê wexto muwaqqet de piyayanayişê rezizyonan de tuşa radyo bıxebitne.',
@@ -1336,7 +1339,7 @@ no vurnayişo ke şıma keni kontrol bıkere yew pelo kehen nêbo.',
 'mergehistory-revisionrow' => '$1 ($2) $3 . . $4 $5 $6',
 
 # Merge log
-'mergelog' => 'Logê yew kerdişî',
+'mergelog' => 'Qeydé zew kerdışi',
 'pagemerge-logentry' => '[[$1]] u [[$2]] yew kerd (revizyonî heta $3)',
 'revertmerge' => 'Abırnê',
 'mergelogpagetext' => 'Cêr de yew liste esta ke mocnena ra, raya tewr peyêne kamci pela tarixi be a bine ra şanawa pê.',
@@ -1349,7 +1352,7 @@ no vurnayişo ke şıma keni kontrol bıkere yew pelo kehen nêbo.',
 'lineno' => 'Xeta $1i:',
 'compareselectedversions' => 'Rewizyonanê weçineyan pêver ke',
 'showhideselectedversions' => 'Revizyonanê weçinıtan bımocne/bınımne',
-'editundo' => 'peyser bia',
+'editundo' => 'peyser bıgi',
 'diff-empty' => '(Babetna niyo)',
 'diff-multi' => '({{PLURAL:$1|Yew revizyono miyanên|$1 revizyonê miyanêni}} terefê {{PLURAL:$2|yew karberi|$2 karberan}} nêmocno)',
 'diff-multi-manyusers' => '({{PLURAL:$1|jew timar kerdışo qıckeko|$1 timar kerdışo qıckeko}} timar kerdo, $2 {{PLURAL:$2|Karber|karberi}} memocne)',
@@ -1359,7 +1362,7 @@ No normal de werênayış dê pelanê besterneyan dı ena xırabin asena.
 Detayê besternayışi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} tiya dı] aseno.',
 
 # Search results
-'searchresults' => 'Neticeyê geyrayışi',
+'searchresults' => 'Neticeya geyrayışi',
 'searchresults-title' => 'Qandê "$1" neticeyê geyrayışi',
 'searchresulttext' => 'Zerrey {{SITENAME}} de heqa cıgeyrayışi de seba melumat gırewtışi, şenay qaytê [[{{MediaWiki:Helppage}}|{{int:help}}]] ke.',
 'searchsubtitle' => 'Tı semedê \'\'\'[[:$1]]\'\'\' cıgeyra. ([[Special:Prefixindex/$1|pelê ke pêro be "$1" ra dest niyaê pıra]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|pelê ke pêro be "$1"\' ra gırê xo esto]])',
@@ -1379,11 +1382,11 @@ Detayê besternayışi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}
 'searchmenu-exists' => "''Ena 'Wikipediya de ser \"[[:\$1]]\" yew pel esto'''",
 'searchmenu-new' => "''Na Wiki de pelay \"[[:\$1]]\" vıraze!'''",
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|pê eno prefix ser pelan de bigêre]]',
-'searchprofile-articles' => 'Pelê tedeestey',
-'searchprofile-project' => 'Pelê yardım u procey',
+'searchprofile-articles' => 'Perré muhteway',
+'searchprofile-project' => 'Pera Destegi uw Procan',
 'searchprofile-images' => 'Multimedya',
-'searchprofile-everything' => 'Her çi',
-'searchprofile-advanced' => 'Raverşiyaye',
+'searchprofile-everything' => 'Heme çi',
+'searchprofile-advanced' => 'Ravérden',
 'searchprofile-articles-tooltip' => '$1 de bigêre',
 'searchprofile-project-tooltip' => '$1 de bigêre',
 'searchprofile-images-tooltip' => 'Dosya cı geyr',
@@ -1397,8 +1400,8 @@ Detayê besternayışi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}
 'search-suggest' => 'To va: $1',
 'search-interwiki-caption' => 'Projey Bıray',
 'search-interwiki-default' => '$1 neticeyan:',
-'search-interwiki-more' => '(hona)',
-'search-relatedarticle' => 'Eqreba',
+'search-interwiki-more' => '(véşi)',
+'search-relatedarticle' => 'Eleqeyın',
 'mwsuggest-disable' => 'Tewsiyay AJAXi bıgê',
 'searcheverything-enable' => 'cayê nameyê hemi de bigêre',
 'searchrelated' => 'eleqeyın',
@@ -1425,7 +1428,6 @@ Pe verbendi ''all:'', vaceyê xo bıvurni ki contenti hemi cıgeyro (pelanê mı
 'mypreferences' => 'Tercihi',
 'prefs-edits' => 'Amarê vurnayışan:',
 'prefsnologin' => 'Şıma cıkewtış nêvıraşto',
-'prefsnologintext' => 'Şıma gani be <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} cikewte]</span> ke tercihanê karberi xo eyar bıkerê.',
 'changepassword' => 'Parola bıvurne',
 'prefs-skin' => 'Çerme',
 'skin-preview' => 'Verasayış',
@@ -1462,7 +1464,7 @@ Pe verbendi ''all:'', vaceyê xo bıvurni ki contenti hemi cıgeyro (pelanê mı
 'recentchangesdays-max' => 'Tewr zaf $1 {{PLURAL:$1|roc|roci}}',
 'recentchangescount' => 'Amarê vurnayışê ke hesıbyaye deye bımocneyê:',
 'prefs-help-recentchangescount' => 'Ney de vurnayışê peyêni, tarixê pelan u cıkewteni asenê.',
-'savedprefs' => 'Tecihê şıma qeyd biy.',
+'savedprefs' => 'Tecihey şıma qeyd biyey.',
 'timezonelegend' => 'Warey saete:',
 'localtime' => 'saeta mehelliye:',
 'timezoneuseserverdefault' => 'Zey karkerdışê Wiki ($1)',
@@ -1504,26 +1506,25 @@ Na game tepeya nêerziyena.',
 'yourvariant' => 'Varyante miyandê zuwani:',
 'prefs-help-variant' => 'Zerrey ena viki mocnayışi rê varyant yana ortografi re şıre tercihan dê xo.',
 'yournick' => 'imza:',
-'prefs-help-signature' => 'mesajê ke pelê werenayişi de gani pê ney "<nowiki>~~~~</nowiki>" imza bıbi.',
+'prefs-help-signature' => 'Peran de vatenana de vatışi"<nowiki>~~~~</nowiki>" ya do imza bé, no bahdo beno çerğé imza u wahdey zemani',
 'badsig' => 'Îmzayê tu raşt niyo.
 Etiketê HTMLî kontrol bike.',
 'badsiglength' => 'İmzayê şıma zaf dergo.
 $1 gani bınê no {{PLURAL:$1|karakter|karakter}} de bıbo.',
 'yourgender' => 'Çıçiy cı esto?',
 'gender-unknown' => 'Ez detay nivana',
-'gender-male' => 'Ey pera viki vurni',
-'gender-female' => 'Ay pera wiki vurni',
-'prefs-help-gender' => 'Eyar kerdış keyfiyo.
- sofware qey adersê cinsiyet şuxulneno, no malumat umumiyo.Şaryayış malumat wazem.',
+'gender-male' => 'Perané wiki camérd deyne ezo vırnena',
+'gender-female' => 'Perané wiki cıni deyne eza vırnena',
+'prefs-help-gender' => 'Na tercih keyfiya.
+Na nustenek ercana qısan de qandé grameri karneyéna, na malumater herkes şeno bıvino .',
 'email' => 'E-posta',
 'prefs-help-realname' => 'Nameyo raşt waştena şıma rê mendo.
 Eka tu wazene ke nameyo raşt xo bide, ma nameyo raşt ti iştirakanê ti de mocnenê.',
 'prefs-help-email' => 'Dayışê adresa e-postey keyfiyo, labelê seba eyarê parola lazıma, wexto ke şıma naye xo vira kerê.',
-'prefs-help-email-others' => 'Şıma şenê weçinê ke ê bini be yew gırey pela şımaya karberi ya zi pela werênayışi sera şıma de ebe e-poste irtıbat kewê.
-Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena.',
+'prefs-help-email-others' => 'Pera ğoya kerderi de zew link vırazése karberé bini şımaré şenê mesac bırşé. Lakin e-posta adresa şıma héç cayé de niasena.',
 'prefs-help-email-required' => 'E-mail adrese mecburiya.',
-'prefs-info' => 'Melumato bıngeh',
-'prefs-i18n' => 'Beynelmılelkerdış',
+'prefs-info' => 'Melumata şıma',
+'prefs-i18n' => 'Şar şélıg kerdış',
 'prefs-signature' => 'İmza',
 'prefs-dateformat' => 'Formatê tarixi',
 'prefs-timeoffset' => 'Wext offset',
@@ -1539,6 +1540,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'prefs-displaywatchlist' => 'Weçinayışê mocnayışi',
 'prefs-tokenwatchlist' => 'Morge',
 'prefs-diffs' => 'Ferqi',
+'prefs-help-prefershttps' => 'Na tercih, fına dekewten dı bena aktiv.',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'e-posta adresi raştayo',
@@ -1570,7 +1572,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 # Groups
 'group' => 'Grube:',
 'group-user' => 'Karberi',
-'group-autoconfirmed' => 'Karberê ke xob xo biyê araşt',
+'group-autoconfirmed' => 'Karberê ke otomatikmen biyê araşt',
 'group-bot' => 'Boti',
 'group-sysop' => 'İdarekari',
 'group-bureaucrat' => 'Burokrati',
@@ -1578,21 +1580,21 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'group-all' => '(pêro)',
 
 'group-user-member' => '{{GENDER:$1|karber}}',
-'group-autoconfirmed-member' => '{{GENDER:$1|Karberê ke xob xo biyê araşt}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|Karberê ke otomatikmen biyê araşt}}',
 'group-bot-member' => '{{GENDER:$1|bot}}',
 'group-sysop-member' => '{{GENDER:$1|İdarekar}}',
 'group-bureaucrat-member' => '{{GENDER:$1|buroqrat}}',
 'group-suppress-member' => '{{GENDER:$1|Temaşekar}}',
 
 'grouppage-user' => '{{ns:project}}:Karberi',
-'grouppage-autoconfirmed' => '{{ns:project}}:Karberê ke xob xo biyê araşt',
+'grouppage-autoconfirmed' => '{{ns:project}}:Karberê ke otomatikmen biyê araşt',
 'grouppage-bot' => '{{ns:project}}:Boti',
 'grouppage-sysop' => '{{ns:project}}:İdarekeri',
 'grouppage-bureaucrat' => '{{ns:project}}:Burokrati',
 'grouppage-suppress' => '{{ns:project}}:Qontrol',
 
 # Rights
-'right-read' => 'Pelan bıwane',
+'right-read' => 'Pera bıwané',
 'right-edit' => 'Pele bıvurne',
 'right-createpage' => 'Pele vıraze (pelê ke ê werênayışi niyê)',
 'right-createtalk' => 'Pela werênayışi vıraze',
@@ -1686,7 +1688,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'action-browsearchive' => 'pelanê esterıteyan bıgeyre',
 'action-undelete' => 'ena pele reyna biyere',
 'action-suppressrevision' => 'revizyone ki nimnaye biye reyna bivîne u restore bike',
-'action-suppressionlog' => 'ena logê xasî bivîne',
+'action-suppressionlog' => 'Ena bağse qeydi bıvin',
 'action-block' => 'enê karberi vurnayışi ra bıreyne',
 'action-protect' => 'seviyeyê pawitişî se ena pele bivurne',
 'action-rollback' => 'Lez/herbi vurnayışanê karberê peyêni tekrar bıke, oyo ke yew be yew pelê sero gureyao',
@@ -1718,16 +1720,16 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'recentchanges-label-minor' => 'Eno yew vurnayışo qıckeko',
 'recentchanges-label-bot' => 'Yew boti xo het ra no vurnayış vıraşto',
 'recentchanges-label-unpatrolled' => 'Eno vurnayış hewna dewriya nêbiyo',
-'rcnote' => "Bıni dı {{PLURAL:$1|'''1''' vurnayış|peyni de '''$1''' vurnayışi estê}} {{PLURAL:$2|roc|'''$2''' roci}}, hetana $5, $4.",
+'rcnote' => "Bıni dı  {{PLURAL:$2|roc|'''$2''' rocan}}  ra {{PLURAL:$1|'''1''' vurnayış|'''$1''' vurnayışi}} éyé cér de yé , $5 ra hetana $4.",
 'rcnotefrom' => "Cêr de '''$2''' ra nata vurnayışiyê asenê (tewr vêşi <b> '''$1'''</b> asenê).",
-'rclistfrom' => '$1 ra vurnayışanê neweyan bımocne',
+'rclistfrom' => '$1 ra tepya vırnayışané newan bıasne',
 'rcshowhideminor' => 'Vurnayışanê werdiyan $1',
 'rcshowhidebots' => 'Botan $1',
 'rcshowhideliu' => 'Karberanê qeydınan $1',
 'rcshowhideanons' => 'Karberê bênamey $1',
 'rcshowhidepatr' => '$1 vurnayışê ke dewriya geyrayê',
 'rcshowhidemine' => 'Vurnayışanê mı $1',
-'rclinks' => 'Peyniya $2 rocan de $1 vurnayışan bımocne <br />$3',
+'rclinks' => '$2 rocan peynira $1 vurnayışan bıasne <br />$3',
 'diff' => 'ferq',
 'hist' => 'verên',
 'hide' => 'Bınımne',
@@ -2132,7 +2134,7 @@ listeya ke ha ver a têna na {{PLURAL:$1|dosyaya ewwili|dosyaya $1 ewwili}} mocn
 'statistics-pages' => 'Peli',
 'statistics-pages-desc' => 'Pelanê hemî ke wîkî de estê, pelanê mineqeşeyî, redireksiyon ucb... dehil o.',
 'statistics-files' => 'Dosyayê bar biye',
-'statistics-edits' => 'Amarê vurnayîşî ke wextê {{SITENAME}} ronayîşî ra',
+'statistics-edits' => '{{SITENAME}} saz kerdış ra hetana newke amora vırnayışan',
 'statistics-edits-average' => 'Ser her pele de amarê vurnayîşîyê averageyî',
 'statistics-views-total' => 'Yekunî bivîne',
 'statistics-views-total-desc' => 'Peleyê ke çınyê yana xısusiyê e nina zerre nêkerdê',
@@ -2170,7 +2172,7 @@ gıreyê her satıri de gıreyi; raş motışê yewın u dıyıni esto.
 
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|bayt|bayti}}',
-'ncategories' => '$1 {{PLURAL:$1|Kategoriye|Kategoriy}}',
+'ncategories' => '$1 {{PLURAL:$1|Kategori|Kategoriy}}',
 'ninterwikis' => '$1 {{PLURAL:$1|interwiki|interwikiy}}',
 'nlinks' => '$1 {{PLURAL:$1|link|linkî}}',
 'nmembers' => '$1 {{PLURAL:$1|eza|ezayan}}',
@@ -2225,8 +2227,8 @@ gıreyê her satıri de gıreyi; raş motışê yewın u dıyıni esto.
 'newpages' => 'Pelê newey',
 'newpages-username' => 'Nameyê karberi:',
 'ancientpages' => 'Wesiqeyê ke vurnayışê ciyê peyeni tewr kehani',
-'move' => 'Berdış',
-'movethispage' => 'Ena pele bere',
+'move' => 'Beré',
+'movethispage' => 'Na perer beré',
 'unusedimagestext' => 'Enê dosyey estê, feqet zerrey yew pele de wedardey niyê.
 Xo vira mekerê ke, sıteyê webiê bini şenê direkt ebe URLi yew dosya ra gırê bê, u wına şenê verba gurênayışo feal de tiya hewna lista bê.',
 'unusedcategoriestext' => 'kategoriyê cêrıni bıbo zi çı nêşuxulyena.',
@@ -2298,7 +2300,7 @@ hem zi bıewnê [[Special:WantedCategories|kategori yê ke waziyeni]].',
 # Special:LinkSearch
 'linksearch' => 'Gıreyê teberi cı geyrê',
 'linksearch-pat' => 'bıgêr motif:',
-'linksearch-ns' => 'Cayê namey:',
+'linksearch-ns' => 'Heruna naman:',
 'linksearch-ok' => 'Cı geyre',
 'linksearch-text' => 'Jokeri ê zey "*.wikipedia.org"i benê ke bıgureniyê.
 Tewr senık yew sewiya serêna cayê tesiri lazıma, mesela "*.org".<br />
@@ -2582,8 +2584,8 @@ Tı eşkeno seviyeye kılit kerdışi bıvurno, feqat tı nıeşken "cascading p
 
 # Restrictions (nouns)
 'restriction-edit' => 'Bıvurne',
-'restriction-move' => 'Berê',
-'restriction-create' => 'Vıraze',
+'restriction-move' => 'Beré',
+'restriction-create' => 'İycad ke',
 'restriction-upload' => 'Bar ke',
 
 # Restriction levels
@@ -2644,7 +2646,7 @@ $1',
 'undelete-revisionrow' => '$1 $2 ($3) $4 . . $5 $6 $7',
 
 # Namespace form on various pages
-'namespace' => 'Cayê namey:',
+'namespace' => 'Heruna naman:',
 'invert' => 'Weçinıtışo peyserki',
 'tooltip-invert' => 'nameyo ke nışan biyo (u nameyo elekeyın zi nışanyyayo se) vurnayışan  zerrekan nımtışi re ena dore tesdiqi nışan kerê',
 'namespace_association' => 'Cayê nameyanê elaqedaran',
@@ -2903,14 +2905,14 @@ Yewna name bınus.',
 '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ê berdışi',
+'movelogpage' => 'Qeydé berdışi',
 'movelogpagetext' => 'nameyê liste ya ke cêr de yo, pelê vuriyayeyani mocneno',
 '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.',
 'movenosubpage' => 'pelê bınıni yê no peli çino.',
 'movereason' => 'Sebeb:',
 'revertmove' => 'peyser bia',
-'delete_and_move' => 'Bestere u bere',
+'delete_and_move' => 'Besterné uw beré',
 'delete_and_move_text' => '==gani hewn a bıbıo/bıesteriyo==
 
 " no [[:$1]]" name de yew pel ca ra esto. şıma wazeni pê hewn a kerdışê ey peli vurnayişê nameyi bıkeri?',
@@ -2965,7 +2967,7 @@ ma vaci: qey pelê "[[{{MediaWiki:Mainpage}}]]i " [[{{#Special:Export}}/{{MediaW
 'allmessagesdefault' => 'Metnê mesacê hesabiyayey',
 'allmessagescurrent' => 'Nuşteyê mesacê rocaney',
 'allmessagestext' => 'na liste, listeya mesajê cayê nameyê wikimedya yo.
-eke şıma qayili paşt bıdi mahalli kerdışê wikimedyayi, kerem kerê pelê [//www.mediawiki.org/wiki/Localisation mahalli kerdışê wikimedyayi] u [//translatewiki.net translatewiki.net] ziyaret bıkerê.',
+eke şıma qayili paşt bıdi mahalli kerdışê wikimedyayi, kerem kerê pelê [https://www.mediawiki.org/wiki/Localisation mahalli kerdışê wikimedyayi] u [//translatewiki.net translatewiki.net] ziyaret bıkerê.',
 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' qefelnaye yo u ey ra '''{{ns:special}}:Allmessages''' karkerdışi re akerde niyo.",
 'allmessages-filter-legend' => 'Avrêc',
 'allmessages-filter' => 'goreyê xususi kerdışi re filtre bıker',
@@ -3165,7 +3167,7 @@ Ney '''Mefiyé de'''!",
 'pageinfo-title' => 'Heq tê "$1"\'i',
 'pageinfo-not-current' => 'Qısur de mevêne, rewizyonanê verênan rê nê melumatan dayış mumkın niyo',
 'pageinfo-header-basic' => 'Seron zanayış',
-'pageinfo-header-edits' => 'Vurnayışê verêni',
+'pageinfo-header-edits' => 'Veréna timar kerdışi',
 'pageinfo-header-restrictions' => 'Sıtarkerdışê pele',
 'pageinfo-header-properties' => 'Xısusiyetê pele',
 'pageinfo-display-title' => 'Sernuştey bımocne',
@@ -3173,6 +3175,7 @@ Ney '''Mefiyé de'''!",
 'pageinfo-length' => 'Derdeya pela (bayti heta)',
 'pageinfo-article-id' => 'Kamiya pele',
 'pageinfo-language' => 'Zıwanê zerreyê pele',
+'pageinfo-content-model' => 'Modela zerreka perer',
 'pageinfo-robot-policy' => 'Weziyetê motor de cıgeyrayışi',
 'pageinfo-robot-index' => 'İndeksbiyayen',
 'pageinfo-robot-noindex' => 'İndeksnêbiyayen',
@@ -3228,9 +3231,9 @@ Ney '''Mefiyé de'''!",
 'markedaspatrollederrornotify' => 'Nışan kerdışê dewriyey nêbı',
 
 # Patrol log
-'patrol-log-page' => 'Logê devriye',
+'patrol-log-page' => 'Qeydé çımsernayoğan',
 'patrol-log-header' => 'Ena listeyê logi revizyonê devriyeyi mocneno.',
-'log-show-hide-patrol' => '$1 logê devriye',
+'log-show-hide-patrol' => 'Qeydé Çımsernayoğan $1',
 
 # Image deletion
 'deletedrevision' => 'Veriyono kihan $1 wederna',
@@ -3261,7 +3264,7 @@ Gurênayışê nae de, beno ke sistemê şıma zerar bıvêno.",
 'svg-long-desc' => 'Dosyay SVG, zek vanê $1 × $2 piksela, ebatê dosya: $3',
 'svg-long-desc-animated' => 'SVG dosya, nominalin $1 × $2 piksela, ebatê dosya: $3',
 'svg-long-error' => "Nêmeqbul dosyaya SVG'i: $1",
-'show-big-image' => 'Tam agoznayen',
+'show-big-image' => 'Oricinal dosya',
 'show-big-image-preview' => "Verqayd dergiya: $1'i.",
 'show-big-image-other' => 'Zewmi{{PLURAL:$2|Vılêşnayış|Vılêşnayışê}}: $1.',
 'show-big-image-size' => '$1 × $2 piksel',
@@ -3283,7 +3286,7 @@ Gurênayışê nae de, beno ke sistemê şıma zerar bıvêno.",
 'noimages' => 'Çik çini yo.',
 'ilsubmit' => 'Cı geyre',
 'bydate' => 'goreyê zemani',
-'sp-newimages-showfrom' => 'Dosyayê newi ke $2, $1 ra dest pe keni bimocne',
+'sp-newimages-showfrom' => '$1, sehat $2 ra tepya dosyayané newan bıasné',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
 'video-dims' => '$1, $2 × $3',
@@ -3543,7 +3546,7 @@ Eg ena dosya, kondisyonê orcinali ra bıvuriya, belki detayanê hemi nıeseno.'
 'exif-writer' => 'Nuştekar',
 'exif-languagecode' => 'Zıwan',
 'exif-iimversion' => 'Verqaydê IIM',
-'exif-iimcategory' => 'Kategoriye',
+'exif-iimcategory' => 'Kategori',
 'exif-iimsupplementalcategory' => 'Oleyê Kategoriyan',
 'exif-datetimeexpires' => 'No peyra mekarênê',
 'exif-datetimereleased' => 'Bıroşe',
@@ -3830,7 +3833,7 @@ $8',
 
 # External editor support
 'edit-externally' => 'Ena dosya bıvurne pe yew programê harici',
-'edit-externally-help' => '(Qe informasyonê zafyer ena bevinin [//www.mediawiki.org/wiki/Manual:External_editors setup instructions])',
+'edit-externally-help' => '(Qe informasyonê zafyer ena bevinin [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'pêro',
@@ -3939,6 +3942,7 @@ Ma rica keno tesdiq bike ke ti raştî wazeno eno pel bivirazo.",
 'percent' => '$1%',
 'parentheses' => '($1)',
 'brackets' => '[$1]',
+'quotation-marks' => '"$1".',
 
 # Multipage image navigation
 'imgmultipageprev' => '← peleyê verin',
@@ -4108,7 +4112,7 @@ Ti hem zi eşkeno [[Special:EditWatchlist|use the standard editor]].',
 'version-version' => '(Versiyon $1)',
 'version-svn-revision' => '(r$2)',
 'version-license' => 'Lisans',
-'version-poweredby-credits' => "Ena wiki, dezginda '''[//www.mediawiki.org/ MediaWiki]''' ya piya vıraziyaya, heqê telifi © 2001-$1 $2.",
+'version-poweredby-credits' => "Ena wiki, dezginda '''[https://www.mediawiki.org/ MediaWiki]''' ya piya vıraziyaya, heqê telifi © 2001-$1 $2.",
 'version-poweredby-others' => 'Zewmi',
 'version-poweredby-translators' => "Açernere translatewiki.net'i",
 'version-credits-summary' => 'Ma qayılime ke [[Special:Version|MediaWiki]] rê ke kami destek dayo wa mayê vanime inan bışınasne.',
@@ -4132,7 +4136,7 @@ enê programiya piya [{{SERVER}}{{SCRIPTPATH}}/COPYING jew kopyay lisans dê GNU
 'redirect-submit' => 'Şo',
 'redirect-lookup' => 'Bewni',
 'redirect-value' => 'Erc:',
-'redirect-user' => "ID'ê Karberi",
+'redirect-user' => 'Kamiya Karberi:',
 'redirect-revision' => 'Rewizyona pela',
 'redirect-file' => 'Namey dosya',
 'redirect-not-exists' => 'Erc nêvineyê',
@@ -4150,8 +4154,7 @@ enê programiya piya [{{SERVER}}{{SCRIPTPATH}}/COPYING jew kopyay lisans dê GNU
 
 # Special:SpecialPages
 'specialpages' => 'Pelê xısusiy',
-'specialpages-note' => '----
-* Xısusi pelaya normal
+'specialpages-note' => '* Xısusi pelaya normal
 * <span class="mw-specialpagerestricted">Xısusi peleyê keı rê ray nê deyaya.</span>
 * <strong class="mw-specialpagerestricted">Peleya xısusiya ke grota verhefıza.</strong>',
 'specialpages-group-maintenance' => 'Raporê tepıştışi',
index d53ebe1..625948d 100644 (file)
@@ -1187,7 +1187,6 @@ Drobnostki móžoš w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'mypreferences' => 'Nastajenja',
 'prefs-edits' => 'Licba wobźěłanjow:',
 'prefsnologin' => 'Njejsy pśizjawjony',
-'prefsnologintext' => 'Musyš se <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} pśizjawiś]</span>, aby mógał swóje nastajenja změniś.',
 'changepassword' => 'Šćitne gronidło změniś',
 'prefs-skin' => 'Šat',
 'skin-preview' => 'Pśeglěd',
@@ -2655,7 +2654,7 @@ W slědnem padźe móžoš teke wótkaz wužywaś, na pś. [[{{#Special:Export}}
 'allmessagesdefault' => 'Standardny tekst',
 'allmessagescurrent' => 'Aktualny tekst',
 'allmessagestext' => 'How jo lisćina systemowych powěsćow w mjenowem rumje MediaWiki.
-Pšosym wobglědaj [//www.mediawiki.org/wiki/Localisation lokalizaciju MediaWiki] a [//translatewiki.net translatewiki.net], jolic coš k lokalizaciji MediaWiki pśinosowaś.',
+Pšosym wobglědaj [https://www.mediawiki.org/wiki/Localisation lokalizaciju MediaWiki] a [//translatewiki.net translatewiki.net], jolic coš k lokalizaciji MediaWiki pśinosowaś.',
 'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' njejo tuchylu móžno, dokulaž jo datowa banka offline.",
 'allmessages-filter-legend' => 'Filter',
 'allmessages-filter' => 'Pó pśiměrjeńskem stawje filtrěrowaś:',
@@ -3400,7 +3399,7 @@ Slědujuce wótkaze w tej samej smužce se za wuwześa naglědaju, w kótarychž
 
 # External editor support
 'edit-externally' => 'Dataje z eksternym programom wobźěłaś',
-'edit-externally-help' => '(Za dalšne informacije glědaj [//www.mediawiki.org/wiki/Manual:External_editors instalaciske instrukcije]).',
+'edit-externally-help' => '(Za dalšne informacije glědaj [https://www.mediawiki.org/wiki/Manual:External_editors instalaciske instrukcije]).',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'wšykne',
@@ -3584,7 +3583,7 @@ Móžoš teke [[Special:EditWatchlist|standardny wobźěłowański bok wužywaś
 'version-hook-subscribedby' => 'Aboněrowany wót',
 'version-version' => '(Wersija $1)',
 'version-license' => 'Licenca',
-'version-poweredby-credits' => "Toś ten wiki spěchujo se wót '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Toś ten wiki spěchujo se wót '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'druge',
 'version-credits-summary' => 'Źěkujomy se slědujucym wósobam za jich pśinoski k [[Special:Version|MediaWiki]]',
 'version-license-info' => 'MediaWiki jo licha softwara: móžoš ju pód wuměnjenjami licence GNU General Public License, wózjawjeneje wót załožby Free Software Foundation, rozdźěliś a/abo změniś: pak pód wersiju 2 licence pak pód někakeju pózdźejšeju wersiju.
@@ -3612,8 +3611,7 @@ Ty by dejał [{{SERVER}}{{SCRIPTPATH}}/COPYING kopiju licence GNU General Public
 
 # Special:SpecialPages
 'specialpages' => 'Specialne boki',
-'specialpages-note' => '----
-* Normalne specialne boki
+'specialpages-note' => '* Normalne specialne boki
 * <span class="mw-specialpagerestricted">Specialne boki z wobgranicowanym pśistupom.</span>',
 'specialpages-group-maintenance' => 'Wótwardowańske lisćiny',
 'specialpages-group-other' => 'Druge specialne boki',
index 2ec192b..4cffee6 100644 (file)
@@ -1477,7 +1477,7 @@ Iri suai sinandad do poinlisok.
 
 # External editor support
 'edit-externally' => 'Idito pail diti momoguno do kangkaraja pongi-ngidit poinlabus',
-'edit-externally-help' => '(Intaai [//www.mediawiki.org/wiki/Manual:External_editors karalan-ralanon papasang] do lobi gumu kointalangan)',
+'edit-externally-help' => '(Intaai [https://www.mediawiki.org/wiki/Manual:External_editors karalan-ralanon papasang] do lobi gumu kointalangan)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'oinsanan',
index d17d81a..74a74fb 100644 (file)
@@ -37,6 +37,7 @@
  * @author Protnet
  * @author Reedy
  * @author Remember the dot
+ * @author Sfyrakis
  * @author Sinopeus
  * @author Tifa93
  * @author Urhixidur
@@ -812,7 +813,7 @@ $2',
 'gotaccount' => 'Έχετε ήδη λογαριασμό; $1.',
 'gotaccountlink' => 'Είσοδος',
 'userlogin-resetlink' => 'Ξεχάσατε τα στοιχεία εισόδου σας;',
-'userlogin-resetpassword-link' => 'Î\88κδοÏ\83η Î½Î­Î¿Ï\85 ÎºÏ\89δικοÏ\8d πρόσβασης',
+'userlogin-resetpassword-link' => 'Î\9eεÏ\87λαÏ\83αÏ\84ε Ï\84ον ÎºÏ\89δικÏ\8c πρόσβασης',
 'helplogin-url' => 'Help:Σύνδεση',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Βοήθεια για τη σύνδεσή σας]]',
 'createacct-join' => 'Εισάγετε τα στοιχεία σας παρακάτω.',
@@ -1309,8 +1310,8 @@ Mπορείτε να δείτε αυτή την διαφορά. Λεπτομέρ
 'revdelete-hide-user' => 'Κρύψε όνομα χρήστη/IP συντάκτη',
 'revdelete-hide-restricted' => 'Απόκρυψη δεδομένων από διαχειριστές καθώς και από άλλους',
 'revdelete-radio-same' => '(μην αλλάξετε)',
-'revdelete-radio-set' => 'Î\9dαι',
-'revdelete-radio-unset' => 'Î\8cÏ\87ι',
+'revdelete-radio-set' => 'Î\95μÏ\86ανέÏ\82',
+'revdelete-radio-unset' => 'Î\9aÏ\81Ï\85Ï\86Ï\8c',
 'revdelete-suppress' => 'Απόκρυψε δεδομένα από διαχειριστές όπως και από άλλους',
 'revdelete-unsuppress' => 'Αφαίρεσε περιορισμούς στις αποκατεστημένες αναθεωρήσεις',
 'revdelete-log' => 'Αιτία:',
@@ -1464,7 +1465,6 @@ $1",
 'mypreferences' => 'Προτιμήσεις',
 'prefs-edits' => 'Αριθμός επεξεργασιών:',
 'prefsnologin' => 'Δεν έχετε συνδεθεί.',
-'prefsnologintext' => 'Πρέπει να έχετε <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} συνδεθεί]</span> για να καθορίσετε τις προτιμήσεις χρήστη.',
 'changepassword' => 'Αλλαγή κωδικού',
 'prefs-skin' => 'Οπτική οργάνωση (skin)',
 'skin-preview' => 'Προεπισκόπηση',
@@ -2089,7 +2089,7 @@ $1',
 'uploadnewversion-linktext' => 'Φορτώστε μια νέα έκδοση αυτού του αρχείου',
 'shared-repo-from' => 'από το $1',
 'shared-repo' => 'ένα κοινό εναποθετήριο',
-'shared-repo-name-wikimediacommons' => 'Κοινά Wikimedia',
+'shared-repo-name-wikimediacommons' => 'Wikimedia Commons',
 'upload-disallowed-here' => 'Δεν μπορείτε να αντικαταστήσετε αυτό το αρχείο.',
 
 # File reversion
@@ -2980,7 +2980,7 @@ $1',
 'allmessagesdefault' => 'Προεπιλεγμένο κείμενο μηνύματος',
 'allmessagescurrent' => 'Παρόν κείμενο',
 'allmessagestext' => 'Αυτή είναι μια λίστα με όλα τα μηνύματα συστήματος που βρίσκονται στην περιοχή MediaWiki.
-Παρακαλούμε επισκεφθείτε τα [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] και [//translatewiki.net translatewiki.net] αν επιθυμείτε να συνεισφέρετε σε μια γενική μετάφραση του MediaWiki.',
+Παρακαλούμε επισκεφθείτε τα [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] και [//translatewiki.net translatewiki.net] αν επιθυμείτε να συνεισφέρετε σε μια γενική μετάφραση του MediaWiki.',
 'allmessagesnotsupportedDB' => "Αυτή η σελίδα δεν υποστηρίζεται επειδή το ''wgUseDatabaseMessages'' είναι απενεργοποιημένο.",
 'allmessages-filter-legend' => 'Φίλτρο',
 'allmessages-filter' => 'Ταξινόμηση βάσει της δήλωσης προσαρμογής:',
@@ -3746,7 +3746,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'Επεξεργαστείτε αυτό το αρχείο χρησιμοποιώντας κάποια εξωτερική εφαρμογή',
-'edit-externally-help' => '(Βλ. [//www.mediawiki.org/wiki/Manual:External_editors οδηγίες εγκατάστασης] για περισσότερες πληροφορίες)',
+'edit-externally-help' => '(Βλ. [https://www.mediawiki.org/wiki/Manual:External_editors οδηγίες εγκατάστασης] για περισσότερες πληροφορίες)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'όλες',
@@ -3933,7 +3933,7 @@ $5
 'version-hook-subscribedby' => 'Υπογεγραμμένο από',
 'version-version' => '(Έκδοση $1)',
 'version-license' => 'Άδεια χρήσης',
-'version-poweredby-credits' => "Αυτό το wiki λειτουργεί με το λογισμικό '''[//www.mediawiki.org/ MediaWiki]''', πνευματική ιδιοκτησία © 2001-$1 $2.",
+'version-poweredby-credits' => "Αυτό το wiki λειτουργεί με το λογισμικό '''[https://www.mediawiki.org/ MediaWiki]''', πνευματική ιδιοκτησία © 2001-$1 $2.",
 'version-poweredby-others' => 'άλλοι',
 'version-poweredby-translators' => 'translatewiki.net μεταφραστές',
 'version-credits-summary' => 'Θα θέλαμε να αναγνωρίσουμε τη συμβολή των παρακάτω προσώπων στο [[Special:Version|MediaWiki]].',
index 30a2487..ea1f20c 100644 (file)
@@ -406,6 +406,7 @@ $specialPageAliases = array(
        'DoubleRedirects'           => array( 'DoubleRedirects' ),
        'EditWatchlist'             => array( 'EditWatchlist' ),
        'Emailuser'                 => array( 'EmailUser' ),
+       'ExpandTemplates'           => array( 'ExpandTemplates', 'Expantemplates' ),
        'Export'                    => array( 'Export' ),
        'Fewestrevisions'           => array( 'FewestRevisions' ),
        'FileDuplicateSearch'       => array( 'FileDuplicateSearch' ),
@@ -556,7 +557,7 @@ $preloadedMessages = array(
        'editsectionhint',
        'help',
        'helppage',
-       'tooltip-iwiki',
+       'interlanguage-link-title',
        'jumpto',
        'jumptonavigation',
        'jumptosearch',
@@ -915,7 +916,7 @@ $1',
 'disclaimers'          => 'Disclaimers',
 'disclaimerpage'       => 'Project:General disclaimer',
 'edithelp'             => 'Editing help',
-'edithelppage'         => '//www.mediawiki.org/wiki/Special:MyLanguage/Help:Editing_pages', # do not translate or duplicate this message to other languages
+'edithelppage'         => 'https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Editing_pages', # do not translate or duplicate this message to other languages
 'helppage'             => 'Help:Contents',
 'mainpage'             => 'Main Page',
 'mainpage-description' => 'Main page',
@@ -939,12 +940,10 @@ See [[Special:Version|version page]].',
 'backlinksubtitle'             => '← $1', # only translate this message to other languages if you have to change it
 'retrievedfrom'                => 'Retrieved from "$1"',
 'youhavenewmessages'           => 'You have $1 ($2).',
-'newmessageslink'              => 'new messages',
-'newmessagesdifflink'          => 'last change',
 'youhavenewmessagesfromusers'  => 'You have $1 from {{PLURAL:$3|another user|$3 users}} ($2).',
 'youhavenewmessagesmanyusers'  => 'You have $1 from many users ($2).',
-'newmessageslinkplural'        => '{{PLURAL:$1|a new message|new messages}}',
-'newmessagesdifflinkplural'    => 'last {{PLURAL:$1|change|changes}}',
+'newmessageslinkplural'        => '{{PLURAL:$1|a new message|999=new messages}}',
+'newmessagesdifflinkplural'    => 'last {{PLURAL:$1|change|999=changes}}',
 'youhavenewmessagesmulti'      => 'You have new messages on $1',
 'newtalkseparator'             => ',&#32;', # do not translate or duplicate this message to other languages
 'editsection'                  => 'edit',
@@ -976,7 +975,8 @@ See [[Special:Version|version page]].',
 'red-link-title'               => '$1 (page does not exist)',
 'sort-descending'              => 'Sort descending',
 'sort-ascending'               => 'Sort ascending',
-'tooltip-iwiki'                => '$1 – $2', # only translate this message to other languages if you have to change it
+'interlanguage-link-title'     => '$1 – $2', # only translate this message to other languages if you have to change it
+'interlanguage-link-title-langonly' => '$1', # do not translate or duplicate this message to other languages
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main'      => 'Page',
@@ -1099,7 +1099,7 @@ The administrator who locked it offered this explanation: "$3".',
 Note that some pages may continue to be displayed as if you were still logged in, until you clear your browser cache.",
 'welcomeuser'                     => 'Welcome, $1!',
 'welcomecreation-msg'             => 'Your account has been created.
-Do not forget to change your [[Special:Preferences|{{SITENAME}} preferences]].',
+You can change your {{SITENAME}} [[Special:Preferences|preferences]] if you wish.',
 'yourname'                        => 'Username:',
 'userlogin-yourname'              => 'Username',
 'userlogin-yourname-ph'           => 'Enter your username',
@@ -1709,7 +1709,7 @@ Other administrators on {{SITENAME}} will still be able to access the hidden con
 'revdelete-suppress-text'     => "Suppression should '''only''' be used for the following cases:
 * Potentially libelous information
 * Inappropriate personal information
-*: ''home addresses and telephone numbers, social security numbers, etc.''",
+*: ''home addresses and telephone numbers, national identification numbers, etc.''",
 'revdelete-legend'            => 'Set visibility restrictions',
 'revdelete-hide-text'         => 'Revision text',
 'revdelete-hide-image'        => 'Hide file content',
@@ -1718,8 +1718,8 @@ Other administrators on {{SITENAME}} will still be able to access the hidden con
 'revdelete-hide-user'         => "Editor's username/IP address",
 'revdelete-hide-restricted'   => 'Suppress data from administrators as well as others',
 'revdelete-radio-same'        => '(do not change)',
-'revdelete-radio-set'         => 'Visible',
-'revdelete-radio-unset'       => 'Hidden',
+'revdelete-radio-set'         => 'Hidden',
+'revdelete-radio-unset'       => 'Visible',
 'revdelete-suppress'          => 'Suppress data from administrators as well as others',
 'revdelete-unsuppress'        => 'Remove restrictions on restored revisions',
 'revdelete-log'               => 'Reason:',
@@ -1862,7 +1862,7 @@ Details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENA
 'showingresultsnum'                => "Showing below {{PLURAL:$3|'''1''' result|'''$3''' results}} starting with #'''$2'''.",
 'showingresultsheader'             => "{{PLURAL:$5|Result '''$1''' of '''$3'''|Results '''$1 - $2''' of '''$3'''}} for '''$4'''",
 'nonefound'                        => "'''Note:''' Only some namespaces are searched by default.
-Try prefixing your query with ''all:'' to search all content (including talk pages, templates, etc), or use the desired namespace as prefix.",
+Try prefixing your query with ''all:'' to search all content (including talk pages, templates, etc.), or use the desired namespace as prefix.",
 'search-nonefound'                 => 'There were no results matching the query.',
 'powersearch'                      => 'Advanced search',
 'powersearch-legend'               => 'Advanced search',
@@ -3017,9 +3017,9 @@ Contact the editor:
 mail: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-There will be no other notifications in case of further activity unless you visit this page. You could also reset the notification flags for all your watched pages on your watchlist.
+There will be no other notifications in case of further activity unless you visit this page while logged in. You could also reset the notification flags for all your watched pages on your watchlist.
 
-                        Your friendly {{SITENAME}} notification system
+Your friendly {{SITENAME}} notification system
 
 --
 To change your email notification settings, visit
@@ -3566,7 +3566,7 @@ In the latter case you can also use a link, for example [[{{#Special:Export}}/{{
 'allmessagesdefault'            => 'Default message text',
 'allmessagescurrent'            => 'Current message text',
 'allmessagestext'               => 'This is a list of system messages available in the MediaWiki namespace.
-Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
+Please visit [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
 'allmessagesnotsupportedDB'     => "This page cannot be used because '''\$wgUseDatabaseMessages''' has been disabled.",
 'allmessages-filter-legend'     => 'Filter',
 'allmessages-filter'            => 'Filter by customization state:',
@@ -3871,6 +3871,7 @@ Do '''NOT''' fill this in!",
 'pageinfo-length'                 => 'Page length (in bytes)',
 'pageinfo-article-id'             => 'Page ID',
 'pageinfo-language'               => 'Page content language',
+'pageinfo-content-model'          => 'Page content model',
 'pageinfo-robot-policy'           => 'Indexing by robots',
 'pageinfo-robot-index'            => 'Allowed',
 'pageinfo-robot-noindex'          => 'Disallowed',
@@ -3961,7 +3962,7 @@ By executing it, your system may be compromised.",
 'svg-long-desc'               => 'SVG file, nominally $1 × $2 pixels, file size: $3',
 'svg-long-desc-animated'      => 'Animated SVG file, nominally $1 × $2 pixels, file size: $3',
 'svg-long-error'              => 'Invalid SVG file: $1',
-'show-big-image'              => 'Full resolution',
+'show-big-image'              => 'Original file',
 'show-big-image-preview'      => 'Size of this preview: $1.',
 'show-big-image-other'        => 'Other {{PLURAL:$2|resolution|resolutions}}: $1.',
 'show-big-image-size'         => '$1 × $2 pixels',
@@ -4535,7 +4536,7 @@ $8', # only translate this message to other languages if you have to change it
 
 # External editor support
 'edit-externally'      => 'Edit this file using an external application',
-'edit-externally-help' => '(See the [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] for more information)',
+'edit-externally-help' => '(See the [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] for more information)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'all',
@@ -4651,6 +4652,7 @@ Please confirm that you really want to recreate this page.",
 'percent'             => '$1%', # only translate this message to other languages if you have to change it
 'parentheses'         => '($1)', # only translate this message to other languages if you have to change it
 'brackets'            => '[$1]', # only translate this message to other languages if you have to change it
+'quotation-marks'     => '"$1"',
 
 # Multipage image navigation
 'imgmultipageprev' => '← previous page',
@@ -4849,7 +4851,7 @@ You can also [[Special:EditWatchlist|use the standard editor]].',
 'version-version'                       => '(Version $1)',
 'version-svn-revision'                  => '(r$2)', # only translate this message to other languages if you have to change it
 'version-license'                       => 'License',
-'version-poweredby-credits'             => "This wiki is powered by '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits'             => "This wiki is powered by '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others'              => 'others',
 'version-poweredby-translators'         => 'translatewiki.net translators',
 'version-credits-summary'               => 'We would like to recognize the following persons for their contribution to [[Special:Version|MediaWiki]].',
@@ -4897,8 +4899,8 @@ You should have received [{{SERVER}}{{SCRIPTPATH}}/COPYING a copy of the GNU Gen
 # Special:SpecialPages
 'specialpages'                   => 'Special pages',
 'specialpages-summary'           => '', # do not translate or duplicate this message to other languages
-'specialpages-note'              => '----
-* Normal special pages.
+'specialpages-note-top'          => 'Legend',
+'specialpages-note'              => '* Normal special pages.
 * <span class="mw-specialpagerestricted">Restricted special pages.</span>',
 'specialpages-group-maintenance' => 'Maintenance reports',
 'specialpages-group-other'       => 'Other special pages',
@@ -5143,4 +5145,23 @@ Otherwise, you can use the easy form below. Your comment will be added to the pa
 'limitreport-expensivefunctioncount'       => 'Expensive parser function count',
 'limitreport-expensivefunctioncount-value' => '$1/$2', # only translate this message to other languages if you have to change it
 
+# ExpandTemplates
+'expandtemplates'                  => 'Expand templates',
+'expandtemplates-desc'             => '[[Special:ExpandTemplates|Expands templates, parser functions
+ and variables]] to show expanded wikitext and preview rendered page',
+'expand_templates_intro'           => 'This special page takes text and expands all templates in it 
+recursively.
+It also expands supported parser functions like
+<code><nowiki>{{</nowiki>#language:…}}</code> and variables like
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+In fact, it expands pretty much everything in double-braces.',
+'expand_templates_title'           => 'Context title, for {{FULLPAGENAME}}, etc.:',
+'expand_templates_input'           => 'Input text:',
+'expand_templates_output'          => 'Result',
+'expand_templates_xml_output'      => 'XML output',
+'expand_templates_ok'              => 'OK',
+'expand_templates_remove_comments' => 'Remove comments',
+'expand_templates_remove_nowiki'   => 'Suppress <nowiki> tags in result',
+'expand_templates_generate_xml'    => 'Show XML parse tree',
+'expand_templates_preview'         => 'Preview',
 );
index 48979e9..cc4e418 100644 (file)
@@ -1442,7 +1442,6 @@ indekso pro troŝarĝita servilo. Intertempe, vi povas serĉi per <i>guglo</i> a
 'mypreferences' => 'Preferoj',
 'prefs-edits' => 'Nombro de redaktoj:',
 'prefsnologin' => 'Ne jam salutis!',
-'prefsnologintext' => 'Vi devas esti <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ensalutita]</span> por fari viajn preferojn.',
 'changepassword' => 'Ŝanĝi pasvorton',
 'prefs-skin' => 'Etoso',
 'skin-preview' => 'Antaŭrigardo',
@@ -2948,7 +2947,7 @@ En la lasta okazo, vi ankaŭ povas uzi ligilon, ekz-e [[{{#Special:Export}}/{{Me
 'allmessagesdefault' => 'Defaŭlta teksto',
 'allmessagescurrent' => 'Nuna teksto',
 'allmessagestext' => 'Ĉi tio estas listo de ĉiuj mesaĝoj haveblaj en la MediaWiki-nomspaco.
-Bonvolu aliri [//www.mediawiki.org/wiki/Localisation MediaWiki-Asimilado] kaj [//translatewiki.net translatewiki.net]
+Bonvolu aliri [https://www.mediawiki.org/wiki/Localisation MediaWiki-Asimilado] kaj [//translatewiki.net translatewiki.net]
 se vi volus kontribui al la komuna MediaWiki-asimilado.',
 'allmessagesnotsupportedDB' => '{{ns:special}}:Allmessages ne subtenata ĉar la variablo wgUseDatabaseMessages estas malkonektita.',
 'allmessages-filter-legend' => 'Filtri',
@@ -3716,7 +3715,7 @@ Aliaj estos kaŝitaj defaŭlte.
 
 # External editor support
 'edit-externally' => 'Ŝanĝi ĉi tiun dosieron per ekstera programaro',
-'edit-externally-help' => "(Vidu la [//www.mediawiki.org/wiki/Manual:External_editors instalinstrukciojn] por pliaj informoj.) ''[angle]''.",
+'edit-externally-help' => "(Vidu la [https://www.mediawiki.org/wiki/Manual:External_editors instalinstrukciojn] por pliaj informoj.) ''[angle]''.",
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ĉiuj',
@@ -3955,7 +3954,7 @@ Vi povas ankaŭ [[Special:EditWatchlist|redakti norme]].',
 'version-hook-subscribedby' => 'Abonita de',
 'version-version' => '(Versio $1)',
 'version-license' => 'Permesilo',
-'version-poweredby-credits' => "Ĉi tiu vikio funkcias per '''[//www.mediawiki.org/ MediaWiki]''', aŭtorrajto ©&thinsp;2001–$1 $2.",
+'version-poweredby-credits' => "Ĉi tiu vikio funkcias per '''[https://www.mediawiki.org/ MediaWiki]''', aŭtorrajto ©&thinsp;2001–$1 $2.",
 'version-poweredby-others' => 'aliaj',
 'version-credits-summary' => 'Ni ŝatus agnoski la sekvajn personojn pro siaj kontribuoj al [[Special:Version|MediaWiki]].',
 'version-license-info' => 'MediaWiki estas libera programaro. Vi povas redistribui ĝin kaj/aŭ modifi ĝin sub la kondiĉoj de la GNU General Public Licens (GNU Ĝenerala Publika Permesilo) en ties eldono de la Free Software Foundation (Libera Softvara Fondaĵo) - aŭ versio 2 de la Permesilo, aŭ (laŭ via elekto) iu ajn posta versio.
@@ -3983,8 +3982,7 @@ Oni devis doni al vi [{{SERVER}}{{SCRIPTPATH}}/COPYING ekzempleron de la GNU Gen
 
 # Special:SpecialPages
 'specialpages' => 'Specialaj paĝoj',
-'specialpages-note' => '----
-* Normaj specialaj paĝoj.
+'specialpages-note' => '* Normaj specialaj paĝoj.
 * <strong class="mw-specialpagerestricted">Limigitaj specialaj paĝoj.</strong>
 * <span class="mw-specialpagecached">Memorkaŝitaj specialaj paĝoj (eble malaktualaj).</span>',
 'specialpages-group-maintenance' => 'Raportoj pri prizorgado',
index 34455a1..fa1d5ce 100644 (file)
@@ -49,6 +49,7 @@
  * @author Hazard-SJ
  * @author Hercule
  * @author Icvav
+ * @author Ihojose
  * @author Imre
  * @author Invadinado
  * @author Jatrobat
@@ -383,10 +384,10 @@ $messages = array(
 'tog-extendwatchlist' => 'Expandir la lista de seguimiento a todos los cambios, no sólo a los más recientes',
 'tog-usenewrc' => 'Agrupar los cambios por página en los cambios recientes y en la lista de seguimiento (requiere JavaScript)',
 'tog-numberheadings' => 'Numerar automáticamente los encabezados',
-'tog-showtoolbar' => 'Mostrar la barra de edición (requiere JavaScript)',
-'tog-editondblclick' => 'Editar las páginas con doble clic (requiere JavaScript)',
-'tog-editsection' => 'Habilitar la edición de secciones mediante el enlace [editar]',
-'tog-editsectiononrightclick' => 'Habilitar la edición de secciones pulsando el botón derecho en los títulos de secciones (requiere JavaScript)',
+'tog-showtoolbar' => 'Mostrar la barra de edición',
+'tog-editondblclick' => 'Editar las páginas al pulsar dos veces en ellos con el ratón',
+'tog-editsection' => 'Activar la edición de secciones mediante el enlace [editar]',
+'tog-editsectiononrightclick' => 'Activar la edición de secciones pulsando el botón derecho en los títulos de secciones',
 'tog-showtoc' => 'Mostrar el índice (para páginas con más de 3 encabezados)',
 'tog-rememberpassword' => 'Recordar mi nombre de usuario y contraseña entre sesiones en este navegador (por un máximo de $1 {{PLURAL:$1|día|días}})',
 'tog-watchcreations' => 'Añadir las páginas que cree y los archivos que suba a mi lista de seguimento',
@@ -404,7 +405,7 @@ $messages = array(
 'tog-shownumberswatching' => 'Mostrar el número de usuarios que la vigilan',
 'tog-oldsig' => 'Firma actual:',
 'tog-fancysig' => 'Tratar la firma como wikitexto (sin un enlace automático)',
-'tog-uselivepreview' => 'Usar previsualización en vivo (requiere JavaScript) (experimental)',
+'tog-uselivepreview' => 'Usar previsualización dinámica (experimental)',
 'tog-forceeditsummary' => 'Avisarme cuando grabe la página sin introducir un resumen de edición',
 'tog-watchlisthideown' => 'Ocultar mis ediciones en la lista de seguimiento',
 'tog-watchlisthidebots' => 'Ocultar las ediciones de bots en la lista de seguimiento',
@@ -427,7 +428,7 @@ $messages = array(
 # Font style option in Special:Preferences
 'editfont-style' => 'Estilo de tipografía del área de edición:',
 'editfont-default' => 'Predeterminado del navegador',
-'editfont-monospace' => 'Tipografía monoespaciada',
+'editfont-monospace' => 'Tipo de letra monoespaciado',
 'editfont-sansserif' => 'Tipo de letra de palo seco',
 'editfont-serif' => 'Tipo de letra con serifas',
 
@@ -442,7 +443,7 @@ $messages = array(
 'sun' => 'dom',
 'mon' => 'lun',
 'tue' => 'mar',
-'wed' => 'mie',
+'wed' => 'mié',
 'thu' => 'jue',
 'fri' => 'vie',
 'sat' => 'sab',
@@ -474,7 +475,7 @@ $messages = array(
 'feb' => 'feb',
 'mar' => 'mar',
 'apr' => 'abr',
-'may' => 'mayo',
+'may' => 'may',
 'jun' => 'jun',
 'jul' => 'jul',
 'aug' => 'ago',
@@ -497,10 +498,10 @@ $messages = array(
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Categoría|Categorías}}',
-'category_header' => 'Artículos en la categoría «$1»',
+'category_header' => 'Páginas en la categoría «$1»',
 'subcategories' => 'Subcategorías',
 'category-media-header' => 'Archivos multimedia en la categoría «$1»',
-'category-empty' => "''La categoría no contiene actualmente ningún artículo o archivo multimedia.''",
+'category-empty' => "''La categoría no contiene ninguna página o archivo.''",
 'hidden-categories' => '{{PLURAL:$1|Categoría escondida|Categorías escondidas}}',
 'hidden-category-category' => 'Categorías ocultas',
 'category-subcat-count' => '{{PLURAL:$2|Esta categoría solo contiene la siguiente subcategoría.|Esta categoría contiene {{PLURAL:$1|la siguiente subcategoría|las siguientes $1 subcategorías}}, de un total de $2.}}',
@@ -510,8 +511,8 @@ $messages = array(
 'category-file-count' => '{{PLURAL:$2|Esta categoría contiene solamente el siguiente archivo.|{{PLURAL:$1|El siguiente archivo pertenece|Los siguientes $1 archivos pertenecen}} a esta categoría, de un total de $2.}}',
 'category-file-count-limited' => '{{PLURAL:$1|El siguiente fichero pertenece|Los siguientes $1 ficheros pertenecen}} a esta categoría.',
 'listingcontinuesabbrev' => 'cont.',
-'index-category' => 'Páginas indexadas',
-'noindex-category' => 'Páginas no indexadas',
+'index-category' => 'Páginas indizadas',
+'noindex-category' => 'Páginas no indizadas',
 'broken-file-category' => 'Páginas con enlaces rotos a archivos',
 
 'about' => 'Acerca de',
@@ -520,7 +521,7 @@ $messages = array(
 'cancel' => 'Cancelar',
 'moredotdotdot' => 'Más...',
 'morenotlisted' => 'Esta lista no está completa.',
-'mypage' => 'Mi página',
+'mypage' => 'Página',
 'mytalk' => 'Discusión',
 'anontalk' => 'Discusión para esta IP',
 'navigation' => 'Navegación',
@@ -534,7 +535,7 @@ $messages = array(
 'qbmyoptions' => 'Mis páginas',
 'qbspecialpages' => 'Páginas especiales',
 'faq' => 'Preguntas más frecuentes',
-'faqpage' => 'Project:FAQ',
+'faqpage' => 'Project:P+F',
 
 # Vector skin
 'vector-action-addsection' => 'Nueva sección',
@@ -548,7 +549,7 @@ $messages = array(
 'vector-view-edit' => 'Editar',
 'vector-view-history' => 'Ver historial',
 'vector-view-view' => 'Leer',
-'vector-view-viewsource' => 'Ver fuente',
+'vector-view-viewsource' => 'Ver código',
 'actions' => 'Acciones',
 'namespaces' => 'Espacios de nombres',
 'variants' => 'Variantes',
@@ -588,7 +589,7 @@ $messages = array(
 'talkpagelinktext' => 'Discusión',
 'specialpage' => 'Página especial',
 'personaltools' => 'Herramientas personales',
-'postcomment' => 'Nueva sección',
+'postcomment' => 'Sección nueva',
 'articlepage' => 'Ver artículo',
 'talk' => 'Discusión',
 'views' => 'Vistas',
@@ -629,7 +630,7 @@ $1',
 'disclaimers' => 'Aviso legal',
 'disclaimerpage' => 'Project:Limitación general de responsabilidad',
 'edithelp' => 'Ayuda de edición',
-'helppage' => 'Help:Contenidos',
+'helppage' => 'Help:Contenido',
 'mainpage' => 'Página principal',
 'mainpage-description' => 'Página principal',
 'policy-url' => 'Project:Políticas',
@@ -657,23 +658,23 @@ $1',
 'youhavenewmessagesmulti' => 'Tienes mensajes nuevos en $1',
 'editsection' => 'editar',
 'editold' => 'editar',
-'viewsourceold' => 'ver código fuente',
+'viewsourceold' => 'ver código',
 'editlink' => 'modificar',
-'viewsourcelink' => 'ver fuente',
+'viewsourcelink' => 'ver código',
 'editsectionhint' => 'Editar sección: $1',
 'toc' => 'Contenido',
 'showtoc' => 'mostrar',
 'hidetoc' => 'ocultar',
-'collapsible-collapse' => 'Ocultar',
-'collapsible-expand' => 'Mostrar',
+'collapsible-collapse' => 'Contraer',
+'collapsible-expand' => 'Expandir',
 'thisisdeleted' => '¿Ver o restaurar $1?',
-'viewdeleted' => '¿Deseas ver $1?',
+'viewdeleted' => '¿Quieres ver $1?',
 'restorelink' => '{{PLURAL:$1|una edición borrada|$1 ediciones borradas}}',
-'feedlinks' => 'Sindicación:',
-'feed-invalid' => 'Tipo de subscripción a sindicación de noticias inválida.',
-'feed-unavailable' => 'Las fuentes web no están disponibles',
-'site-rss-feed' => '$1 Fuente RSS',
-'site-atom-feed' => 'Feed Atom de $1',
+'feedlinks' => 'Canal:',
+'feed-invalid' => 'El tipo de canal de suscripción no es válido.',
+'feed-unavailable' => 'Los canales de sindicación no están disponibles',
+'site-rss-feed' => 'Canal RSS de $1',
+'site-atom-feed' => 'Canal Atom de $1',
 'page-rss-feed' => 'Canal RSS «$1»',
 'page-atom-feed' => 'Canal Atom «$1»',
 'red-link-title' => '$1 (la página no existe)',
@@ -683,7 +684,7 @@ $1',
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Página',
 'nstab-user' => 'Página {{GENDER:{{ROOTPAGENAME}}|del usuario|de la usuaria}}',
-'nstab-media' => 'Media',
+'nstab-media' => 'Multimedia',
 'nstab-special' => 'Página especial',
 'nstab-project' => 'Página del proyecto',
 'nstab-image' => 'Archivo',
@@ -693,8 +694,8 @@ $1',
 'nstab-category' => 'Categoría',
 
 # Main script and global functions
-'nosuchaction' => 'No existe tal acción',
-'nosuchactiontext' => 'La acción especificada en la dirección es inválida.
+'nosuchaction' => 'No existe esa acción',
+'nosuchactiontext' => 'La acción especificada en la dirección no es válida.
 Es posible que hayas escrito mal la URL o que hayas seguido un enlace incorrecto. Esto también podría indicar un error en el software utilizado en {{SITENAME}}.',
 'nosuchspecialpage' => 'No existe esa página especial',
 'nospecialpagetext' => '<strong>Ha solicitado una página especial inexistente.</strong>
@@ -753,9 +754,9 @@ Puede que contenga uno o más caracteres que no se pueden usar en los títulos.'
 'wrong_wfQuery_params' => 'Parámetros incorrectos para wfQuery()<br />
 Función: $1<br />
 Consulta: $2',
-'viewsource' => 'Ver fuente',
-'viewsource-title' => 'Ver el código fuente de «$1»',
-'actionthrottled' => 'Acción bloqueada',
+'viewsource' => 'Ver código',
+'viewsource-title' => 'Ver el código de «$1»',
+'actionthrottled' => 'Acción limitada',
 'actionthrottledtext' => "Como medida contra el ''spam'', la acción que estás realizando está limitada a un número determinado de veces en un periodo corto de tiempo, y has excedido ese límite. Por favor inténtalo de nuevo en unos minutos.",
 'protectedpagetext' => 'Esta página ha sido protegida para evitar su edición u otras acciones.',
 'viewsourcetext' => 'Puedes ver y copiar el código fuente de esta página:',
@@ -782,7 +783,8 @@ El administrador que lo ha bloqueado ofrece esta explicación: "$3".',
 'invalidtitle-knownnamespace' => 'Título no válido con el espacio de nombres "$2" y el texto "$3"',
 'invalidtitle-unknownnamespace' => 'Título no válido con número de espacio de nombres desconocido  $1  y el texto "$2"',
 'exception-nologin' => 'No has iniciado sesión',
-'exception-nologin-text' => 'Esta página o acción requiere que inicies sesión en este wiki.',
+'exception-nologin-text' => '[[Special:Userlogin|Inicia sesión]] para acceder a esta página o acción.',
+'exception-nologin-text-manual' => 'Necesitas $1 para acceder a esta página o acción.',
 
 # Virus scanner
 'virus-badscanner' => "Error de configuración: Antivirus desconocido: ''$1''",
@@ -826,9 +828,9 @@ No olvides personalizar tus [[Special:Preferences|preferencias de {{SITENAME}}]]
 'nologinlink' => 'Crear una cuenta',
 'createaccount' => 'Crear una cuenta',
 'gotaccount' => '¿Ya tienes una cuenta? $1.',
-'gotaccountlink' => 'Entrar',
+'gotaccountlink' => 'Iniciar sesión',
 'userlogin-resetlink' => '¿Olvidaste tus datos de acceso?',
-'userlogin-resetpassword-link' => 'Restablecer la contraseña',
+'userlogin-resetpassword-link' => '¿Has olvidado tu contraseña?',
 'helplogin-url' => 'Help:Inicio de sesión',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Ayuda]]',
 'userlogin-loggedin' => 'Ya estás conectado como {{GENDER:$1|$1}}.
@@ -849,13 +851,13 @@ Usa el formulario de abajo para iniciar sesión como otro usuario.',
 'createacct-imgcaptcha-ph' => 'Escribe el texto de arriba',
 'createacct-submit' => 'Crea tu cuenta',
 'createacct-another-submit' => 'Crear otra cuenta',
-'createacct-benefit-heading' => '{{SITENAME}} lo construye gente como tú.',
+'createacct-benefit-heading' => '{{SITENAME}} es hecha por gente como tú.',
 'createacct-benefit-body1' => '{{PLURAL:$1|edición|ediciones}}',
 'createacct-benefit-body2' => '{{PLURAL:$1|página|páginas}}',
 'createacct-benefit-body3' => '{{PLURAL:$1|colaborador reciente|colaboradores recientes}}',
 'badretype' => 'Las contraseñas no coinciden.',
 'userexists' => 'El nombre de usuario indicado ya está en uso.
-Por favor escoge un nombre diferente.',
+Elige un nombre diferente.',
 'loginerror' => 'Error de inicio de sesión',
 'createacct-error' => 'Error al crear la cuenta',
 'createaccounterror' => 'No se pudo crear la cuenta: $1',
@@ -901,7 +903,7 @@ Para evitar los abusos, solo se enviará un recordatorio de contraseña cada {{P
 'mailerror' => 'Error al enviar correo: $1',
 'acct_creation_throttle_hit' => 'Los visitantes a este wiki usando tu dirección IP han creado {{PLURAL:$1|una cuenta|$1 cuentas}} en el último día, lo cual es lo máximo permitido en este periodo de tiempo.
 Como resultado, los visitantes usando esta dirección IP no pueden crear más cuentas en este momento.',
-'emailauthenticated' => 'Tu dirección de correo electrónico fue autenticada el $2 a $3.',
+'emailauthenticated' => 'Tu dirección de correo electrónico fue confirmada el $2 a las $3.',
 'emailnotauthenticated' => 'Aún no has confirmado tu dirección de correo electrónico.
 Hasta que lo hagas, las siguientes funciones no estarán disponibles.',
 'noemailprefs' => 'Especifica una dirección electrónica para habilitar estas características.',
@@ -910,7 +912,7 @@ Hasta que lo hagas, las siguientes funciones no estarán disponibles.',
 Por favor, escribe una dirección en el formato adecuado o deja el campo en blanco.',
 'cannotchangeemail' => 'Las direcciones de la correo electrónico de las cuentas de usuario no puedes cambiarse en esta wiki.',
 'emaildisabled' => 'Este sitio no puede enviar mensajes de correo electrónico.',
-'accountcreated' => 'Cuenta creada',
+'accountcreated' => 'Se ha creado la cuenta',
 'accountcreatedtext' => 'La cuenta de usuario de [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) ha sido creada.',
 'createaccount-title' => 'Creación de cuenta para {{SITENAME}}',
 'createaccount-text' => 'Alguien creó en {{SITENAME}} ($4) una cuenta asociada a este correo electrónico con el nombre «$2».
@@ -1037,16 +1039,16 @@ Deberías hacerlo si accidentalmente la has compartido con alguien o si su cuent
 'subject' => 'Asunto/encabezado:',
 'minoredit' => 'Esta es una edición menor',
 'watchthis' => 'Vigilar esta página',
-'savearticle' => 'Grabar la página',
+'savearticle' => 'Guardar la página',
 'preview' => 'Previsualizar',
 'showpreview' => 'Mostrar previsualización',
-'showlivepreview' => 'Previsualización inmediata',
-'showdiff' => 'Mostrar cambios',
+'showlivepreview' => 'Previsualización dinámica',
+'showdiff' => 'Mostrar los cambios',
 'anoneditwarning' => "'''Aviso:''' No has iniciado sesión con una cuenta de usuario.
 Tu dirección IP se almacenará en el historial de ediciones de la página.",
 'anonpreviewwarning' => "''No has iniciado sesión con una cuenta de usuario. Al guardar los cambios se almacenará tu dirección IP en el historial de edición de la página.''",
 'missingsummary' => "'''Atención:''' No has escrito un resumen de edición. Si haces clic nuevamente en «{{int:savearticle}}» tu edición se grabará sin él.",
-'missingcommenttext' => 'Por favor, introduce un texto debajo.',
+'missingcommenttext' => 'Escribe un comentario a continuación.',
 'missingcommentheader' => "'''Recordatorio:''' No has escrito un título para este comentario. Si haces clic nuevamente en \"{{int:savearticle}}\" tu edición se grabará sin él.",
 'summary-preview' => 'Previsualización del resumen:',
 'subject-preview' => 'Previsualización del tema/título:',
@@ -1089,7 +1091,7 @@ Quizá ha sido movida o borrada mientras visitabas la página.',
 'loginreqtitle' => 'Es necesario iniciar sesión',
 'loginreqlink' => 'iniciar sesión',
 'loginreqpagetext' => 'Debes $1 para ver otras páginas.',
-'accmailtitle' => 'La contraseña ha sido enviada.',
+'accmailtitle' => 'Se ha enviado la contraseña',
 'accmailtext' => 'Se ha enviado a $2 una contraseña generada aleatoriamente para [[User talk:$1|$1]].
 
 La contraseña para esta nueva cuenta puede cambiarse en [[Special:ChangePassword|la página destinada para ello]] después de haber iniciado sesión.',
@@ -1146,10 +1148,10 @@ Si el problema persiste, [[Special:UserLogout|cierra la sesión]] y vuelve a ide
 Se rechazó la edición para evitar que el texto de la página se corrompa.
 Esto sucede en ocasiones cuando se usa un servicio de proxy anónimo defectuoso.'''",
 'edit_form_incomplete' => "'''Algunas partes del formulario de edición no llegaron al servidor, comprueba que tus ediciones están intactas e inténtalo de nuevo'''.",
-'editing' => 'Editando $1',
-'creating' => 'Creando la página $1',
-'editingsection' => 'Editando $1 (sección)',
-'editingcomment' => 'Editando $1 (nueva sección)',
+'editing' => 'Editar $1',
+'creating' => 'Crear la página $1',
+'editingsection' => 'Editar $1 (sección)',
+'editingcomment' => 'Editar $1 (sección nueva)',
 'editconflict' => 'Conflicto de edición: $1',
 'explainconflict' => "Alguien más ha cambiado esta página desde que empezaste a editarla.
 El área de texto superior contiene el texto de la página como existe actualmente.
@@ -1278,8 +1280,8 @@ Leyenda: '''(act)''' = diferencias con la versión actual,
 '''(ant)''' = diferencias con la versión anterior, '''m''' = edición menor",
 'history-fieldset-title' => 'Buscar en el historial',
 'history-show-deleted' => 'Solo ediciones ocultadas',
-'histfirst' => 'Primeras',
-'histlast' => 'Ã\9altimas',
+'histfirst' => 'primeras',
+'histlast' => 'últimas',
 'historysize' => '({{PLURAL:$1|1 byte|$1 bytes}})',
 'historyempty' => '(vacío)',
 
@@ -1328,10 +1330,10 @@ Aún tiene la posibilidad de verla; puede ampliar los detalles en el [{{fullurl:
 'revdelete-nooldid-text' => 'No se ha especificado una revisión o revisiones destino sobre las que realizar esta función.',
 'revdelete-nologtype-title' => 'ningún nombre dado',
 'revdelete-nologtype-text' => 'No has especificado ningún nombre para ejecutar esta acción.',
-'revdelete-nologid-title' => 'Entrada de registro inválida',
+'revdelete-nologid-title' => 'Entrada de registro no válida',
 'revdelete-nologid-text' => 'Tampoco has especificado un objetivo de eventos para ejecutar esta función o la entrada especificada no existe.',
-'revdelete-no-file' => 'El fichero especificado no existe.',
-'revdelete-show-file-confirm' => '¿Realmente deseas ver la revisión borrada del archivo "<nowiki>$1</nowiki>" del $2 a las $3?',
+'revdelete-no-file' => 'El archivo especificado no existe.',
+'revdelete-show-file-confirm' => '¿Quieres ver la revisión borrada del archivo «<nowiki>$1</nowiki>» del $2 a las $3?',
 'revdelete-show-file-submit' => 'Sí',
 'revdelete-selected' => "'''{{PLURAL:$2|Revisión seleccionada|Revisiones seleccionadas}} de [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Seleccionado un evento|Seleccionados eventos}}:'''",
@@ -1343,15 +1345,15 @@ Otros administradores de {{SITENAME}} aún podrán acceder al contenido oculto y
 * Información personal inapropiada, tal como:
 *: ''nombres, domicilios, números de teléfono, números de la seguridad social e información análoga.",
 'revdelete-legend' => 'Establecer restricciones de revisión:',
-'revdelete-hide-text' => 'Ocultar el texto de la revisión',
+'revdelete-hide-text' => 'Texto de la revisión',
 'revdelete-hide-image' => 'Ocultar el contenido del archivo',
 'revdelete-hide-name' => 'Ocultar acción y objetivo',
-'revdelete-hide-comment' => 'Ocultar el resumen de edición',
-'revdelete-hide-user' => 'Ocultar el nombre/IP del editor',
+'revdelete-hide-comment' => 'Resumen de edición',
+'revdelete-hide-user' => 'Nombre/IP del editor',
 'revdelete-hide-restricted' => 'Suprimir datos a los administradores así como al resto',
 'revdelete-radio-same' => '(no cambiar)',
-'revdelete-radio-set' => '',
-'revdelete-radio-unset' => 'No',
+'revdelete-radio-set' => 'Oculta',
+'revdelete-radio-unset' => 'Visible',
 'revdelete-suppress' => 'Suprimir datos a los administradores así como al resto',
 'revdelete-unsuppress' => 'Eliminar restricciones de revisiones restauradas',
 'revdelete-log' => 'Motivo:',
@@ -1382,9 +1384,9 @@ No tiene acceso a él.',
 ** Comentario o información personal inapropiados
 ** Nombre de usuario inapropiado
 ** Información potencialmente injuriosa o calumniante',
-'revdelete-otherreason' => 'Otra/adicional razón:',
-'revdelete-reasonotherlist' => 'Otra razón',
-'revdelete-edit-reasonlist' => 'Editar razones de borrado',
+'revdelete-otherreason' => 'Otro motivo:',
+'revdelete-reasonotherlist' => 'Otro motivo',
+'revdelete-edit-reasonlist' => 'Editar motivos de borrado',
 'revdelete-offender' => 'Autor de la revisión:',
 
 # Suppression log
@@ -1415,7 +1417,7 @@ Nota que usar los enlaces de navegación borrará las selecciones de esta column
 'mergehistory-autocomment' => 'Fusionando [[:$1]] en [[:$2]]',
 'mergehistory-comment' => 'Fusionando [[:$1]] en [[:$2]]: $3',
 'mergehistory-same-destination' => 'Las páginas de origen y destino no pueden ser la misma',
-'mergehistory-reason' => 'Razón:',
+'mergehistory-reason' => 'Motivo:',
 
 # Merge log
 'mergelog' => 'Registro de fusiones',
@@ -1509,7 +1511,7 @@ Mientras tanto puedes buscar mediante Google, pero ten en cuenta que sus índice
 'mypreferences' => 'Preferencias',
 'prefs-edits' => 'Cantidad de ediciones:',
 'prefsnologin' => 'No has iniciado sesión',
-'prefsnologintext' => 'Necesitas <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} iniciar sesión]</span> para establecer las preferencias del usuario.',
+'prefsnologintext2' => 'Necesitas $1 para definir las preferencias del usuario.',
 'changepassword' => 'Cambiar contraseña',
 'prefs-skin' => 'Apariencia',
 'skin-preview' => 'Previsualizar',
@@ -1524,7 +1526,7 @@ Mientras tanto puedes buscar mediante Google, pero ten en cuenta que sus índice
 'prefs-watchlist-days' => 'Número de días a mostrar en la lista de seguimiento:',
 'prefs-watchlist-days-max' => 'Máximo $1 {{PLURAL:$1|día|días}}',
 'prefs-watchlist-edits' => 'Número de ediciones a mostrar en la lista expandida:',
-'prefs-watchlist-edits-max' => 'Máximo: 1000',
+'prefs-watchlist-edits-max' => 'Cantidad máxima: 1000',
 'prefs-watchlist-token' => 'Ficha de lista de seguimiento:',
 'prefs-misc' => 'Miscelánea',
 'prefs-resetpass' => 'Cambiar contraseña',
@@ -1549,7 +1551,7 @@ Mientras tanto puedes buscar mediante Google, pero ten en cuenta que sus índice
 'prefs-help-watchlist-token2' => 'Esta es la clave secreta para el canal de contenido web de tu lista de seguimiento.
 Cualquier persona que la conozca podría leer tu lista, así que no la compartas.
 [[Special:ResetTokens|Pulsa aquí si necesitas restablecerla]].',
-'savedprefs' => 'Tus preferencias han sido guardadas.',
+'savedprefs' => 'Se han guardado tus preferencias.',
 'timezonelegend' => 'Zona horaria:',
 'localtime' => 'Hora local:',
 'timezoneuseserverdefault' => 'Usar la hora del servidor ($1)',
@@ -1559,7 +1561,7 @@ Cualquier persona que la conozca podría leer tu lista, así que no la compartas
 'guesstimezone' => 'Rellenar a partir de la hora del navegador',
 'timezoneregion-africa' => 'África',
 'timezoneregion-america' => 'América',
-'timezoneregion-antarctica' => 'Antártica',
+'timezoneregion-antarctica' => 'Antártida',
 'timezoneregion-arctic' => 'Ártico',
 'timezoneregion-asia' => 'Asia',
 'timezoneregion-atlantic' => 'Océano Atlántico',
@@ -1588,15 +1590,15 @@ Esto no se puede deshacer.',
 'yourlanguage' => 'Idioma:',
 'yourvariant' => 'Variante lingüística del contenido:',
 'prefs-help-variant' => 'Tu variante u ortografía preferida para mostrar las páginas de contenido de este wiki.',
-'yournick' => 'Nueva firma:',
+'yournick' => 'Firma nueva:',
 'prefs-help-signature' => 'Los comentarios en páginas de discusión deberían firmarse con «<nowiki>~~~~</nowiki>», que se convertirá en tu firma con fecha y hora.',
 'badsig' => 'El código de tu firma no es válido; comprueba las etiquetas HTML.',
 'badsiglength' => 'Tu firma es muy larga.
 Debe contener un máximo de {{PLURAL:$1|un carácter|$1 caracteres}}.',
-'yourgender' => '¿Cómo prefieres ser descrito/a?',
-'gender-unknown' => 'Prefiero no especificar',
-'gender-male' => 'Él edita páginas wiki',
-'gender-female' => 'Ella edita páginas wiki',
+'yourgender' => 'Sexo:',
+'gender-unknown' => 'Prefiero no especificarlo',
+'gender-male' => 'Masculino',
+'gender-female' => 'Femenino',
 'prefs-help-gender' => 'Opcional: empleado para que sea usado correctamente el género por parte del software. Esta información será pública.',
 'email' => 'Correo electrónico',
 'prefs-help-realname' => 'El nombre real es opcional. Si decides proporcionarlo, se usará para dar atribución a tu trabajo.',
@@ -1681,7 +1683,7 @@ Tu dirección de correo no se revela cuando otros usuarios te contactan.',
 'right-createpage' => 'Crear páginas que no sean páginas de discusión',
 'right-createtalk' => 'Crear páginas de discusión',
 'right-createaccount' => 'Crear cuentas de usuario nuevas',
-'right-minoredit' => 'Marcar ediciones como «menores»',
+'right-minoredit' => 'Marcar ediciones como menores',
 'right-move' => 'Trasladar páginas',
 'right-move-subpages' => 'Trasladar páginas con sus subpáginas',
 'right-move-rootuserpages' => 'Trasladar páginas de usuario raíz',
@@ -3044,7 +3046,7 @@ En el último caso también puedes usar un enlace, por ejemplo [[{{#Special:Expo
 'allmessagesdefault' => 'Texto predeterminado',
 'allmessagescurrent' => 'Texto actual',
 'allmessagestext' => 'Esta es una lista de mensajes del sistema disponibles en el espacio de nombres MediaWiki:
-Por favor visita [//www.mediawiki.org/wiki/Localisation Localización MediaWiki] y [//translatewiki.net translatewiki.net] si deseas contribuir con la localización genérica MediaWiki.',
+Por favor visita [https://www.mediawiki.org/wiki/Localisation Localización MediaWiki] y [//translatewiki.net translatewiki.net] si deseas contribuir con la localización genérica MediaWiki.',
 'allmessagesnotsupportedDB' => "Esta página no está disponible porque '''\$wgUseDatabaseMessages''' está deshabilitado.",
 'allmessages-filter-legend' => 'Filtro',
 'allmessages-filter' => 'Filtrar por estado de personalización:',
@@ -3210,6 +3212,7 @@ Puedes ver su código fuente',
 Permite añadir una razón al resumen de edición.',
 'tooltip-preferences-save' => 'Guardar las preferencias',
 'tooltip-summary' => 'Introduce un breve resumen',
+'interlanguage-link-title' => '$1 ($2)',
 
 # Stylesheets
 'common.css' => '/* El CSS colocado en esta página será aplicado a todas las apariencias */',
@@ -3274,6 +3277,7 @@ Esto podría estar causado por un enlace a un sitio externo incluido en la lista
 'pageinfo-length' => 'Longitud de la página (en bytes)',
 'pageinfo-article-id' => 'Identificador ID de la página',
 'pageinfo-language' => 'Idioma de la página',
+'pageinfo-content-model' => 'Modelo de contenido de la página',
 'pageinfo-robot-policy' => 'Indización por robots',
 'pageinfo-robot-index' => 'Permitido',
 'pageinfo-robot-noindex' => 'No permitido',
@@ -3362,7 +3366,7 @@ Ejecutarlo podría comprometer la seguridad de su equipo.",
 'svg-long-desc' => 'archivo SVG, nominalmente $1 × $2 píxeles, tamaño de archivo: $3',
 'svg-long-desc-animated' => 'Archivo SVG animado, nominalmente de $1 × $2 píxeles, tamaño del archivo: $3',
 'svg-long-error' => 'Archivo SVG no válido: $1',
-'show-big-image' => 'Resolución original',
+'show-big-image' => 'Archivo original',
 'show-big-image-preview' => 'Tamaño de esta previsualización: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Otra resolución|Otras resoluciones}}: $1.',
 'show-big-image-size' => '$1 × $2 píxeles',
@@ -3833,7 +3837,7 @@ Existen otros campos que se mantendrán ocultos por defecto.
 
 # External editor support
 'edit-externally' => 'Editar este archivo usando una aplicación externa',
-'edit-externally-help' => '(Lee las [//www.mediawiki.org/wiki/Manual:External_editors instrucciones de configuración] -en inglés- para más información)',
+'edit-externally-help' => '(Lee las [https://www.mediawiki.org/wiki/Manual:External_editors instrucciones de configuración] -en inglés- para más información)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'todos',
@@ -3926,6 +3930,7 @@ Confirma que realmente quieres volver a crear esta página.",
 
 # Separators for various lists, etc.
 'comma-separator' => ',&#32;',
+'quotation-marks' => '«$1»',
 
 # Multipage image navigation
 'imgmultipageprev' => '← página anterior',
@@ -4014,7 +4019,7 @@ También puedes [[Special:EditWatchlist|usar el editor estándar]].',
 'version-hook-subscribedby' => 'Suscrito por',
 'version-version' => '(Versión $1)',
 'version-license' => 'Licencia',
-'version-poweredby-credits' => "Este wiki funciona gracias a '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Este wiki funciona gracias a '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'otros',
 'version-poweredby-translators' => 'Traductores de translatewiki.net',
 'version-credits-summary' => 'Queremos reconocer a las siguientes personas por su contribución a [[Special:Version|MediaWiki]].',
@@ -4057,8 +4062,8 @@ Has recibido [{{SERVER}}{{SCRIPTPATH}}/COPYING una copia de la Licencia Pública
 
 # Special:SpecialPages
 'specialpages' => 'Páginas especiales',
-'specialpages-note' => '----
-* Páginas especiales normales
+'specialpages-note-top' => 'Leyenda:',
+'specialpages-note' => '* Páginas especiales normales
 * <span class="mw-specialpagerestricted">Páginas especiales restringidas.</span>
 * <span class="mw-specialpagecached">Páginas especiales en caché (podrían ser obsoletas).</span>',
 'specialpages-group-maintenance' => 'Reportes de mantenimiento',
index 84d149c..a2e7b9c 100644 (file)
@@ -477,7 +477,7 @@ $messages = array(
 'returnto' => 'Naase lehele $1',
 'tagline' => 'Allikas: {{SITENAME}}',
 'help' => 'Juhend',
-'search' => 'Otsimine',
+'search' => 'Otsing',
 'searchbutton' => 'Otsi',
 'go' => 'Mine',
 'searcharticle' => 'Mine',
@@ -577,9 +577,9 @@ Vaata [[Special:Version|versiooni lehekülge]].',
 'editsection' => 'muuda',
 'editold' => 'redigeeri',
 'viewsourceold' => 'vaata lähteteksti',
-'editlink' => 'redigeeri',
+'editlink' => 'muuda',
 'viewsourcelink' => 'vaata lähteteksti',
-'editsectionhint' => 'Redigeeri alaosa "$1"',
+'editsectionhint' => 'Muuda alaosa "$1"',
 'toc' => 'Sisukord',
 'showtoc' => 'näita',
 'hidetoc' => 'peida',
@@ -592,9 +592,9 @@ Vaata [[Special:Version|versiooni lehekülge]].',
 'feed-invalid' => 'Vigane vootüüp.',
 'feed-unavailable' => 'Uudisvood ei ole saadaval.',
 'site-rss-feed' => '$1 RSS-toide',
-'site-atom-feed' => '$1 Atom-toide',
+'site-atom-feed' => '$1 Atom-fiid',
 'page-rss-feed' => '"$1" RSS-toide',
-'page-atom-feed' => '"$1" Atom-toide',
+'page-atom-feed' => '"$1" Atom-fiid',
 'red-link-title' => '$1 (pole veel kirjutatud)',
 'sort-descending' => 'Järjesta laskuvalt',
 'sort-ascending' => 'Järjesta tõusvalt',
@@ -806,15 +806,16 @@ Kui uut parooli palus keegi teine või sulle meenus vana parool ja sa ei soovi s
 'passwordsent' => 'Uus parool on saadetud kasutaja $1 registreeritud e-postiaadressil.
 Pärast parooli saamist logige palun sisse.',
 'blocked-mailpassword' => 'Sinu IP-aadressi jaoks on toimetamine blokeeritud, seetõttu ei saa sa kasutada ka parooli meeldetuletamise funktsiooni.',
-'eauthentsent' => 'Sisestatud e-posti aadressile on saadetud kinnituse e-kiri.
-Enne kui su kontole ükskõik milline muu e-kiri saadetakse, pead sa e-kirjas olevat juhist järgides kinnitama, et konto on tõepoolest sinu.',
+'eauthentsent' => 'Määratud e-posti aadressile on saadetud kinnituse e-kiri.
+Enne kui su kontole ükskõik milline muu e-kiri saadetakse, pead e-kirjas olevat juhist järgides kinnitama, et konto on tõepoolest sinu.',
 'throttled-mailpassword' => 'Parooli lähtestamise e-kiri saadetud viimase {{PLURAL:$1|tunni|$1 tunni}} jooksul.
 Väärtarvitamise vältimiseks saadetakse {{PLURAL:$1|tunni|$1 tunni}} jooksul ainult üks lähtestamise e-kiri.',
 'mailerror' => 'Viga kirja saatmisel: $1',
 'acct_creation_throttle_hit' => 'Selle viki külastajad, kes kasutavad sinu IP-aadressi, on viimase ööpäeva jooksul loonud {{PLURAL:$1|ühe konto|$1 kontot}}, mis on selles ajavahemikus ülemmääraks.
 Seetõttu ei saa seda IP-aadressi kasutades hetkel rohkem kontosid luua.',
 'emailauthenticated' => 'Sinu e-posti aadressi kinnitamisaeg: $2 kell $3.',
-'emailnotauthenticated' => 'Sinu e-posti aadress <strong>pole veel kinnitatud</strong>. Järgnevate funktsioonidega seotud e-kirju kinnitamata aadressile ei saadeta.',
+'emailnotauthenticated' => 'Sinu e-posti aadress pole veel kinnitatud.
+Järgnevate funktsioonidega seotud e-kirju ei saadeta.',
 'noemailprefs' => 'Järgnevate võimaluste toimimiseks on vaja sisestada e-posti aadress.',
 'emailconfirmlink' => 'Kinnita oma e-posti aadress',
 'invalidemailaddress' => 'E-posti aadress ei ole aktsepteeritav, sest see on vigaselt kirjutatud.
@@ -930,7 +931,7 @@ Peaksid load lähtestama, kui jagasid neid kogemata või kui su konto on kellegi
 'headline_sample' => 'Pealkiri',
 'headline_tip' => '2. taseme pealkiri',
 'nowiki_sample' => 'Sisesta vormindamata tekst',
-'nowiki_tip' => 'Ignoreeri viki vormindust',
+'nowiki_tip' => 'Ignoreeri vikivormindust',
 'image_sample' => 'Näidis.jpg',
 'image_tip' => 'Pilt',
 'media_sample' => 'Näidis.ogg',
@@ -1120,22 +1121,21 @@ Tundub, et see on kustutatud.',
 See on juba olemas.',
 'defaultmessagetext' => 'Sõnumi vaiketekst',
 'invalid-content-data' => 'Vigased sisuandmed',
-'content-not-allowed-here' => 'Lehekülg [[$2]] ei või sisaldada $1.',
+'content-not-allowed-here' => 'Lehekülg [[$2]] ei või sisaldada $1i.',
 'editwarning-warning' => 'Sellelt leheküljelt lahkumise tõttu võivad tehtud muudatused kaotsi minna.
 Kui oled sisse loginud, saad selle hoiatuse eelistuste alaosas "Toimetamine" keelata.',
 
 # Content models
-'content-model-wikitext' => 'vikiteksti',
-'content-model-text' => 'lihtteksti',
-'content-model-javascript' => 'JavaScripti',
-'content-model-css' => 'CSSi',
+'content-model-wikitext' => 'vikitekst',
+'content-model-text' => 'lihttekst',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Hoiatus:''' See lehekülg kasutab liialt palju aeglustavaid laiendusfunktsioone. Neid võiks kasutada vähem kui {{PLURAL:$2|ühel|$2}} korral, praegu on kasutatud {{PLURAL:$1|ühel|$1}} korral.",
 'expensive-parserfunction-category' => 'Liiga palju aeglasi laiendusfunktsioone kasutavad leheküljed',
-'post-expand-template-inclusion-warning' => "'''Hoiatus:''' Väljakutsutavate mallide hulk on liiga suur.
-Mistõttu osasid malle ei näidata.",
-'post-expand-template-inclusion-category' => 'Leheküljed, milledel on mallide väljakutsumise limiit ületatud',
+'post-expand-template-inclusion-warning' => "'''Hoiatus:''' Väljakutsutavate mallide hulk on liiga suur, mõningaid malle ei näidata.",
+'post-expand-template-inclusion-category' => 'Leheküljed, kus mallide väljakutsumise limiit on ületatud',
 'post-expand-template-argument-warning' => "'''Hoiatus:''' See lehekülg sisaldab argumendina vähemalt üht malli, mille määratud maht on liiga suur.
 Need argumendid on välja jäetud.",
 'post-expand-template-argument-category' => 'Malli vahele jäetud argumente sisaldavad leheküljed',
@@ -1240,18 +1240,19 @@ Saad seda muudatust vaadata. [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAG
 {{GRAMMAR:genitive|{{SITENAME}}}} administraatorid saavad peidetud sisu siiski vaadata ning seda vajadusel selle liidese kaudu taastada, kui see pole just täiendavalt keelatud.",
 'revdelete-confirm' => 'Kinnita, et soovid tõesti seda teha ning et saad aru tagajärgedest ja tegevus on kooskõlas [[{{MediaWiki:Policy-url}}|siinsete kokkulepetega]].',
 'revdelete-suppress-text' => "Andmed tuleks varjata '''ainult''' järgnevatel juhtudel:
+* Võimalik laim
 * Sobimatu isiklik teave
-*: ''kodune aadress ja telefoninumber, sotsiaalhoolekandenumber jne''",
+*: ''kodune aadress ja telefoninumber, isikukood jne''",
 'revdelete-legend' => 'Nähtavuse piirangute seadmine',
-'revdelete-hide-text' => 'Peida redaktsiooni tekst',
+'revdelete-hide-text' => 'Redaktsiooni tekst',
 'revdelete-hide-image' => 'Peida faili sisu',
 'revdelete-hide-name' => 'Peida toiming ja sihtmärk',
-'revdelete-hide-comment' => 'Peida resümee',
-'revdelete-hide-user' => 'Peida toimetaja kasutajanimi või IP-aadress',
+'revdelete-hide-comment' => 'Resümee',
+'revdelete-hide-user' => 'Toimetaja kasutajanimi või IP-aadress',
 'revdelete-hide-restricted' => 'Varja andmeid nii administraatorite kui ka teiste eest.',
 'revdelete-radio-same' => '(ära muuda)',
-'revdelete-radio-set' => 'Jah',
-'revdelete-radio-unset' => 'Ei',
+'revdelete-radio-set' => 'Peidetud',
+'revdelete-radio-unset' => 'Nähtav',
 'revdelete-suppress' => 'Varja andmed nii administraatorite kui ka teiste eest',
 'revdelete-unsuppress' => 'Eemalda taastatud redaktsioonidelt piirangud',
 'revdelete-log' => 'Põhjus:',
@@ -1412,7 +1413,6 @@ Pane tähele, et Google'is talletatud {{GRAMMAR:genitive|{{SITENAME}}}} sisu võ
 'mypreferences' => 'Eelistused',
 'prefs-edits' => 'Redigeerimiste arv:',
 'prefsnologin' => 'Sisse logimata',
-'prefsnologintext' => 'Oma eelistuste määramiseks pead olema <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} sisse logitud]</span>.',
 'changepassword' => 'Muuda parool',
 'prefs-skin' => 'Kujundus',
 'skin-preview' => 'eelvaade',
@@ -1710,7 +1710,7 @@ See teave on avalik.',
 'recentchanges-feed-description' => 'Jälgi vikisse tehtud viimaseid muudatusi.',
 'recentchanges-label-newpage' => 'See muudatus lõi uue lehekülje',
 'recentchanges-label-minor' => 'See on pisiparandus',
-'recentchanges-label-bot' => 'Selle muudatuse sooritas robot',
+'recentchanges-label-bot' => 'Selle muudatuse tegi robot',
 'recentchanges-label-unpatrolled' => 'Seda muudatust ei ole veel kontrollitud',
 'rcnote' => "Allpool on esitatud {{PLURAL:$1|'''1''' muudatus|viimased '''$1''' muudatust}} viimase {{PLURAL:$2|päeva|'''$2''' päeva}} jooksul seisuga $4, kell $5.",
 'rcnotefrom' => "Allpool on toodud muudatused alates: '''$2''' (näidatakse kuni '''$1''' muudatust)",
@@ -2890,7 +2890,8 @@ Kas kustutad selle, et luua võimalus teisaldamiseks?',
 'immobile-target-namespace-iw' => 'Keelelink ei ole sobiv koht lehekülje teisaldamiseks.',
 'immobile-source-page' => 'Lehekülg ei ole teisaldatav.',
 'immobile-target-page' => 'Soovitud pealkirja alla ei saa teisaldada.',
-'imagenocrossnamespace' => 'Faili ei saa teisaldada mõnda muusse nimeruumi',
+'bad-target-model' => 'Soovitud sihtlehekülje sisumudel on erinev. {{ucfirst:$1}}i ei saa teisendada $2iks.',
+'imagenocrossnamespace' => 'Faili ei saa teisaldada mõnda muusse nimeruumi.',
 'nonfile-cannot-move-to-file' => 'Failinimeruumi saab ainult faile teisaldada.',
 'imagetypemismatch' => 'Uus faililaiend ei sobi selle tüübiga',
 'imageinvalidfilename' => 'Sihtmärgi nimi on vigane',
@@ -2933,7 +2934,7 @@ Viimasel juhul saab kasutada ka linki, näiteks lehekülje "[[{{MediaWiki:Mainpa
 'allmessagesdefault' => 'Vaiketekst',
 'allmessagescurrent' => 'Praegune tekst',
 'allmessagestext' => 'See on loend kõikidest olemasolevatest süsteemisõnumitest MediaWiki nimeruumis.
-Kui soovid MediaWiki tarkvara tõlkimises osaleda, siis vaata lehti [//www.mediawiki.org/wiki/Localisation MediaWiki lokaliseerimine] ja [//translatewiki.net translatewiki.net].',
+Kui soovid MediaWiki tarkvara tõlkimises osaleda, siis vaata lehti [https://www.mediawiki.org/wiki/Localisation MediaWiki lokaliseerimine] ja [//translatewiki.net translatewiki.net].',
 'allmessagesnotsupportedDB' => "Seda lehekülge ei saa kasutada, sest '''\$wgUseDatabaseMessages''' ei tööta.",
 'allmessages-filter-legend' => 'Filter',
 'allmessages-filter' => 'Muutmisoleku filter:',
@@ -3036,13 +3037,13 @@ Palun ürita uuesti.',
 'tooltip-pt-mytalk' => 'Sinu arutelulehekülg',
 'tooltip-pt-anontalk' => 'Arutelu sellelt IP-aadressilt tehtud muudatuste kohta',
 'tooltip-pt-preferences' => 'Sinu eelistused',
-'tooltip-pt-watchlist' => 'Lehekülgede loend, mida jälgid muudatuste osas',
+'tooltip-pt-watchlist' => 'Lehekülgede loend, mille muudatusi jälgid',
 'tooltip-pt-mycontris' => 'Sinu kaastööde loend',
 'tooltip-pt-login' => 'Me julgustame teid sisse logima, kuid see pole kohustuslik.',
 'tooltip-pt-anonlogin' => 'Me julgustame teid sisse logima, kuid see pole kohustuslik.',
 'tooltip-pt-logout' => 'Logi välja',
 'tooltip-ca-talk' => 'Selle artikli arutelu',
-'tooltip-ca-edit' => 'Saad seda lehekülge redigeerida. Palun kasuta enne salvestamist eelvaadet.',
+'tooltip-ca-edit' => 'Sa saad seda lehekülge muuta. Palun kasuta enne salvestamist eelvaadet.',
 'tooltip-ca-addsection' => 'Lisa uus alaosa',
 'tooltip-ca-viewsource' => 'See lehekülg on kaitstud.
 Saad vaadata selle lähteteksti.',
@@ -3066,9 +3067,9 @@ Saad vaadata selle lähteteksti.',
 'tooltip-n-randompage' => 'Mine juhuslikule leheküljele',
 'tooltip-n-help' => 'Kuidas redigeerida',
 'tooltip-t-whatlinkshere' => 'Kõik viki leheküljed, mis siia viitavad',
-'tooltip-t-recentchangeslinked' => 'Viimased muudatused lehekülgedel, milledele on siit viidatud',
+'tooltip-t-recentchangeslinked' => 'Viimased muudatused lehekülgedel, millele on siit viidatud',
 'tooltip-feed-rss' => 'Selle lehekülje RSS-toide',
-'tooltip-feed-atom' => 'Selle lehekülje Atom-toide',
+'tooltip-feed-atom' => 'Selle lehekülje Atom-fiid',
 'tooltip-t-contributions' => 'Kuva selle kasutaja kaastöö',
 'tooltip-t-emailuser' => 'Saada sellele kasutajale e-kiri',
 'tooltip-t-upload' => 'Laadi faile üles',
@@ -3089,7 +3090,7 @@ Saad vaadata selle lähteteksti.',
 'tooltip-save' => 'Salvesta muudatused',
 'tooltip-preview' => 'Näita tehtavaid muudatusi. Palun kasutage seda enne salvestamist!',
 'tooltip-diff' => 'Näita tehtavaid muudatusi.',
-'tooltip-compareselectedversions' => 'Näita erinevusi kahe selle lehe valitud versiooni vahel.',
+'tooltip-compareselectedversions' => 'Näita erinevusi selle lehe kahe valitud versiooni vahel.',
 'tooltip-watch' => 'Lisa see lehekülg oma jälgimisloendisse',
 'tooltip-watchlistedit-normal-submit' => 'Eemalda leheküljed',
 'tooltip-watchlistedit-raw-submit' => 'Uuenda jälgimisloendit',
@@ -3146,6 +3147,7 @@ See on ilmselt põhjustatud linkimisest mustas nimekirjas olevasse välisvõrguk
 'pageinfo-length' => 'Lehekülje pikkus (baitides)',
 'pageinfo-article-id' => 'Lehekülje identifikaator',
 'pageinfo-language' => 'Lehekülje sisu keel',
+'pageinfo-content-model' => 'Lehekülje sisumudel',
 'pageinfo-robot-policy' => 'Robotindekseering',
 'pageinfo-robot-index' => 'Lubatud',
 'pageinfo-robot-noindex' => 'Keelatud',
@@ -3232,7 +3234,7 @@ Selle avamine võib su arvutit kahjustada.",
 'svg-long-desc' => 'SVG-fail, algsuurus $1 × $2 pikslit, faili suurus: $3',
 'svg-long-desc-animated' => 'Animeeritud SVG-fail,  algsuurus $1 × $2 pikslit, faili suurus: $3',
 'svg-long-error' => 'Vigane SVG-fail: $1',
-'show-big-image' => 'Originaalsuurus',
+'show-big-image' => 'Algfail',
 'show-big-image-preview' => 'Selle eelvaate suurus: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Teine eraldusvõime|Teised eraldusvõimed}}: $1.',
 'show-big-image-size' => '$1 × $2 pikslit',
@@ -3676,7 +3678,7 @@ Kui faili on rakendustarkvaraga töödeldud, võib osa andmeid olla muudetud võ
 
 # External editor support
 'edit-externally' => 'Töötle faili välise programmiga',
-'edit-externally-help' => '(Vaata väliste redaktorite [//www.mediawiki.org/wiki/Manual:External_editors kasutusjuhendit])',
+'edit-externally-help' => '(Vaata väliste redaktorite [https://www.mediawiki.org/wiki/Manual:External_editors kasutusjuhendit])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'Näita kõiki',
@@ -3849,7 +3851,7 @@ Sa võid [[Special:EditWatchlist|kasutada ka harilikku tekstiredaktorit]].',
 'version-hook-subscribedby' => 'Tellijad',
 'version-version' => '(Versioon $1)',
 'version-license' => 'Litsents',
-'version-poweredby-credits' => "See viki kasutab '''[//www.mediawiki.org/ MediaWiki]''' tarkvara. Autoriõigus © 2001–$1 $2.",
+'version-poweredby-credits' => "See viki kasutab '''[https://www.mediawiki.org/ MediaWiki]''' tarkvara. Autoriõigus © 2001–$1 $2.",
 'version-poweredby-others' => 'teised',
 'version-poweredby-translators' => 'translatewiki.net-i tõlkijad',
 'version-credits-summary' => 'Tahame tunnustada järgmisi inimesi [[Special:Version|MediaWikile]] tehtud kaastöö eest.',
@@ -3868,7 +3870,7 @@ GNU Üldise Avaliku Litsentsi [{{SERVER}}{{SCRIPTPATH}}/COPYING eksemplar] peaks
 # Special:Redirect
 'redirect' => 'Ümbersuunamine faili, kasutaja või redaktsiooni identifikaatori järgi',
 'redirect-legend' => 'Ümbersuunamine faili juurde või leheküljele',
-'redirect-summary' => 'See erilehekülg suunab ümber faili (toodud failinimi), lehekülje (toodud redaktsiooni identifikaator) või kasutajalehekülje (toodud numbriline kasutaja identfikaator) juurde.',
+'redirect-summary' => 'See erilehekülg suunab ümber faili (toodud failinimi), lehekülje (toodud redaktsiooni identifikaator) või kasutajalehekülje (toodud numbriline kasutaja identfikaator) juurde. Kasutamine: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]] või [[{{#Special:Redirect}}/user/101]].',
 'redirect-submit' => 'Mine',
 'redirect-lookup' => 'Leia:',
 'redirect-value' => 'Väärtus:',
@@ -3890,8 +3892,7 @@ GNU Üldise Avaliku Litsentsi [{{SERVER}}{{SCRIPTPATH}}/COPYING eksemplar] peaks
 
 # Special:SpecialPages
 'specialpages' => 'Erileheküljed',
-'specialpages-note' => '----
-* Harilikud erileheküljed
+'specialpages-note' => '* Harilikud erileheküljed
 * <span class="mw-specialpagerestricted">Piiranguga erileheküljed</span>
 * <span class="mw-specialpagecached">Uuendamata sisuga erileheküljed (ei pruugi enam kasutuses olla)</span>',
 'specialpages-group-maintenance' => 'Hooldusaruanded',
index 9d5c753..338fb38 100644 (file)
@@ -133,12 +133,12 @@ $messages = array(
 'tog-hidepatrolled' => 'Ezkutatu patruilatutako aldaketa azken aldaketetan',
 'tog-newpageshidepatrolled' => 'Ezkutatu patruilatutako orriak, orri-zerrenda berritik',
 'tog-extendwatchlist' => 'Jarraipen-zerrenda zabaldu aldaketa guztiak ikusteko, ez bakarrik azken aldaketak',
-'tog-usenewrc' => 'Azken aldaketetan eta jarraipen-zerrendan aldaketak orrialdearen arabera taldekatu (JavaScript behar da)',
+'tog-usenewrc' => 'Azken aldaketetan eta jarraipen-zerrendan aldaketak orrialdearen arabera taldekatu',
 'tog-numberheadings' => 'Goiburukoak automatikoki zenbakitu',
-'tog-showtoolbar' => 'Aldaketen tresna-barra erakutsi (JavaScript)',
-'tog-editondblclick' => 'Klik bikoitzaren bitartez orrialdeak aldatu (JavaScript)',
+'tog-showtoolbar' => 'Aldaketen tresna-barra erakutsi',
+'tog-editondblclick' => 'Klik bikoitzaren bitartez orrialdeak aldatu',
 'tog-editsection' => 'Atalak [aldatu] loturen bitartez aldatzeko aukera gaitu',
-'tog-editsectiononrightclick' => 'Atalen izenburuetan klik eginez atala<br />aldatzea gaitu (JavaScript)',
+'tog-editsectiononrightclick' => 'Atalen izenburuetan eskuin klik eginez aldatzea gaitu',
 'tog-showtoc' => 'Edukien taula erakutsi (3 goiburukotik gorako orrialdeentzako)',
 'tog-rememberpassword' => 'Nire saioa ordenagailu honetan gorde ({{PLURAL:$1|egun baterako| $1 egunerako}} gehienez)',
 'tog-watchcreations' => 'Sortzen ditudan orrialdeak eta fitxategiak nire jarraipen-zerrendara gehitu',
@@ -156,7 +156,7 @@ $messages = array(
 'tog-shownumberswatching' => 'Jarraitzen duen erabiltzaile kopurua erakutsi',
 'tog-oldsig' => 'Egungo sinadura:',
 'tog-fancysig' => 'Sinadura wikitestu gisa tratatu (lotura automatikorik gabe)',
-'tog-uselivepreview' => 'Zuzeneko aurrebista erakutsi (JavaScript) (Proba fasean)',
+'tog-uselivepreview' => 'Zuzeneko aurrebista erakutsi (Proba fasean)',
 'tog-forceeditsummary' => 'Aldaketaren laburpena zuri uzterakoan ohartarazi',
 'tog-watchlisthideown' => 'Segimendu zerrendan nire aldaketak ezkutatu',
 'tog-watchlisthidebots' => 'Segimendu zerrendan bot-en aldaketak ezkutatu',
@@ -269,7 +269,7 @@ $messages = array(
 'newwindow' => '(leiho berrian irekitzen da)',
 'cancel' => 'Utzi',
 'moredotdotdot' => 'Gehiago...',
-'morenotlisted' => 'Zerrendatu gabeko gehiago...',
+'morenotlisted' => 'Zerrenda hau ez dago osorik.',
 'mypage' => 'Orrialdea',
 'mytalk' => 'Eztabaida',
 'anontalk' => 'IP honen eztabaida',
@@ -351,7 +351,7 @@ $messages = array(
 'viewhelppage' => 'Laguntza orrialdea ikusi',
 'categorypage' => 'Kategoria orrialdea ikusi',
 'viewtalkpage' => 'Eztabaida ikusi',
-'otherlanguages' => 'Beste hizkuntzetan',
+'otherlanguages' => 'Erdaretan',
 'redirectedfrom' => '($1(e)tik birzuzenduta)',
 'redirectpagesub' => 'Birzuzenketa orrialdea',
 'lastmodifiedat' => 'Orrialdearen azken aldaketa: $2, $1.',
@@ -372,7 +372,7 @@ $1',
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
 'aboutsite' => '{{SITENAME}}(e)ri buruz',
 'aboutpage' => 'Project:Honi_buruz',
-'copyright' => 'Eduki guztia $1(r)en babespean dago.',
+'copyright' => 'Eduki guztia $1(r)en babespean dago, ez bada kontrakoa esaten.',
 'copyrightpage' => '{{ns:project}}:Eskubideak',
 'currentevents' => 'Albisteak',
 'currentevents-url' => 'Project:Albisteak',
@@ -455,6 +455,10 @@ Existitzen direnen zerrenda ikus dezakezu  [[Special:SpecialPages|{{int:specialp
 # General errors
 'error' => 'Errorea',
 'databaseerror' => 'Datu-base errorea',
+'databaseerror-textcl' => 'Datubasearen eskera akats bat gertatu da.',
+'databaseerror-query' => 'Eskaera: $1',
+'databaseerror-function' => 'Funtzioa: $1',
+'databaseerror-error' => 'Akatsa: $1',
 'laggedslavemode' => 'Oharra: Baliteke orrialde honetan azken aldaketak ez erakustea.',
 'readonly' => 'Datu-basea blokeatuta dago',
 'enterlockreason' => 'Zehaztu blokeatzeko arrazoia, noiz kenduko den jakinaraziz',
@@ -488,6 +492,7 @@ Baliteke beste norbaitek ezabatu izana.',
 'cannotdelete-title' => 'Ezin da "$1" orrialdea ezabatu',
 'delete-hook-aborted' => 'Ezabatzea hook batek gelditu du.
 Ez du arrazoirik eman.',
+'no-null-revision' => 'Ezin izan da "$1" orrialdearen berrikuspen huts bat sortu',
 'badtitle' => 'Izenburu ezegokia',
 'badtitletext' => 'Eskatutako orrialde izenburua ez da baliozkoa, hutsik dago, edo gaizki lotutako hizkuntzen arteko lotura da. Baliteke izenburuetan erabili ezin den karaktereren bat izatea.',
 'perfcached' => 'Hurrengo datuak katxean gordeta daude eta litekeena da guztiz eguneratuta ez egotea. Gehienez {{PLURAL:$1|emaitza 1 dago|$1 emaitza daude}} eskuragarri katxean.',
@@ -516,6 +521,8 @@ $2",
 'customjsprotected' => 'Ez duzu baimenik JavaScript orrialde hau aldatzeko beste erabiltzaile baten hobespen pertsonalak dituelako.',
 'mycustomcssprotected' => 'Ez duzu baimenik CSS orrialde hau aldatzeko.',
 'mycustomjsprotected' => 'Ez duzu baimentik JavaScript orrialdea aldatzeko.',
+'myprivateinfoprotected' => 'Ez duzu eskumenik zure informazio pribatua aldatzeko.',
+'mypreferencesprotected' => 'Ez daukazu eskumenik zure hobespenak aldatzeko.',
 'ns-specialprotected' => 'Ezin dira {{ns:special}} izen-tarteko orrialdeak editatu.',
 'titleprotected' => "[[User:$1|$1]]ek izenburu hau sortzea ekidin zuen.
 Emandako arrazoia ''$2'' izan zen.",
@@ -535,8 +542,7 @@ Blokeoa ezarri zuen administratzaileak honako arrazoia eman zuen: "$3".',
 # Login and logout pages
 'logouttext' => "'''Saioa itxi egin duzu.'''
 
-Erabiltzaile anonimo bezala jarrai dezakezu {{SITENAME}} erabiltzen, edo <span class='plainlinks'>[$1 saioa has dezakezu berriz]</span> erabiltzaile berdinarekin edo ezberdin batekin.
-Kontuan izan orrialde batzuk saioa hasita bazenu bezala ikus ditzakezula nabigatzailearen katxea garbitu arte.",
+Jakin ezazu hainbat orrialdetan ager daitekela oraindik saioa ez duzula itxi, zure nabigatzailearen katxea garbitzen ez duzun arte.",
 'welcomeuser' => 'Ongi etorri, $1!',
 'welcomecreation-msg' => 'Zure kontua sortua izan da.
 Ez ezazu ahaztu zure [[Special:Preferences|{{SITENAME}} hobespenak]] aldatzea.',
@@ -573,15 +579,19 @@ Ez ezazu ahaztu zure [[Special:Preferences|{{SITENAME}} hobespenak]] aldatzea.',
 'gotaccount' => "Baduzu erabiltzaile kontua? '''$1'''.",
 'gotaccountlink' => 'Saioa hasi',
 'userlogin-resetlink' => 'Saioa hasteko datuak ahaztu dituzu?',
-'userlogin-resetpassword-link' => 'Zure pasahitza berrezarri',
+'userlogin-resetpassword-link' => 'Zure pasahitza ahaztu duzu?',
 'helplogin-url' => 'Help:Sarrera',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Barrura sartzeko laguntza]]',
+'userlogin-loggedin' => 'Dagoeneko izena emana zaude {{GENDER:$1|$1}}.
+Beheko formularioa erabil ezazu beste erabiltzaile baten izenean sartzeko.',
+'userlogin-createanother' => 'Beste kontu bat sortu',
 'createacct-join' => 'Sartu zure informazioa azpian.',
+'createacct-another-join' => 'Sartu kontu berriaren informazioa azpian.',
 'createacct-emailrequired' => 'E-posta helbidea',
 'createacct-emailoptional' => 'E-posta helbidea (hautazkoa)',
 'createacct-email-ph' => 'Sartu zure e-posta helbidea',
 'createacct-another-email-ph' => 'Posta elektronikoaren helbidea sartu',
-'createaccountmail' => 'Erabili behin-behineko pasahitz ausazko bat eta bidali behean agertzeko den e-posta helbidera',
+'createaccountmail' => 'Erabili behin-behineko pasahitz ausazko bat eta bidali agertzen den e-posta helbidera',
 'createacct-realname' => 'Benetako izena (hautazkoa)',
 'createaccountreason' => 'Arrazoia:',
 'createacct-reason' => 'Arrazoia',
@@ -634,14 +644,15 @@ eta aurretik zenuen pasahitza erabiltzen jarrai ezazu.',
 Mesedez, saioa hasi jasotakoan.',
 'blocked-mailpassword' => 'Zure IP helbidea aldaketak egiteko blokeatuta dago, eta beraz ezin da pasahitza berreskuratzeko aukera erabili.',
 'eauthentsent' => 'Egiaztapen mezu bat bidali da zehaztutako e-posta helbidera.
-Helbide horretara beste edozein mezu bidali aurretik, bertan azaltzen diren argibideak jarraitu behar dituzu, e-posta hori zurea dela egiaztatzeko.',
+Helbide horretara beste edozein mezu bidali aurretik, bertan azaltzen diren argibideak jarraitu behar dituzu, kontua zurea dela egiaztatzeko.',
 'throttled-mailpassword' => 'Pasahitz gogorarazle bat bidali da jada azken {{PLURAL:$1|orduan|$1 orduetan}}.
 Bandalismoa sahiesteko pasahitz eskaera bat baino ezin da egin {{PLURAL:$1|orduan|$1 orduan}} behin.',
 'mailerror' => 'Errorea mezua bidaltzerakoan: $1',
 'acct_creation_throttle_hit' => 'Sentitzen dugu, {{PLURAL:$1|erabiltzaile kontu bat sortu duzu|$1 erabiltzaile kontu sortu dituzu}} dagoeneko.
 Ondorioz, ezin duzu kontu gehiago sortu.',
 'emailauthenticated' => 'Zure e-posta helbidea autentifikatu da $2an $3(e)tan.',
-'emailnotauthenticated' => 'Zure posta helbidea egiaztatu gabe dago. Ez da mezurik bidaliko hurrengo ezaugarrientzako.',
+'emailnotauthenticated' => 'Zure posta helbidea egiaztatu gabe dago. 
+Ez da mezurik bidaliko hurrengo ezaugarrientzako.',
 'noemailprefs' => 'Zehaztu e-posta helbide bat ezaugarri hauek erabili ahal izateko.',
 'emailconfirmlink' => 'Egiaztatu zure e-posta helbidea',
 'invalidemailaddress' => 'Ezin da e-posta helbide hori ontzat eman baliogabeko formatua duela dirudielako.
@@ -658,10 +669,12 @@ Orain bertan sar zaitezke eta zure pasahitza aldatu.
 Kontu honen sorrera akats bat dela uste baduzu mezu honi ez diozu zertan jaramonik egin.',
 'usernamehasherror' => 'Erabiltzaile-izenak ezin du kuxin-karaktererik eduki',
 'login-throttled' => 'Saioa hasteko saiakera gehiegi egin berri dituzu.
-Berriro saiatu aurretik itxaron ezazu, mesedez.',
+Berriro saiatu aurretik $1 itxoin, mesedez.',
 'login-abort-generic' => 'Zure sarrera ez da arrakastatsua izan - Abortatua',
 'loginlanguagelabel' => 'Hizkuntza: $1',
 'suspicious-userlogout' => 'Saioa amaitzeko egin duzun eskaria ukatu da. Izan ere, ematen du eskari hori gaizki dabilen nabigatzaile edo cache proxy batek bidali duela.',
+'createacct-another-realname-tip' => 'Benetako izena hautazkoa da.
+Ematea erabakitzen baduzu hori erabiliko da lanaren atribuzioa egiterako garaian.',
 
 # Email sending
 'php-mail-error-unknown' => 'PHPren mail() funtzioan arazo ezezagun bat egon da.',
@@ -677,7 +690,7 @@ Berriro saiatu aurretik itxaron ezazu, mesedez.',
 'newpassword' => 'Pasahitz berria:',
 'retypenew' => 'Pasahitz berria berriz idatzi:',
 'resetpass_submit' => 'Pasahitza definitu eta saioa hasi',
-'changepassword-success' => 'Zure pasahitza aldatu egin da! Saioa hasten...',
+'changepassword-success' => 'Zure pasahitza ondo aldatu da!',
 'resetpass_forbidden' => 'Ezin dira pasahitzak aldatu',
 'resetpass-no-info' => 'Orrialde honetara zuzenean sartzeko izena eman behar duzu.',
 'resetpass-submit-loggedin' => 'Pasahitza aldatu',
@@ -703,6 +716,7 @@ Agian dagoeneko ondo aldatu duzu zure pasahitza edo behin-behineko pasahitza bat
 'passwordreset-emailelement' => 'Erabiltzaile izena: $1
 Behin-behineko pasahitza: $2',
 'passwordreset-emailsent' => 'Pasahitza berrezartzeko e-posta bidali da.',
+'passwordreset-emailsent-capture' => 'Pasahitza berrezartzeko e-posta bat bidali dizugu, behean erakusten dena.',
 
 # Special:ChangeEmail
 'changeemail' => 'Aldatu e-mail helbidea',
@@ -716,6 +730,16 @@ Behin-behineko pasahitza: $2',
 'changeemail-submit' => 'E-posta aldatu',
 'changeemail-cancel' => 'Utzi',
 
+# Special:ResetTokens
+'resettokens' => 'Tokenak berrezarri',
+'resettokens-no-tokens' => 'Ez dago tokenik berrezartzeko.',
+'resettokens-legend' => 'Tokenak berrezarri',
+'resettokens-tokens' => 'Tokenak:',
+'resettokens-token-label' => '$1 (oraingo balioa: $2)',
+'resettokens-watchlist-token' => '(Atom/RSS) jarioarentzako tokenak [[Special:Watchlist|jarraitzen dituzun orrialdeen aldaketetarako]]',
+'resettokens-done' => 'Tokenak berrezarrita.',
+'resettokens-resetbutton' => 'Hautatutako tokenak berrezarri',
+
 # Edit page toolbar
 'bold_sample' => 'Letra lodiko testua',
 'bold_tip' => 'Letra lodiko testua',
@@ -794,7 +818,7 @@ Baliteke orrialdea begiratzen zenuen bitartean norbaitek ezabatu edo izenburua a
 'accmailtitle' => 'Pasahitza bidali da.',
 'accmailtext' => "[[User talk:$1|$1]]-entzako ausaz sortutako pasahitza $2-(r)a bidali da.
 
-Kontu berri honentzako pasahitza edozein unetan alda daiteke ''[[Special:ChangePassword|pasahitz aldaketa]]'' orrian, saioa hasi ondoren.",
+''[[Special:ChangePassword|pasahitz aldaketa]]'' orrialdean alda daiteke, behin barruan sartuta.",
 'newarticle' => '(Berria)',
 'newarticletext' => "Orrialde hau ez da existitzen oraindik. Orrialde sortu nahi baduzu, beheko koadroan idazten hasi zaitezke (ikus [[{{MediaWiki:Helppage}}|laguntza orrialdea]] informazio gehiagorako). Hona nahi gabe etorri bazara, nabigatzaileko '''atzera''' botoian klik egin.",
 'anontalkpagetext' => "----''Orrialde hau konturik sortu ez edo erabiltzen ez duen erabiltzaile anonimo baten eztabaida orria da.
@@ -842,6 +866,7 @@ Zure aldaketak ez dira oraindik gorde!",
 'token_suffix_mismatch' => "'''Zure aldaketa ezeztatua izan da zure bezeroak puntuazio-karaktereak itxuragabetu dituelako.
 Aldaketa ezeztatua izan da testuaren galtzea galarazteko.
 Hau batzuetan gertatzen da buggyan oinarritutako web proxy zerbitzua erabiltzean.'''",
+'edit_form_incomplete' => "'''Aldaketa formularioaren atal batzuk ez dira iritsi zerbitzarira; bi aldiz ziurtatu zure aldaketak osorik daudela eta berriro saiatu.'''",
 'editing' => '$1 aldatzen',
 'creating' => '$1 sortzen',
 'editingsection' => '$1 aldatzen (atala)',
@@ -1125,6 +1150,7 @@ Kontura zaitez nabigazio loturek, zutabea ezabatu dezakela.',
 'compareselectedversions' => 'Hautatutako bertsioak alderatu',
 'showhideselectedversions' => 'Erakutsi/ezkutatu aukeratutako berrikuspenak',
 'editundo' => 'desegin',
+'diff-empty' => '(Ez dago alderik)',
 'diff-multi' => '({{PLURAL:$1|Ez da tarteko berrikuspen bat|Ez dira tarteko $1 berrikuspen}} erakusten {{PLURAL:$2|lankide batena|$2 lankiderena}}.)',
 
 # Search results
@@ -1194,7 +1220,6 @@ Saia zaitez zure eskeraren aurretik ''all:'' jartzen eduki guztien artean bilatz
 'mypreferences' => 'Hobespenak',
 'prefs-edits' => 'Aldaketa kopurua:',
 'prefsnologin' => 'Saioa hasi gabe',
-'prefsnologintext' => '<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} Izena eman]</span> behar duzu zure hobespenak ezartzeko.',
 'changepassword' => 'Pasahitza aldatu',
 'prefs-skin' => 'Itxura',
 'skin-preview' => 'Aurrebista',
@@ -1219,7 +1244,7 @@ Saia zaitez zure eskeraren aurretik ''all:'' jartzen eduki guztien artean bilatz
 'prefs-rendering' => 'Itxura',
 'saveprefs' => 'Gorde',
 'resetprefs' => 'Hasieratu',
-'restoreprefs' => 'Konfigurazio lehenetsi guztiak berrezarri',
+'restoreprefs' => 'Konfigurazio lehenetsi guztiak berrezarri (sekzio guztietan)',
 'prefs-editing' => 'Aldatzen',
 'rows' => 'Lerroak:',
 'columns' => 'Zutabeak:',
@@ -1290,6 +1315,8 @@ Informazio hau publikoa da.',
 'prefs-dateformat' => 'Data-formatua',
 'prefs-timeoffset' => 'Denbora ezberdintasuna',
 'prefs-advancedediting' => 'Genero aukerak',
+'prefs-editor' => 'Editorea',
+'prefs-preview' => 'Aurreikusi',
 'prefs-advancedrc' => 'Aukera aurreratuak',
 'prefs-advancedrendering' => 'Aukera aurreratuak',
 'prefs-advancedsearchoptions' => 'Aukera aurreratuak',
@@ -1298,6 +1325,7 @@ Informazio hau publikoa da.',
 'prefs-displaysearchoptions' => 'Aukerak erakutsi',
 'prefs-displaywatchlist' => 'Aukerak erakutsi',
 'prefs-diffs' => 'Ezberdintasunak',
+'prefs-help-prefershttps' => 'Hobespen hauek eragina izango dute sartzen zaren hurrengoan.',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-posta helbidea zuzena dela dirudi',
@@ -1456,9 +1484,15 @@ Informazio hau publikoa da.',
 'action-userrights-interwiki' => 'beste wikietako lankideen lankide-eskumenak aldatu',
 'action-siteadmin' => 'datubasea babestu edo babesa kendu',
 'action-sendemail' => 'E-mailak bidali',
+'action-editmywatchlist' => 'zure jarraipn zerrenda aldatu',
+'action-viewmywatchlist' => 'zure jarraipen zerrenda ikusi',
+'action-viewmyprivateinfo' => 'zure informazio pribatua ikusi',
+'action-editmyprivateinfo' => 'zure informazio pribatua aldatu',
 
 # Recent changes
 'nchanges' => '{{PLURAL:$1|aldaketa 1|$1 aldaketa}}',
+'enhancedrc-since-last-visit' => '$1 {{PLURAL:$1|azkeneko bisitatik}}',
+'enhancedrc-history' => 'historia',
 'recentchanges' => 'Aldaketa berriak',
 'recentchanges-legend' => 'Azken aldaketen aukerak',
 'recentchanges-summary' => 'Orri honetan ikuska ditzakezu wiki honetan egindako azken aldaketak.',
@@ -1640,6 +1674,8 @@ $1',
 'backend-fail-read' => 'Ezin izan da "$1" fitxategia irakurri.',
 'backend-fail-create' => 'Ezin izan da "$1" fitxategia idatzi.',
 'backend-fail-maxsize' => 'Ezin izan da idatzi "$1" fitxategia {{PLURAL:$2|byte bat|$2 byte}} baino handiagoa delako.',
+'backend-fail-connect' => 'Ezin izan da "$1" gordailuaren atzeko aldearekin konektatu.',
+'backend-fail-internal' => 'Akats ezezaguna gertatu da "$1" gordailuaren atzeko aldean.',
 
 # Lock manager
 'lockmanager-notlocked' => 'Ezin izan da "$1" askatu; ez dago itxita.',
@@ -1647,12 +1683,18 @@ $1',
 'lockmanager-fail-deletelock' => 'Ezin izan da "$1" fitxategia desblokeatu.',
 'lockmanager-fail-acquirelock' => 'Ezin izan da "$1" blokeoa eskuratu.',
 'lockmanager-fail-openlock' => 'Ezin izan da "$1" blokeo fitxategia ireki.',
+'lockmanager-fail-releaselock' => 'Ezin izan da "$1" blokeoa askatu.',
+'lockmanager-fail-db-bucket' => 'Ezin izan dut $1 buketean datubase nahikoa ziurtatu.',
+'lockmanager-fail-db-release' => 'Ezin izan da $1 datubasean giltzaraporik askatu.',
 
 # ZipDirectoryReader
 'zip-wrong-format' => 'Zehaztutako fitxategia ez zen ZIP motakoa.',
 
 # Special:UploadStash
 'uploadstash' => 'Gordailu bat igo',
+'uploadstash-clear' => 'Kodetutako fitxategiak izkutatu',
+'uploadstash-nofiles' => 'Ez duzu kodetutako fitxategirik.',
+'uploadstash-errclear' => 'Fitxategiak ezabatzeak ez du arrakastarik izan.',
 'uploadstash-refresh' => 'Fitxategien zerrenda eguneratu',
 
 # img_auth script messages
@@ -1792,6 +1834,9 @@ Bere [$2 fitxategiaren deskribapen orrialdea] behean dago.',
 'randompage' => 'Ausazko orria',
 'randompage-nopages' => 'Ez dago orrialderik honako {{PLURAL:$2|kategorian|kategoriatan}}: $1',
 
+# Random page in category
+'randomincategory-selectcategory-submit' => 'Joan',
+
 # Random redirect
 'randomredirect' => 'Ausazko birzuzenketa',
 'randomredirect-nopages' => 'Ez dago birzuzenketarik "$1" izen-tartean.',
@@ -2019,6 +2064,7 @@ Badago [[{{MediaWiki:Listgrouprights-helppage}}|informazio osagarria]] banakako
 'noemailtext' => 'Erabiltzaile honek ez du baliozko e-posta helbiderik zehaztu.',
 'nowikiemailtitle' => 'Ezin da e-postarik bidali',
 'nowikiemailtext' => 'Erabiltzaile honek beste erabiltzaileengandik e-postak ez jasotzea hautatu du.',
+'emailnotarget' => 'Jasotzailearentzat lankide izen ez-egokia edo ezezaguna.',
 'emailtarget' => 'Sartu jasolearen erabiltzaile izena',
 'emailusername' => 'Lankide izena:',
 'emailusernamesubmit' => 'Bidali',
@@ -2246,11 +2292,8 @@ Aukeratutako leheneratze bat burutzeko, leheneratu nahi dituzun berrikuspenen ko
 'undeleterevisions' => '$1 {{PLURAL:$1|berrikuspen|berrikuspen}} artxibatuta',
 'undeletehistory' => 'Orrialdea leheneratzen baduzu, berrikuspena guztiak leheneratuko dira historian.
 Ezabatu ondoren izen berdina duen orrialde berri bat sortzen bada leheneratutako berrikuspenak azalduko dira historian.',
-'undeleterevdel' => 'Berrezarpena ez da egingo goreneko orrialde edo fitxategia partzialki ezabatua suertatzen bada.
-Kasu horietan ezabatutako azken aldaketen aukeraketa kendu edo agertarazi beharko dituzu.
-
-Undeletion will not be performed if it will result in the top page or file revision being partially deleted.
-In such cases, you must uncheck or unhide the newest deleted revision.',
+'undeleterevdel' => 'Desezabatzea ez da egingo, baldin horren ondorioz goreneko orria edo fitxategia partzialki ezabatuko bada.
+Halakoetan, ezabatutako azken aldaketak desaukeratu edo atzera agerrarazi beharko dituzu.',
 'undeletehistorynoadmin' => 'Artikulua ezabatu egin da. Ezabatzeko azalpena beheko laburpenean erakusten da, ezabatu aurretik parte hartu zuten erabiltzaileen xehetasunekin batera. Ezabatutako berrikuspenen oraingo testua administratzaileek bakarrik ikus dezakete.',
 'undelete-revision' => '$1(e)n berrikuspen $3(e)k ezabatu du ($4(e)ko $5(e)tan):',
 'undeleterevision-missing' => 'Baliogabeko berrikuspena. Baliteke lotura ezegokia izatea, edo berriskupena leheneratu edo kendu izana.',
@@ -2259,7 +2302,7 @@ In such cases, you must uncheck or unhide the newest deleted revision.',
 'undeletelink' => 'ikusi/leheneratu',
 'undeleteviewlink' => 'ikusi',
 'undeletereset' => 'Hasieratu',
-'undeleteinvert' => 'Aukeraketa alderanztu',
+'undeleteinvert' => 'Alderanztu aukera',
 'undeletecomment' => 'Arrazoia:',
 'undeletedrevisions' => '{{PLURAL:$1|Berrikuspen 1 leheneratu da|$1 berrikuspen leheneratu dira}}',
 'undeletedrevisions-files' => '{{PLURAL:$1|berrikuspen|berrikuspen}} eta {{PLURAL:$2|fitxategi|fitxategi}} leheneratu dira',
@@ -2576,7 +2619,7 @@ Horrez gain, lotura zuzena ere erabil dezakezu; adibidez, [[{{#Special:Export}}/
 'allmessagesdefault' => 'Testu lehenetsia',
 'allmessagescurrent' => 'Oraingo testua',
 'allmessagestext' => 'MediaWikin erabiltzen diren mezu guztien zerrenda.
-Mesedez bisitatu [//www.mediawiki.org/wiki/Localisation MediaWiki] eta [//translatewiki.net translatewiki.net] orrialdeak MediaWikira ekarpenak egin badituzu.',
+Mesedez bisitatu [https://www.mediawiki.org/wiki/Localisation MediaWiki] eta [//translatewiki.net translatewiki.net] orrialdeak MediaWikira ekarpenak egin badituzu.',
 'allmessagesnotsupportedDB' => "Ezin da '''{{ns:special}}:Allmessages''' erabili '''\$wgUseDatabaseMessages''' ezgaituta dagoelako.",
 'allmessages-filter-legend' => 'Iragazi',
 'allmessages-filter' => 'Aldaketa-egoeraren arabera iragazi:',
@@ -2639,6 +2682,8 @@ Fitxategiaren atal bat baino ez zen igo.',
 'import-upload' => 'Igo XML datuak',
 'import-token-mismatch' => 'Sesio data galdu da. Saia saitez berriro ere, mesedez.',
 'import-invalid-interwiki' => 'Ezin da esandako wikitik inportatu.',
+'import-rootpage-invalid' => 'Emandako jatorri orrialdea izenburu ez-baliagarria da.',
+'import-rootpage-nosubpage' => 'Jatorri orrialdearen "$1" izen-tarteak ez du baimentzen azpi-orrialderik.',
 
 # Import log
 'importlogpage' => 'Inportazio erregistroa',
@@ -2651,6 +2696,12 @@ Fitxategiaren atal bat baino ez zen igo.',
 # JavaScriptTest
 'javascripttest' => 'JavaScript frogatzen',
 'javascripttest-title' => '$1 frogak egiten',
+'javascripttest-pagetext-noframework' => 'Orrialde hau JavaScript frogak egiteko gordeta dago.',
+'javascripttest-pagetext-unknownframework' => 'Froga eremu ez-ezaguna "$1".',
+'javascripttest-pagetext-frameworks' => 'Mesedez, aukera ezazu froga eremu hauetako bat: $1',
+'javascripttest-pagetext-skins' => 'Aukeratu frogak egiteko itxura bat:',
+'javascripttest-qunit-intro' => 'Ikusi [$1 frogen dokumentazioa] mediawiki.org orrialdean.',
+'javascripttest-qunit-heading' => 'MediWiki JavaScript QUnit froga taldea',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Nire lankide orria',
@@ -2768,14 +2819,15 @@ Atal hau '''EZ''' bete!",
 'pageinfo-length' => 'Orriaren neurria (byteak)',
 'pageinfo-article-id' => 'Orriaren identifikazio zenbakia',
 'pageinfo-language' => 'Orriaren edukiaren hizkuntza',
-'pageinfo-robot-policy' => 'Bilaketa motorraren egoera',
-'pageinfo-robot-index' => 'Indexagarria',
-'pageinfo-robot-noindex' => 'Indexaezina',
+'pageinfo-robot-policy' => 'Errobotak indexatzea egiten',
+'pageinfo-robot-index' => 'Baimendua',
+'pageinfo-robot-noindex' => 'Debekatua',
 'pageinfo-views' => 'Bistaratze-kopurua',
 'pageinfo-watchers' => 'Orriaren jarraitzaileen kopurua',
 'pageinfo-few-watchers' => '{{PLURAL:$1|Ikusle bat|$1 ikusle}} baino gutxiago',
 'pageinfo-redirects-name' => 'Orri honetara dakarten birzuzenketak',
 'pageinfo-subpages-name' => 'Orri honen azpiorriak',
+'pageinfo-subpages-value' => '$1 ({{PLURAL:$2|birzuzenketa $2|$2 birzuzenketa}}; {{PLURAL:$3|ez-birzuzenketa $3|$3 ez-birzuzenketa}}',
 'pageinfo-firstuser' => 'Orriaren sortzailea',
 'pageinfo-firsttime' => 'Orriaren sortze data',
 'pageinfo-lastuser' => 'Azken editorea',
@@ -2784,6 +2836,7 @@ Atal hau '''EZ''' bete!",
 'pageinfo-authors' => 'Egile kopurua, guztira',
 'pageinfo-recent-edits' => 'Oraintsuko edizioen kopurua (azken $1)',
 'pageinfo-recent-authors' => 'Oraintsuko egileen kopurua',
+'pageinfo-magic-words' => 'Hitz {{PLURAL:$1|magikoa|magikoak}} ($1)',
 'pageinfo-hidden-categories' => 'Ezkutuko {{PLURAL:$1|kategoria|kategoriak}} ($1)',
 'pageinfo-templates' => 'Txertatutako {{PLURAL:$1|txantiloia|txantiloiak}} ($1)',
 'pageinfo-toolboxlink' => 'Orri honen datuak',
@@ -3106,10 +3159,12 @@ Zerrenda elementuak (hasieran * duten lerroak) baino ez dira kontuan hartzen. Le
 # Exif attributes
 'exif-compression-1' => 'Konprimatu gabe',
 'exif-compression-2' => 'CCITT Group 3 1-Dimensional Modified Huffman kodetzea abiatu da',
+'exif-compression-3' => 'CCITT Group 3 fax kodetzea',
+'exif-compression-4' => 'CCITT Group 4 fax kodetzea',
 'exif-compression-6' => 'JPEG',
 
 'exif-copyrighted-true' => 'Copyrightduna',
-'exif-copyrighted-false' => 'Domeinu askea',
+'exif-copyrighted-false' => 'Copyright egoera ez da ezarri',
 
 'exif-photometricinterpretation-2' => 'GBU (RGB)',
 'exif-photometricinterpretation-6' => 'YCbCr',
@@ -3292,8 +3347,10 @@ Zerrenda elementuak (hasieran * duten lerroak) baino ez dira kontuan hartzen. Le
 'exif-gpsdirection-m' => 'Norabide magnetikoa',
 
 'exif-ycbcrpositioning-1' => 'Zentratua',
+'exif-ycbcrpositioning-2' => 'Gune partekatua',
 
 'exif-dc-contributor' => 'Egileak',
+'exif-dc-coverage' => 'Media honen denbora- edo leku-esparrua',
 'exif-dc-date' => 'Data(k)',
 'exif-dc-publisher' => 'Argitaratzailea',
 'exif-dc-relation' => 'Harremana duen media',
@@ -3330,7 +3387,7 @@ Zerrenda elementuak (hasieran * duten lerroak) baino ez dira kontuan hartzen. Le
 
 # External editor support
 'edit-externally' => 'Fitxategi hau editatu kanpo-aplikazio bat erabiliz',
-'edit-externally-help' => '(Ikus [//www.mediawiki.org/wiki/Manual:External_editors konfiguraziorako argibideak] informazio gehiagorako)',
+'edit-externally-help' => '(Ikus [https://www.mediawiki.org/wiki/Manual:External_editors konfiguraziorako argibideak] informazio gehiagorako)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'guztiak',
@@ -3474,7 +3531,7 @@ Halaber [[Special:EditWatchlist|aldatzaile estandarra]] erabil dezakezu.',
 'version-hook-subscribedby' => 'Hauen harpidetzarekin',
 'version-version' => '(Bertsioa $1)',
 'version-license' => 'Lizentzia',
-'version-poweredby-credits' => "Wiki hau '''[//www.mediawiki.org/ MediaWiki]'''k sustatzen du (copyright © 2001-$1 $2).",
+'version-poweredby-credits' => "Wiki hau '''[https://www.mediawiki.org/ MediaWiki]'''k sustatzen du (copyright © 2001-$1 $2).",
 'version-poweredby-others' => 'beste batzuk',
 'version-software' => 'Instalatutako softwarea',
 'version-software-product' => 'Produktua',
@@ -3503,11 +3560,11 @@ Halaber [[Special:EditWatchlist|aldatzaile estandarra]] erabil dezakezu.',
 'fileduplicatesearch-info' => '$1 × $2 pixel<br />Fitxategiaren tamaina: $3<br />MIME mota: $4',
 'fileduplicatesearch-result-1' => '"$1" fitxategiak ez du duplikazio zehazki berdinik.',
 'fileduplicatesearch-result-n' => '"$1" fitxategiak {{PLURAL:$2|kopia zehatz bakarra du|$2 kopia zehatz ditu}}.',
+'fileduplicatesearch-noresults' => 'Ez da aurkitu "$1" izeneko fitxategirik.',
 
 # Special:SpecialPages
 'specialpages' => 'Orri bereziak',
-'specialpages-note' => '----
-* Orri berezi arruntak.
+'specialpages-note' => '* Orri berezi arruntak.
 * <strong class="mw-specialpagerestricted">Mugatutako orri bereziak.</strong>',
 'specialpages-group-maintenance' => 'Mantentze-oharrak',
 'specialpages-group-other' => 'Beste orri berezi batzuk',
@@ -3557,6 +3614,9 @@ Halaber [[Special:EditWatchlist|aldatzaile estandarra]] erabil dezakezu.',
 'compare-rev1' => '1. berrikuspena',
 'compare-rev2' => '2. berrikuspena',
 'compare-submit' => 'Alderatu',
+'compare-invalid-title' => 'Zehaztutako izenburua ez dago zuzen.',
+'compare-title-not-exists' => 'Zehazturiko izenburua ez da existitzen.',
+'compare-revision-not-exists' => 'Zehazturiko berrikuspena ez da existitzen.',
 
 # Database error messages
 'dberr-header' => 'Wiki honek arazo bat du',
@@ -3584,6 +3644,7 @@ Halaber [[Special:EditWatchlist|aldatzaile estandarra]] erabil dezakezu.',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 testu osoan bilatzeko laguntzarekin',
+'sqlite-no-fts' => '$1 testu osoan bilatzeko laguntzarik gabe',
 
 # New logging system
 'logentry-delete-delete' => '$1 wikilariak $3 orria {{GENDER:$2|ezabatu}} du',
index cf6a54d..7d7c386 100644 (file)
@@ -785,7 +785,6 @@ Asigurati e qu'esti chambu mantenga la continuiá el estorial la páhina.",
 'mypreferences' => 'Las mis preferéncias',
 'prefs-edits' => "Númiru d'eicionis:",
 'prefsnologin' => "Nu t'alcuentras rustriu",
-'prefsnologintext' => 'Ebis estal [[Special:UserLogin|rustriu]] pa chambal las tus preferéncias.',
 'changepassword' => 'Chambal consínia',
 'prefs-skin' => 'Aparéncia',
 'skin-preview' => 'Previsoreal',
@@ -1758,7 +1757,7 @@ Ya desisti la páhina "[[:$1]]". Te petaria esborrala pa premitil el treslau?',
 'allmessagesdefault' => 'Testu pol defeutu',
 'allmessagescurrent' => 'Testu atual',
 'allmessagestext' => 'Esta es una lista e mensahis del sistema disponibris nel espaciu e nombris MediaWiki:
-Pol favol, vesita [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] i [//translatewiki.net translatewiki.net] si quieis colabutal.',
+Pol favol, vesita [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] i [//translatewiki.net translatewiki.net] si quieis colabutal.',
 'allmessagesnotsupportedDB' => "Nu se puei gastal esta páhina polque '''\$wgUseDatabaseMessages''' está desativau.",
 
 # Thumbnails
@@ -2180,7 +2179,7 @@ Cualisquiel otru atihu ena mesma línia se consierará ececión, p.s. páhinas o
 
 # External editor support
 'edit-externally' => 'Eital esti archivu gastandu una apricación esterna',
-'edit-externally-help' => 'Pa mas enholmación, lei las [//www.mediawiki.org/wiki/Manual:External_editors istrucionis de configuración] (en ingrés).',
+'edit-externally-help' => 'Pa mas enholmación, lei las [https://www.mediawiki.org/wiki/Manual:External_editors istrucionis de configuración] (en ingrés).',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tó',
index 2803611..c2264f8 100644 (file)
@@ -481,7 +481,7 @@ $messages = array(
 'tog-noconvertlink' => 'تبدیل عنوان پیوند غیرفعال شود',
 'tog-norollbackdiff' => 'بعد از واگردانی تفاوت نشان داده نشود',
 'tog-useeditwarning' => 'زمان خروج از صفحهٔ ویرایش در صورت داشتن ویرایش‌های‌ ذخیره‌نشده به من هشدار داده شود',
-'tog-prefershttps' => 'هنگامی که ثبت ورود انجام گرفته همواره از اتصال امن استفاده شود',
+'tog-prefershttps' => 'در حالت ورود به سامانه همواره از اتصال امن استفاده شود',
 
 'underline-always' => 'همیشه',
 'underline-never' => 'هرگز',
@@ -976,8 +976,8 @@ $2',
 'mailerror' => 'خطا در فرستادن رایانامه: $1',
 'acct_creation_throttle_hit' => 'بازدیدکنندگان این ویکی که از نشانی آی‌پی شما استفاده می‌کنند در روز گذشته {{PLURAL:$1|یک حساب کاربری|$1 حساب کاربری}} ساخته‌اند، که بیشترین تعداد مجاز در آن بازهٔ زمانی است.
 به همین خاطر، بازدیدکنندگانی که از این نشانی آی‌پی استفاده می‌کنند نمی‌توانند در حال حاضر حساب جدیدی بسازند.',
-'emailauthenticated' => 'نشانی رایانامه شما در $2 ساعت $3 تصدیق شد.',
-'emailnotauthenticated' => 'نشانی رایانامه شما هنوز تصدیق نشده‌است.
+'emailauthenticated' => 'نشانی رایانامهٔ شما در $2 ساعت $3 تصدیق شد.',
+'emailnotauthenticated' => 'نشانی رایانامهٔ شما هنوز تصدیق نشده‌است.
 برای هیچ‌یک از ویژگی‌های زیر رایانامه ارسال نخواهد شد.',
 'noemailprefs' => 'برای راه‌اندازی این قابلیت‌ها یک نشانی رایانامه مشخص کنید.',
 'emailconfirmlink' => 'تأیید نشانی رایانامه',
@@ -1534,7 +1534,7 @@ $1",
 'shown-title' => 'نمایش $1 {{PLURAL:$1|نتیجه|نتیجه}} در هر صفحه',
 'viewprevnext' => 'نمایش ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-legend' => 'گزینه‌های جستجو',
-'searchmenu-exists' => "'''صفحه‌ای با عنوان \"[[:\$1]]\" در این ویکی وجود دارد.'''",
+'searchmenu-exists' => "'''صفحه‌ای با عنوان «[[:$1]]» در این ویکی وجود دارد.'''",
 'searchmenu-new' => "'''صفحهٔ «[[:$1]]» را در این ویکی بسازید!'''",
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|مرور صفحه‌های با این پیشوند]]',
 'searchprofile-articles' => 'صفحه‌های محتوایی',
@@ -1586,7 +1586,6 @@ $1",
 'mypreferences' => 'ترجیحات',
 'prefs-edits' => 'تعداد ویرایش‌ها:',
 'prefsnologin' => 'به سامانه وارد نشده‌اید',
-'prefsnologintext' => 'برای تنظیم ترجیحات کاربر باید <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} به سامانه وارد شوید]</span>.',
 'changepassword' => 'تغییر گذرواژه',
 'prefs-skin' => 'پوسته',
 'skin-preview' => 'پیش‌نمایش',
@@ -3149,8 +3148,8 @@ $1',
 'allmessagesdefault' => 'متن پیش‌فرض پیغام',
 'allmessagescurrent' => 'متن کنونی پیغام',
 'allmessagestext' => 'این فهرستی از پیغام‌های سامانه‌ای موجود در فضای نام مدیاویکی است.
-چنانچه مایل به مشارکت در محلی‌سازی مدیاویکی هستید لطفاً [//www.mediawiki.org/wiki/Localisation محلی‌سازی مدیاویکی] و [//translatewiki.net translatewiki.net] را ببینید.',
-'allmessagesnotsupportedDB' => "نمی‌توان از '''{{ns:special}}:همهٔ پیغام‌ها''' استفاده کرد چود '''&lrm;\$wgUseDatabaseMessages''' خاموش شده است.",
+چنانچه مایل به مشارکت در محلی‌سازی مدیاویکی هستید لطفاً [https://www.mediawiki.org/wiki/Localisation محلی‌سازی مدیاویکی] و [//translatewiki.net translatewiki.net] را ببینید.',
+'allmessagesnotsupportedDB' => "این صفحه نمی‌تواند استفاده شود به این دلیل که <bdi>'''\$wgUseDatabaseMessages'''</bdi> غیرفعال شده‌است.",
 'allmessages-filter-legend' => 'پالایه',
 'allmessages-filter' => 'پالودن بر اساس وضعیت شخصی‌سازی:',
 'allmessages-filter-unmodified' => 'تغییر نیافته',
@@ -3919,7 +3918,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'ویرایش این پرونده با یک ویرایشگر بیرونی',
-'edit-externally-help' => '(برای اطلاعات بیشتر [//www.mediawiki.org/wiki/Manual:External_editors دستورالعمل تنظیم] را ببینید)',
+'edit-externally-help' => '(برای اطلاعات بیشتر [https://www.mediawiki.org/wiki/Manual:External_editors دستورالعمل تنظیم] را ببینید)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'همه',
@@ -4166,7 +4165,7 @@ $5
 'version-version' => '(نسخه $1)',
 'version-svn-revision' => '(&رلم;r$2)',
 'version-license' => 'اجازه‌نامه',
-'version-poweredby-credits' => "این ویکی توسط '''[//www.mediawiki.org/ مدیاویکی]''' پشتیبانی می‌شود، کلیهٔ حقوق محفوظ است © 2001-$1 $2.",
+'version-poweredby-credits' => "این ویکی توسط '''[https://www.mediawiki.org/ مدیاویکی]''' پشتیبانی می‌شود، کلیهٔ حقوق محفوظ است © 2001-$1 $2.",
 'version-poweredby-others' => 'دیگران',
 'version-poweredby-translators' => 'مترجمان translatewiki.net',
 'version-credits-summary' => 'افراد زیر را به خاطر ویرایش‌هایش در [[Special:Version|مدیاویکی]] معرفی می‌نمائیم.',
@@ -4209,11 +4208,10 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'صفحه‌های ویژه',
-'specialpages-note' => '----
-* صفحه‌های ویژهٔ عادی.
+'specialpages-note' => '* صفحه‌های ویژهٔ عادی.
 * <strong class="mw-specialpagerestricted">صفحه‌های ویژهٔ محدودشده.</strong>',
 'specialpages-group-maintenance' => 'گزارش‌های نگهداری',
-'specialpages-group-other' => 'صÙ\81Ø­Ù\87â\80\8cÙ\87اÛ\8c Ù\88Û\8cÚ\98Ù\87Ù\94 Ø¯Û\8cگر',
+'specialpages-group-other' => 'ساÛ\8cر ØµÙ\81Ø­Ù\87â\80\8cÙ\87اÛ\8c Ù\88Û\8cÚ\98Ù\87',
 'specialpages-group-login' => 'ورود / ثبت نام',
 'specialpages-group-changes' => 'تغییرات اخیر و سیاهه‌ها',
 'specialpages-group-media' => 'گزارش بارگذاری رسانه‌ها',
index d74827e..8bb1929 100644 (file)
@@ -22,6 +22,7 @@
  * @author Kaganer
  * @author Kulmalukko
  * @author Linnea
+ * @author Mies
  * @author Mobe
  * @author Nedergard
  * @author Nike
@@ -724,7 +725,8 @@ Lukituksen asettanut ylläpitäjä on antanut seuraavan syyn toimenpiteelle: $3.
 'invalidtitle-knownnamespace' => 'Virheellinen sivunimi, nimiavaruus "$2" ja teksti "$3"',
 'invalidtitle-unknownnamespace' => 'Virheellinen sivunimi, tuntematon nimiavaruus numero $1 ja teksti "$2"',
 'exception-nologin' => 'Et ole kirjautunut sisään',
-'exception-nologin-text' => 'Tämä sivu tai toiminto edellyttää sisäänkirjautumista tähän wikiin.',
+'exception-nologin-text' => 'Ole hyvä ja [[Special:Userlogin|kirjaudu sisään]], niin pääset tälle sivulle tai tähän toimintoon.',
+'exception-nologin-text-manual' => 'Sinun pitää $1 jotta pääset tälle sivulle tai toimintoon.',
 
 # Virus scanner
 'virus-badscanner' => "Virheellinen asetus: Tuntematon virustutka: ''$1''",
@@ -836,7 +838,8 @@ Muita viestejä ei lähetetä, ennen kuin olet toiminut viestin ohjeiden mukaan
 'acct_creation_throttle_hit' => 'IP-osoitteestasi on luotu tähän wikiin jo {{PLURAL:$1|yksi tunnus|$1 tunnusta}} päivän aikana, joka suurin sallittu määrä tälle ajalle.
 Tästä johtuen tästä IP-osoitteesta ei voi tällä hetkellä luoda uusia tunnuksia.',
 'emailauthenticated' => 'Sähköpostiosoitteesi varmennettiin $2 kello $3.',
-'emailnotauthenticated' => 'Sähköpostiosoitettasi ei ole vielä varmennettu. Sähköpostia ei lähetetä liittyen alla oleviin toimintoihin.',
+'emailnotauthenticated' => 'Sähköpostiosoitettasi ei ole vielä varmennettu.
+Sähköpostia ei lähetetä liittyen alla oleviin toimintoihin.',
 'noemailprefs' => 'Sähköpostiosoitetta ei ole määritelty.',
 'emailconfirmlink' => 'Varmenna sähköpostiosoite',
 'invalidemailaddress' => 'Sähköpostiosoitetta ei voida hyväksyä, koska se ei ole oikeassa muodossa. Ole hyvä ja anna oikea sähköpostiosoite tai jätä kenttä tyhjäksi.',
@@ -916,8 +919,8 @@ pyynnön, tai muistat sittenkin vanhan salasanasi, etkä halua muuttaa sitä,
 voit jättää tämän viestin huomiotta ja jatkaa vanhan salasanan käyttöä.',
 'passwordreset-emailelement' => 'Käyttäjätunnus: $1
 Väliaikainen salasana: $2',
-'passwordreset-emailsent' => 'Salasanan palautuksesta kertova viesti on lähetetty sähköpostitse.',
-'passwordreset-emailsent-capture' => 'Salasanan palautuksesta kertova sähköpostiviesti on lähetetty, ja se näkyy myös alla.',
+'passwordreset-emailsent' => 'Salasanan uudistamisesta kertova viesti on lähetetty sähköpostitse.',
+'passwordreset-emailsent-capture' => 'Salasanan uudistamisesta kertova sähköpostiviesti on lähetetty, ja se näkyy myös alla.',
 'passwordreset-emailerror-capture' => 'Allaoleva sähköpostiviesti luotiin, mutta sen lähettäminen {{GENDER:$2|käyttäjälle}} epäonnistui: $1',
 
 # Special:ChangeEmail
@@ -934,9 +937,9 @@ Väliaikainen salasana: $2',
 
 # Special:ResetTokens
 'resettokens' => 'Uudista avaimet',
-'resettokens-text' => 'Tällä sivulla voit uudistaa avaimesi, jotka mahdollistavat pääsyn käyttäjätunnukseesi liittyviin tiettyihin yksityisiin tietoihin.
+'resettokens-text' => "Tällä sivulla voit uudistaa avaimesi (''eng.'' reset tokens), jotka mahdollistavat pääsyn käyttäjätunnukseesi liittyviin tiettyihin yksityisiin tietoihin.
 
-Sinun pitäisi tehdä tämä, jos olet vahingossa jakanut avaimet jonkun kanssa tai jos käyttäjätunnuksesi on vaarannettu.',
+Sinun pitäisi tehdä tämä, jos olet vahingossa jakanut avaimet jonkun kanssa tai jos käyttäjätunnuksesi on vaarannettu.",
 'resettokens-no-tokens' => 'Avaimia ei ole uudistettavaksi.',
 'resettokens-legend' => 'Uudista avaimet',
 'resettokens-tokens' => 'Avaimet:',
@@ -1137,7 +1140,7 @@ Jos olet kirjautuneena sisään, voit poistaa tämän varoituksen käytöstä as
 
 # Content models
 'content-model-wikitext' => 'wikiteksti',
-'content-model-text' => 'teksti',
+'content-model-text' => 'pelkkä teksti',
 'content-model-javascript' => 'JavaScript',
 'content-model-css' => 'CSS',
 
@@ -1255,8 +1258,9 @@ Voit silti nähdä tämän muutoksen. Lisätietoja löytyy [{{fullurl:{{#Special
 Muut ylläpitäjät {{GRAMMAR:inessive|{{SITENAME}}}} voivat silti tarkastella piilotettua sisältöä, ja he voivat palauttaa sen näkyviin tämän käyttöliittymän kautta, ellei tätä ole erikseen rajoitettu.",
 'revdelete-confirm' => 'Varmista, että haluat tehdä tämän – ymmärrät seuraukset ja teet tämän [[{{MediaWiki:Policy-url}}|käytäntöjen]] mukaisesti.',
 'revdelete-suppress-text' => "Häivytystä pitäisi käyttää '''vain''' seuraavissa tapauksissa:
+* Mahdollisesti henkilön kunniaa loukkaavia tietoja
 * Sopimattomat henkilötiedot
-*: ''kotiosoitteet, puhelinnumerot, sosiaaliturvatunnukset ja muut.''",
+*: ''kotiosoitteet, puhelinnumerot, henkilötunnukset ja muut.''",
 'revdelete-legend' => 'Aseta version näkyvyyden rajoitukset',
 'revdelete-hide-text' => 'Piilota version tekstisisältö',
 'revdelete-hide-image' => 'Piilota tiedoston sisältö',
@@ -1265,8 +1269,8 @@ Muut ylläpitäjät {{GRAMMAR:inessive|{{SITENAME}}}} voivat silti tarkastella p
 'revdelete-hide-user' => 'Piilota tekijän tunnus tai IP-osoite',
 'revdelete-hide-restricted' => 'Häivytä tiedot sekä ylläpitäjien että muiden käyttäjien näkyviltä',
 'revdelete-radio-same' => '(älä muuta)',
-'revdelete-radio-set' => 'Kyllä',
-'revdelete-radio-unset' => 'Ei',
+'revdelete-radio-set' => 'Piilossa',
+'revdelete-radio-unset' => 'Näkyvissä',
 'revdelete-suppress' => 'Häivytä tiedot myös ylläpitäjien näkyviltä samalla kun piilotat ne muilta käyttäjiltä',
 'revdelete-unsuppress' => 'Poista rajoitukset palautetuilta versioilta',
 'revdelete-log' => 'Syy:',
@@ -1282,15 +1286,17 @@ $1",
 'revdel-restore-visible' => 'näkyvät versiot',
 'pagehist' => 'Sivun muutoshistoria',
 'deletedhist' => 'Poistettujen versioiden historia',
-'revdelete-hide-current' => 'Virhe piilotettaessa $1 kello $2 päivättyä kohdetta: Tämä on uusin versio.
+'revdelete-hide-current' => 'Virhe piilotettaessa kohdetta päivämäärällä $1 kello $2: Tämä on uusin versio.
 Sitä ei voi piilottaa.',
 'revdelete-show-no-access' => 'Virhe näyttäessä kohtaa $2 kello $1: kohta on merkitty ”rajoitetuksi”.
 Sinulla ei ole oikeutta siihen.',
-'revdelete-modify-no-access' => 'Virhe tapahtui $2, $1 kohteen muokkauksessa: tämä kohde on merkitty "rajoitetuksi". Sinulla ei ole oikeuksia sen muokkaukseen.',
+'revdelete-modify-no-access' => 'Virhe kohteen päivämäärällä $1 kello $2 muutoksessa: tämä kohde on merkitty "rajoitetuksi". 
+Sinulla ei ole oikeutta muuttaa kohdetta.',
 'revdelete-modify-missing' => 'Virhe muuttaessa kohdetta, jonka tunniste on $1: Se puuttuu tietokannasta.',
-'revdelete-no-change' => "'''Varoitus:''' kohteessa $2 kello $1 on jo valmiiksi haluamasi näkyvyysasetukset.",
-'revdelete-concurrent-change' => 'Virhe $2, $1 päivätyn kohteen muokkauksessa: sen tilan on näköjään muuttanut joku sillä aikaa kun yritit muokata sitä. Ole hyvä ja tarkista lokit.',
-'revdelete-only-restricted' => 'Virhe piilotettaessa $1 kello $2 päivättyä kohdetta: Et voi poistaa kohteita ylläpitäjien näkyviltä valitsematta myös jotain muuta näkyvyysasetusta.',
+'revdelete-no-change' => "'''Varoitus.''' Kohteessa päivämäärällä $1 kello $2 on jo valmiiksi haluamasi näkyvyysasetukset.",
+'revdelete-concurrent-change' => 'Virhe kohteen päivämäärällä $1 kello $2 muutoksessa: sen näkyvyysasetuksia on ilmeisesti joku muuttanut sillä aikaa kun yritit muuttaa sitä.
+Ole hyvä ja tarkista lokit.',
+'revdelete-only-restricted' => 'Virhe piilotettaessa kohdetta päivämäärällä $1 kello $2: Et voi häivyttää kohteita ylläpitäjien näkyviltä valitsematta sen lisäksi jotain muuta näkyvyysasetusta.',
 'revdelete-reason-dropdown' => '*Yleiset poistosyyt
 ** Tekijänoikeusrikkomus
 ** Sopimattomat henkilötiedot
@@ -1401,7 +1407,7 @@ $1 {{int:pipe-separator}} $2',
 'searchall' => 'kaikki',
 'showingresults' => "{{PLURAL:$1|'''Yksi''' tulos|'''$1''' tulosta}} tuloksesta '''$2''' alkaen.",
 'showingresultsnum' => "Alla on {{PLURAL:$3|'''Yksi''' hakutulos|'''$3''' hakutulosta}} alkaen '''$2.''' tuloksesta.",
-'showingresultsheader' => "{{PLURAL:$5|Tulokset '''$1'''–'''$3'''|Tulokset '''$1'''–'''$2''' kaikkiaan '''$3''' osuman joukosto}} haulle '''$4'''",
+'showingresultsheader' => "{{PLURAL:$5|Tulokset '''$1'''–'''$3'''|Tulokset '''$1'''–'''$2''' kaikkiaan '''$3''' osuman joukosta}} haulle '''$4'''",
 'nonefound' => "'''Huomautus''': Haku kohdistuu oletuksena vain tiettyihin nimiavaruuksiin.
 Kokeile lisätä haun alkuun ''all:'', niin haku kohdistuu kaikkeen sisältöön (mukaan lukien keskustelut, mallineet jne.) tai kohdista haku haluttuun nimiavaruuteen.",
 'search-nonefound' => 'Hakusi ei tuottanut tulosta.',
@@ -1412,7 +1418,7 @@ Kokeile lisätä haun alkuun ''all:'', niin haku kohdistuu kaikkeen sisältöön
 'powersearch-field' => 'Etsi',
 'powersearch-togglelabel' => 'Muuta valintaa',
 'powersearch-toggleall' => 'Valitse kaikki',
-'powersearch-togglenone' => 'Poista valinnat',
+'powersearch-togglenone' => 'Ei mitään',
 'search-external' => 'Ulkoinen haku',
 'searchdisabled' => 'Tekstihaku on poistettu toistaiseksi käytöstä suuren kuorman vuoksi. Voit käyttää alla olevaa Googlen hakukenttää sivujen etsimiseen, kunnes haku tulee taas käyttöön. <small>Huomaa, että ulkopuoliset kopiot {{GRAMMAR:genitive|{{SITENAME}}}} sisällöstä eivät välttämättä ole ajan tasalla.</small>',
 'search-error' => 'Virhe ilmaantui haettaessa: $1',
@@ -1422,7 +1428,7 @@ Kokeile lisätä haun alkuun ''all:'', niin haku kohdistuu kaikkeen sisältöön
 'mypreferences' => 'Asetukset',
 'prefs-edits' => 'Muokkauksia',
 'prefsnologin' => 'Et ole kirjautunut sisään.',
-'prefsnologintext' => 'Sinun täytyy <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} kirjautua sisään]</span>, jotta voisit muuttaa asetuksiasi.',
+'prefsnologintext2' => 'Sinun pitää $1 ennen kuin voit muuttaa käyttäjän asetuksia.',
 'changepassword' => 'Salasanan vaihto',
 'prefs-skin' => 'Ulkoasu',
 'skin-preview' => 'esikatselu',
@@ -1604,7 +1610,7 @@ Tämä tieto on julkinen.',
 'right-reupload-own' => 'Korvata itsetallennettu tiedosto uudella tiedostolla',
 'right-reupload-shared' => 'Korvata jaettuun mediavarastoon tallennettuja tiedostoja paikallisesti',
 'right-upload_by_url' => 'Tallentaa tiedostoja verkko-osoitteella',
-'right-purge' => 'Päivittää tiedoston välimuistitetun version ilman varmennussivua',
+'right-purge' => 'Tyhjentää sivuston välimuisti ilman varmennussivua',
 'right-autoconfirmed' => 'IP-pohjaiset nopeusrajoitukset eivät ole voimassa',
 'right-bot' => 'Kohdellaan automaattisena prosessina',
 'right-nominornewtalk' => 'Tehdä pieniä muokkauksia käyttäjien keskustelusivuille siten, että käyttäjälle ei ilmoiteta siitä uutena viestinä',
@@ -1614,9 +1620,9 @@ Tämä tieto on julkinen.',
 'right-bigdelete' => 'Poistaa sivuja, joilla on pitkä historia',
 'right-deletelogentry' => 'Poistaa ja palauttaa tiettyjä lokimerkintöjä',
 'right-deleterevision' => 'Poistaa ja palauttaa sivujen versioita',
-'right-deletedhistory' => 'Tarkastella poistettuja versiotietoja ilman niihin liittyvää sisältöä',
+'right-deletedhistory' => 'Tarkastella poistettujen versioiden tietoja ilman niihin liittyvää tekstisisältöä',
 'right-deletedtext' => 'Tarkastella poistettujen sivujen tekstiä ja muutoksia poistettujen versioiden välillä',
-'right-browsearchive' => 'Tarkastella poistettuja sivuja',
+'right-browsearchive' => 'Hakea poistettuja sivuja',
 'right-undelete' => 'Palauttaa poistettuja sivuja',
 'right-suppressrevision' => 'Tarkastella ja palauttaa ylläpitäjiltä piilotettuja versioita',
 'right-suppressionlog' => 'Tarkastella yksityisiä lokeja',
@@ -1635,20 +1641,20 @@ Tämä tieto on julkinen.',
 'right-edituserjs' => 'Muokata toisten käyttäjien JavaScript-tiedostoja',
 'right-editmyusercss' => 'Muokata omia CSS-tiedostoja',
 'right-editmyuserjs' => 'Muokata omia JavaScript-tiedostoja',
-'right-viewmywatchlist' => 'Tarkastella tarkkailulistaasi',
+'right-viewmywatchlist' => 'Nähdä oma tarkkailulista',
 'right-editmywatchlist' => 'Muokata tarkkailulistaasi. Huomaa, että jotkin toiminnot lisäävät yhä sivuja listallesi riippumatta tästä oikeudesta.',
 'right-viewmyprivateinfo' => 'Nähdä omat yksityiset tietosi (esim. sähköpostiosoite, oikea nimi)',
 'right-editmyprivateinfo' => 'Muokata omia yksityisiä tietojasi (esim. sähköpostiosoite, oikea nimi)',
 'right-editmyoptions' => 'Muokata omia asetuksiasi',
 'right-rollback' => 'Palauttaa nopeasti käyttäjän viimeisimmät muokkaukset sivuun',
-'right-markbotedits' => 'Kumota muokkauksia bottimerkinnällä',
+'right-markbotedits' => 'Merkitä muokkausten palauttaminen botilla tehdyksi',
 'right-noratelimit' => 'Ohittaa nopeusrajoitukset',
 'right-import' => 'Tuoda sivuja muista wikeistä',
 'right-importupload' => 'Tuoda sivuja tiedostosta',
-'right-patrol' => 'Merkitä muokkaukset tarkastetuiksi',
-'right-autopatrol' => 'Muokkaukset aina valmiiksi tarkastetuksi merkittyjä',
+'right-patrol' => 'Merkitä muiden tekemät muokkaukset tarkastetuiksi',
+'right-autopatrol' => 'Omat muokkaukset on automaattisesti merkitty tarkastetuksi',
 'right-patrolmarks' => 'Nähdä tarkastusmerkit tuoreissa muutoksissa',
-'right-unwatchedpages' => 'Tarkastella listaa tarkkailemattomista sivuista',
+'right-unwatchedpages' => 'Nähdä luetteloa tarkkailemattomista sivuista',
 'right-mergehistory' => 'Yhdistää sivujen historioita',
 'right-userrights' => 'Muuttaa kaikkia käyttäjäoikeuksia',
 'right-userrights-interwiki' => 'Muokata käyttäjien oikeuksia muissa wikeissä',
@@ -1673,7 +1679,7 @@ Tämä tieto on julkinen.',
 'action-createaccount' => 'luoda tätä käyttäjätunnusta',
 'action-minoredit' => 'merkitä tätä muokkausta pieneksi',
 'action-move' => 'siirtää tätä sivua',
-'action-move-subpages' => 'siirtää tätä sivua, ja sen alasivuja',
+'action-move-subpages' => 'siirtää tätä sivua eikä sen alasivuja',
 'action-move-rootuserpages' => 'siirtää käyttäjäsivuja',
 'action-movefile' => 'siirtää tätä tiedostoa',
 'action-upload' => 'tallentaa tätä tiedostoa',
@@ -1685,7 +1691,7 @@ Tämä tieto on julkinen.',
 'action-deleterevision' => 'poistaa tätä versiota',
 'action-deletedhistory' => 'tarkastella tämän sivun poistettua historiaa',
 'action-browsearchive' => 'etsiä poistettuja sivuja',
-'action-undelete' => 'palauttaa tätä sivua',
+'action-undelete' => 'palauttaa tätä poistettua sivua',
 'action-suppressrevision' => 'tarkastella ja palauttaa tätä piilotettua versiota',
 'action-suppressionlog' => 'tarkastella tätä yksityislokia',
 'action-block' => 'estää tätä käyttäjää muokkaamasta',
@@ -1693,9 +1699,9 @@ Tämä tieto on julkinen.',
 'action-rollback' => 'käyttää nopeaa palautusta kumoamaan viimeisen käyttäjän viimeiset muutokset sivuun',
 'action-import' => 'tuoda sivuja toisesta wikistä',
 'action-importupload' => 'tuoda sivuja tiedostosta',
-'action-patrol' => 'merkitä muiden muokkauksia tarkastetuiksi',
-'action-autopatrol' => 'saada muokkaukset automaattisesti tarkastetuiksi',
-'action-unwatchedpages' => 'tarkastella tarkkailemattomien sivujen listaa',
+'action-patrol' => 'merkitä muiden tekemiä muokkauksia tarkastetuiksi',
+'action-autopatrol' => 'merkitä omia muokkauksiasi tarkastetuiksi',
+'action-unwatchedpages' => 'nähdä luetteloa tarkkailemattomista sivuista',
 'action-mergehistory' => 'yhdistää tämän sivun historiaa',
 'action-userrights' => 'muokata kaikkia käyttöoikeuksia',
 'action-userrights-interwiki' => 'muokata muiden wikien käyttäjien käyttöoikeuksia',
@@ -1760,7 +1766,7 @@ Tämä tieto on julkinen.',
 'reuploaddesc' => 'Peruuta tallennus ja palaa tallennuslomakkeelle.',
 'upload-tryagain' => 'Lähetä muutettu tiedostokuvaus',
 'uploadnologin' => 'Et ole kirjautunut sisään',
-'uploadnologintext' => 'Sinun pitää $1 tallentaaksesi tiedostoja.',
+'uploadnologintext' => 'Sinun pitää $1, jotta voit tallentaa tiedostoja.',
 'upload_directory_missing' => 'Tallennushakemisto $1 puuttuu, eikä palvelin pysty luomaan sitä.',
 'upload_directory_read_only' => 'Palvelimella ei ole kirjoitusoikeuksia tallennushakemistoon $1.',
 'uploaderror' => 'Tallennusvirhe',
@@ -2046,30 +2052,30 @@ Voit tarvittaessa muokata [$2 tiedoston kuvaussivua] kohteessa.',
 'uploadnewversion-linktext' => 'Tallenna uusi versio tästä tiedostosta',
 'shared-repo-from' => 'kohteesta $1',
 'shared-repo' => 'jaettu mediavarasto',
-'upload-disallowed-here' => 'Et voi korvata tätä tiedostoa.',
+'upload-disallowed-here' => 'Et voi korvata tätä tiedostoa uudella tiedostolla.',
 
 # File reversion
 'filerevert' => 'Tiedoston $1 palautus',
 'filerevert-legend' => 'Tiedoston palautus',
-'filerevert-intro' => '<span class="plainlinks">Olet palauttamassa tiedostoa \'\'\'[[Media:$1|$1]]\'\'\' [$4 versioon, joka luotiin $2 kello $3].</span>',
-'filerevert-comment' => 'Syy',
-'filerevert-defaultcomment' => 'Palautettiin versioon, joka luotiin $1 kello $2 (UTC)',
-'filerevert-submit' => 'Palauta',
-'filerevert-success' => '<span class="plainlinks">\'\'\'[[Media:$1|$1]]\'\'\' on palautettu [$4 versioon, joka luotiin $2 kello $3].</span>',
+'filerevert-intro' => "Olet palauttamassa takaisin tiedostoa '''[[Media:$1|$1]]''' [$4 versioon, joka luotiin $2 kello $3].",
+'filerevert-comment' => 'Syy:',
+'filerevert-defaultcomment' => 'Palautettiin takaisin versioon, joka luotiin $1 kello $2 (UTC)',
+'filerevert-submit' => 'Suorita palauttaminen',
+'filerevert-success' => "'''[[Media:$1|$1]]''' on palautettu takaisin [$4 versioon, joka luotiin $2 kello $3].",
 'filerevert-badversion' => 'Tiedostosta ei ole luotu versiota kyseisellä ajan hetkellä.',
 
 # File deletion
 'filedelete' => 'Tiedoston $1 poisto',
 'filedelete-legend' => 'Tiedoston poisto',
-'filedelete-intro' => "Olet poistamassa tiedostoa '''[[Media:$1|$1]]''' ja kaiken sen historian.",
-'filedelete-intro-old' => '<span class="plainlinks">Olet poistamassa tiedoston \'\'\'[[Media:$1|$1]]\'\'\' [$4 $3 kello $2 luotua versiota].</span>',
-'filedelete-comment' => 'Syy',
+'filedelete-intro' => "Olet poistamassa tiedoston '''[[Media:$1|$1]]''' ja kaiken sen historian.",
+'filedelete-intro-old' => '<span class="plainlinks">Olet poistamassa tiedoston \'\'\'[[Media:$1|$1]]\'\'\' [$4 päivämäärällä $2 kello $3 luotua versiota].</span>',
+'filedelete-comment' => 'Syy:',
 'filedelete-submit' => 'Poista',
 'filedelete-success' => "Tiedosto '''$1''' on poistettu.",
-'filedelete-success-old' => "Tiedoston '''[[Media:$1|$1]]''' $3 kello $2 luotu versio on poistettu.",
+'filedelete-success-old' => "Tiedoston '''[[Media:$1|$1]]''' $2 kello $3 luotu versio on poistettu.",
 'filedelete-nofile' => "Tiedostoa '''$1''' ei ole.",
-'filedelete-nofile-old' => "Tiedostosta '''$1''' ei ole olemassa pyydettyä versiota.",
-'filedelete-otherreason' => 'Muu syy tai tarkennus',
+'filedelete-nofile-old' => "Tiedostosta '''$1''' ei ole olemassa arkistossa olevaa versiota, jolla on annetut ominaisuudet.",
+'filedelete-otherreason' => 'Muu syy tai tarkennus:',
 'filedelete-reason-otherlist' => 'Muu syy',
 'filedelete-reason-dropdown' => '*Yleiset poistosyyt
 ** Kaksoiskappale
@@ -2459,7 +2465,7 @@ Palaute ja lisäapu osoitteessa:
 'exblank' => 'oli tyhjä',
 'delete-confirm' => 'Sivun ”$1” poistaminen',
 'delete-legend' => 'Sivun poisto',
-'historywarning' => "'''Varoitus:''' Sivua, jota olet poistamassa on muokattu noin $1 {{PLURAL:$1|kerta|kertaa}}:",
+'historywarning' => "'''Varoitus:''' Sivua, jota olet poistamassa, on muokattu noin $1 {{PLURAL:$1|kerta|kertaa}}:",
 'confirmdeletetext' => 'Olet poistamassa sivun tai tiedoston ja kaiken sen historian. Ymmärrä teon seuraukset ja tee poisto {{GRAMMAR:genitive|{{SITENAME}}}} [[{{MediaWiki:Policy-url}}|käytäntöjen]] mukaisesti.',
 'actioncomplete' => 'Toiminto suoritettu',
 'actionfailed' => 'Toiminto epäonnistui',
@@ -2486,7 +2492,7 @@ Sivulla $2 on lista viimeaikaisista poistoista.',
 'rollback' => 'palauta aiempaan versioon',
 'rollback_short' => 'Palautus',
 'rollbacklink' => 'palauta',
-'rollbacklinkcount' => 'palauta {{PLURAL:$1|muutos|$1 muutosta}}',
+'rollbacklinkcount' => 'palauta $1 {{PLURAL:$1|muutos|muutosta}}',
 'rollbacklinkcount-morethan' => 'palauta yli $1 {{PLURAL:$1|muutos|muutosta}}',
 'rollbackfailed' => 'Palautus epäonnistui',
 'cantrollback' => 'Aiempaan versioon ei voi palauttaa, koska viimeisin kirjoittaja on sivun ainoa tekijä.',
@@ -2567,31 +2573,31 @@ Viimeisimmän muokkauksen on tehnyt käyttäjä [[User:$3|$3]] ([[User talk:$3|k
 'restriction-level-all' => 'mikä tahansa suojaus',
 
 # Undelete
-'undelete' => 'Palauta poistettuja sivuja',
+'undelete' => 'Tarkastele poistettuja sivuja',
 'undeletepage' => 'Tarkastele ja palauta poistettuja sivuja',
 'undeletepagetitle' => "'''Poistetut versiot sivusta [[:$1]]'''.",
 'viewdeletedpage' => 'Poistettujen sivujen selaus',
-'undeletepagetext' => '{{PLURAL:$1|Seuraava sivu|Seuraavat sivut}} on poistettu, mutta {{PLURAL:$1|se löytyy|ne löytyvät}} vielä arkistosta, joten {{PLURAL:$1|se on|ne ovat}} palautettavissa. Arkisto saatetaan tyhjentää aika ajoin.',
-'undelete-fieldset-title' => 'Palauta versiot',
+'undeletepagetext' => '{{PLURAL:$1|Seuraava sivu|Seuraavat sivut}} on poistettu, mutta {{PLURAL:$1|se löytyy|ne löytyvät}} vielä arkistosta, joten {{PLURAL:$1|se|ne}} voidaan palauttaa takaisin. Arkisto saatetaan tyhjentää aika ajoin.',
+'undelete-fieldset-title' => 'Palauta versioita',
 'undeleteextrahelp' => "Palauttaaksesi sivun koko muutoshistorian jätä kaikki valintalaatikot tyhjiksi ja napsauta '''''{{int:undeletebtn}}'''''.
 Voit palauttaa versioita valikoivasti valitsemalla vain niiden versioiden valintalaatikot, jotka haluat palauttaa.",
-'undeleterevisions' => '{{PLURAL:$1|Versio|$1 versiota}} arkistoitu.',
+'undeleterevisions' => '$1 {{PLURAL:$1|versio|versiota}} on arkistoitu.',
 'undeletehistory' => 'Jos palautat sivun, kaikki versiot lisätään sivun historiaan. Jos uusi sivu samalla nimellä on luotu poistamisen jälkeen, palautetut versiot lisätään sen historiaan.',
 'undeleterevdel' => 'Palautusta ei tehdä, jos sen seurauksena sivun uusin versio olisi osittain piilotettu. 
 Tässä tilanteessa älä valitse palautettavaksi näkyviin viimeisintä poistettua versiota tai poista version piilotus.',
 'undeletehistorynoadmin' => 'Tämä sivu on poistettu. 
 Syy sivun poistamiseen näkyy alla olevassa yhteenvedossa, jossa on myös tiedot, ketkä olivat muokanneet tätä sivua ennen poistamista. 
 Näiden poistettujen versioiden varsinainen tekstisisältö on vain ylläpitäjien luettavissa.',
-'undelete-revision' => 'Poistettu sivu $1 hetkellä $4 kello $5. Tekijä: $3.',
+'undelete-revision' => 'Poistettu versio sivusta $1 (aikaleima $4 kello $5). Version tekijä: $3.',
 'undeleterevision-missing' => 'Virheellinen tai puuttuva versio. 
-Sinulla on kenties käytössä väärä linkki, tai sitten versio on saatettu palauttaa tai poistaa arkistosta.',
+Sinulla on kenties käytössä väärä linkki, tai sitten versio on saatettu palauttaa takaisin tai poistaa arkistosta.',
 'undelete-nodiff' => 'Aikaisempaa versiota ei löytynyt.',
 'undeletebtn' => 'Palauta',
 'undeletelink' => 'näytä tai palauta',
 'undeleteviewlink' => 'näytä',
 'undeletereset' => 'Tyhjennä',
 'undeleteinvert' => 'Käänteinen valinta',
-'undeletecomment' => 'Syy',
+'undeletecomment' => 'Syy:',
 'undeletedrevisions' => '{{PLURAL:$1|Yksi versio|$1 versiota}} palautettiin',
 'undeletedrevisions-files' => '{{PLURAL:$1|Yksi versio|$1 versiota}} ja {{PLURAL:$2|yksi tiedosto|$2 tiedostoa}} palautettiin',
 'undeletedfiles' => '{{PLURAL:$1|1 tiedosto|$1 tiedostoa}} palautettiin',
@@ -2639,7 +2645,7 @@ $1',
 'sp-contributions-newbies' => 'Näytä uusien tulokkaiden muutokset',
 'sp-contributions-newbies-sub' => 'Uusien käyttäjien muokkaukset',
 'sp-contributions-newbies-title' => 'Uusien käyttäjien muokkaukset',
-'sp-contributions-blocklog' => 'estot',
+'sp-contributions-blocklog' => 'estoloki',
 'sp-contributions-deleted' => 'poistetut muokkaukset',
 'sp-contributions-uploads' => 'tallennukset',
 'sp-contributions-logs' => 'lokit',
@@ -2715,11 +2721,11 @@ Voimassa olevat estot näkyvät [[Special:BlockList|estolistasta]].',
 'ipb-edit-dropdown' => 'Muokkaa estosyitä',
 'ipb-unblock-addr' => 'Poista käyttäjän $1 esto',
 'ipb-unblock' => 'Poista käyttäjän tai IP-osoitteen muokkausesto',
-'ipb-blocklist' => 'Näytä estot',
+'ipb-blocklist' => 'Näytä voimassa olevat estot',
 'ipb-blocklist-contribs' => 'Käyttäjän $1 muokkaukset',
-'unblockip' => 'Muokkauseston poisto',
+'unblockip' => 'Muokkauseston poisto käyttäjältä',
 'unblockiptext' => 'Tällä lomakkeella voit poistaa käyttäjän tai IP-osoitteen muokkauseston.',
-'ipusubmit' => 'Poista esto',
+'ipusubmit' => 'Poista tämä esto',
 'unblocked' => 'Käyttäjän [[User:$1|$1]] esto on poistettu',
 'unblocked-range' => '$1 ei ole enää estettynä',
 'unblocked-id' => 'Esto $1 on poistettu',
@@ -2771,7 +2777,7 @@ Alla on ote häivytyslokista.',
 'block-log-flags-nousertalk' => 'oman keskustelusivun muokkaaminen estetty',
 'block-log-flags-angry-autoblock' => 'kehittynyt automaattiesto käytössä',
 'block-log-flags-hiddenname' => 'käyttäjänimi piilotettu',
-'range_block_disabled' => 'Ylläpitäjän oikeus luoda alue-estoja ei ole käytössä.',
+'range_block_disabled' => 'Ylläpitäjien mahdollisuus asettaa avaruusestoja on poistettu käytöstä.',
 'ipb_expiry_invalid' => 'Virheellinen päättymisaika.',
 'ipb_expiry_temp' => 'Piilotettujen käyttäjätunnusten estojen tulee olla pysyviä.',
 'ipb_hide_invalid' => 'Tämän tunnuksen piilottaminen ei onnistu. Sillä saattaa olla liikaa muokkauksia.',
@@ -2903,27 +2909,26 @@ Alla on viimeisin lokitapahtuma:',
 Valitse toinen nimi.',
 
 # Export
-'export' => 'Sivujen vienti',
-'exporttext' => 'Voit viedä sivun tai sivujen tekstiä ja muokkaushistoriaa XML-muodossa.
-Tämä tieto voidaan tuoda toiseen käyttämällä MediaWikiä [[Special:Import|tuontisivun]] kautta.
+'export' => 'Vie sivuja',
+'exporttext' => "Voit viedä (''export'') sivun tai usean sivun tekstin ja muokkaushistorian XML-muodossa.
+Tämä tieto voidaan tuoda (''import'') toiseen wikiin käyttämällä MediaWikiä [[Special:Import|tuontisivun]] kautta.
 
-Syötä sivujen otsikoita jokainen omalle rivilleen alla olevaan laatikkoon.
-Valitse myös, haluatko kaikki versiot sivuista, vai ainoastaan nykyisen version.
+Kirjoita sivujen nimet, jokainen nimike omalle rivilleen, alla olevaan tietolaatikkoon. Valitse, haluatko viedä sivun uusimman version sekä samalla kaikki vanhat versiot ja sivun historian tietorivit, vai haluatko viedä sivun uusimman version, jossa on tieto viimeisimmästä muokkauksesta.
 
-Jälkimmäisessä tapauksessa voit myös käyttää linkkiä. Esimerkiksi sivun [[{{MediaWiki:Mainpage}}]] saa vietyä linkistä [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]].',
+Jälkimmäisessä tapauksessa voit myös käyttää linkkiä. Esimerkiksi sivun [[{{MediaWiki:Mainpage}}]] saa vietyä linkistä [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]].",
 'exportall' => 'Vie kaikki sivut',
-'exportcuronly' => 'Liitä mukaan ainoastaan uusin versio – ei koko historiaa.',
-'exportnohistory' => '----
-Sivujen koko historian vienti on estetty suorituskykysyistä.',
+'exportcuronly' => 'Ota vientiin ainoastaan uusin versio – ei koko historiaa',
+'exportnohistory' => "----
+'''Huomautus:''' Sivujen koko muokkaushistorian vienti tämän lomakkeen kautta on poistettu käytöstä suorituskykysyistä.",
 'exportlistauthors' => 'Lisää lista jokaisen sivun muokkaajista',
 'export-submit' => 'Vie',
-'export-addcattext' => 'Lisää sivut luokasta',
+'export-addcattext' => 'Lisää sivut luokasta:',
 'export-addcat' => 'Lisää',
-'export-addnstext' => 'Lisää sivut nimiavaruudesta',
+'export-addnstext' => 'Lisää sivut nimiavaruudesta:',
 'export-addns' => 'Lisää',
 'export-download' => 'Tallenna tiedostona',
-'export-templates' => 'Liitä mallineet',
-'export-pagelinks' => 'Sisällytä linkkien kohteina olevat sivut syvyydelle',
+'export-templates' => 'Ota mukaan mallineet',
+'export-pagelinks' => 'Sisällytä linkkien kohteina olevat sivut syvyydelle:',
 
 # Namespace 8 related
 'allmessages' => 'Järjestelmäviestit',
@@ -2931,7 +2936,7 @@ Sivujen koko historian vienti on estetty suorituskykysyistä.',
 'allmessagesdefault' => 'Oletusarvo',
 'allmessagescurrent' => 'Nykyinen arvo',
 'allmessagestext' => 'Tämä on luettelo järjestelmäviesteistä, jotka ovat saatavilla MediaWiki-nimiavaruudessa.
-Jos haluat muokata MediaWikin yleistä kotoistusta, käy [//www.mediawiki.org/wiki/Localisation MediaWikin kotoistussivuilla] ja sivustolla [//translatewiki.net translatewiki.net].',
+Jos haluat muokata MediaWikin yleistä kotoistusta, käy [https://www.mediawiki.org/wiki/Localisation MediaWikin kotoistussivuilla] ja sivustolla [//translatewiki.net translatewiki.net].',
 'allmessagesnotsupportedDB' => 'Tämä sivu ei ole käytössä, koska <tt>$wgUseDatabaseMessages</tt>-asetus on pois päältä.',
 'allmessages-filter-legend' => 'Suodata',
 'allmessages-filter' => 'Suodata muutosten perusteella',
@@ -2960,16 +2965,18 @@ $2',
 
 # Special:Import
 'import' => 'Tuo sivuja',
-'importinterwiki' => 'Tuo sivuja lähiwikeistä',
-'import-interwiki-text' => 'Valitse wiki ja sivun nimi. Versioiden päivämäärät ja muokkaajat säilytetään. Kaikki wikienväliset tuonnit kirjataan [[Special:Log/import|tuontilokiin]].',
+'importinterwiki' => 'Tuo sivuja muista wikeistä (transwiki import)',
+'import-interwiki-text' => 'Valitse wiki ja sivun nimi tuontia varten.
+Versioiden päivämäärät ja muokkaajien nimet säilyvät ennallaan. 
+Kaikki wikienväliset tuontitapahtumat kirjataan [[Special:Log/import|tuontilokiin]].',
 'import-interwiki-source' => 'Lähdewiki/sivu:',
-'import-interwiki-history' => 'Kopioi sivun koko historia',
-'import-interwiki-templates' => 'Liitä kaikki mallineet',
+'import-interwiki-history' => 'Kopioi sivun koko historia ja kaikki versiot',
+'import-interwiki-templates' => 'Ota mukaan kaikki mallineet',
 'import-interwiki-submit' => 'Tuo',
 'import-interwiki-namespace' => 'Kohdenimiavaruus:',
-'import-interwiki-rootpage' => 'Tuo annetun sivun alasivuiksi (valinnainen):',
+'import-interwiki-rootpage' => 'Kohteessa oleva perussivu (valinnainen):',
 'import-upload-filename' => 'Tiedostonimi:',
-'import-comment' => 'Syy',
+'import-comment' => 'Kommentti:',
 'importtext' => 'Vie sivuja lähdewikistä käyttäen [[Special:Export|vientityökalua]].
 Tallenna tiedot koneellesi ja tuo ne tällä sivulla.',
 'importstart' => 'Tuodaan sivuja...',
@@ -2989,7 +2996,7 @@ Tallenna tiedot koneellesi ja tuo ne tällä sivulla.',
 'importuploaderrorpartial' => 'Tuontitiedoston tallennus epäonnistui. Tiedostosta oli lähetetty vain osa.',
 'importuploaderrortemp' => 'Tuontitiedoston tallennus epäonnistui. Väliaikaistiedostojen kansio puuttuu.',
 'import-parse-failure' => 'XML-tuonti epäonnistui jäsennysvirheen takia.',
-'import-noarticle' => 'Ei tuotavaa sivua.',
+'import-noarticle' => 'Ei sivua tuotavaksi!',
 'import-nonewrevisions' => 'Kaikki versiot on tuotu aiemmin.',
 'xml-error-string' => '$1 rivillä $2, sarakkeessa $3 (tavu $4): $5',
 'import-upload' => 'Tallenna XML-tiedosto',
@@ -2997,21 +3004,21 @@ Tallenna tiedot koneellesi ja tuo ne tällä sivulla.',
 'import-invalid-interwiki' => 'Määritellystä wikistä ei voi tuoda.',
 'import-error-edit' => 'Sivua $1 ei tuotu, koska sinulla ei ole oikeutta muokata sitä.',
 'import-error-create' => 'Sivua $1 ei tuotu, koska sinulla ei ole oikeutta luoda sitä.',
-'import-error-interwiki' => 'Sivua $1 ei voitu tuoda, koska sen nimi on varattu ulkoisen linkittämisen (interwiki).',
-'import-error-special' => 'Sivua $1 ei tuoda, koska se kuuluu nimitilaan, joka ei salli sivuja.',
-'import-error-invalid' => 'Sivua $1 ei tuoda, koska sen nimi ei kelpaa.',
+'import-error-interwiki' => 'Sivua $1 ei tuotu, koska sen nimi on varattu ulkoiseen linkittämiseen (interwiki).',
+'import-error-special' => 'Sivua $1 ei tuotu, koska se kuuluu erityiseen nimiavaruuteen, joka ei salli sivuja.',
+'import-error-invalid' => 'Sivua $1 ei tuotu, koska sen nimi ei kelpaa.',
 'import-error-unserialize' => 'Versiota $2 sivusta $1 ei voida jakaa osiin. Version ilmoitettiin käyttävän sisältömallia $3 ja sarjoitusmuotoilua $4.',
 'import-options-wrong' => '{{PLURAL:$2|Väärä asetus|Väärät asetukset}}: <nowiki>$1</nowiki>',
-'import-rootpage-invalid' => 'Annettu sivun nimi ei kelpaa.',
-'import-rootpage-nosubpage' => 'Annetun sivun nimiavaruus $1 ei salli alasivuja.',
+'import-rootpage-invalid' => 'Annettu perussivun nimi ei kelpaa.',
+'import-rootpage-nosubpage' => 'Annetun perussivun nimiavaruus "$1" ei salli alasivuja.',
 
 # Import log
 'importlogpage' => 'Tuontiloki',
-'importlogpagetext' => 'Loki toisista wikeistä tuoduista sivuista.',
-'import-logentry-upload' => 'toi sivun [[$1]] lähettämällä tiedoston',
+'importlogpagetext' => 'Loki ylläpitäjien toisista wikeistä tuomista sivuista, joissa on muokkaushistoriaa.',
+'import-logentry-upload' => 'toi sivun [[$1]] tiedostomuodossa',
 'import-logentry-upload-detail' => '{{PLURAL:$1|yksi versio|$1 versiota}}',
 'import-logentry-interwiki' => 'toi toisesta wikistä sivun $1',
-'import-logentry-interwiki-detail' => '{{PLURAL:$1|yksi versio|$1 versiota}} wikistä $2',
+'import-logentry-interwiki-detail' => 'toi {{PLURAL:$1|yhden version|$1 versiota}} wikistä $2',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScriptin testaus',
@@ -3041,9 +3048,9 @@ Tallenna tiedot koneellesi ja tuo ne tällä sivulla.',
 Voit katsella sivun lähteenä olevaa wikitekstiä.',
 'tooltip-ca-history' => 'Sivun aikaisemmat versiot',
 'tooltip-ca-protect' => 'Suojaa tämä sivu',
-'tooltip-ca-unprotect' => 'Muuta tämän sivun suojauksia',
+'tooltip-ca-unprotect' => 'Muuta tämän sivun suojauksen asetuksia',
 'tooltip-ca-delete' => 'Poista tämä sivu',
-'tooltip-ca-undelete' => 'Palauta tämä sivu',
+'tooltip-ca-undelete' => 'Palauta ne muokkaukset, jotka tehtiin tälle sivulle ennen kuin se poistettiin',
 'tooltip-ca-move' => 'Siirrä tämä sivu',
 'tooltip-ca-watch' => 'Lisää tämä sivu tarkkailulistallesi',
 'tooltip-ca-unwatch' => 'Poista tämä sivu tarkkailulistaltasi',
@@ -3055,7 +3062,7 @@ Voit katsella sivun lähteenä olevaa wikitekstiä.',
 'tooltip-n-mainpage-description' => 'Siirry etusivulle',
 'tooltip-n-portal' => 'Keskustelua projektista',
 'tooltip-n-currentevents' => 'Taustatietoa tämänhetkisistä tapahtumista',
-'tooltip-n-recentchanges' => 'Lista tuoreista muutoksista',
+'tooltip-n-recentchanges' => 'Luettelo tuoreista muutoksista',
 'tooltip-n-randompage' => 'Avaa satunnainen sivu',
 'tooltip-n-help' => 'Ohjeita',
 'tooltip-t-whatlinkshere' => 'Lista sivuista, jotka viittaavat tänne',
@@ -3088,10 +3095,11 @@ Voit katsella sivun lähteenä olevaa wikitekstiä.',
 'tooltip-watchlistedit-raw-submit' => 'Päivitä tarkkailulista',
 'tooltip-recreate' => 'Luo sivu uudelleen',
 'tooltip-upload' => 'Aloita tallennus',
-'tooltip-rollback' => 'Palauttaminen kumoaa viimeisimmän muokkaajan yhden tai useamman muutoksen yhdellä kertaa.',
+'tooltip-rollback' => 'Palautustyökalu kumoaa sivun viimeisen muokkaajan yhden tai useamman muutoksen yhdellä kertaa.',
 'tooltip-undo' => 'Kumoaminen palauttaa tämän muutoksen ja avaa artikkelin esikatselussa. Yhteenvetokenttään voi kirjoittaa palautuksen syyn.',
 'tooltip-preferences-save' => 'Tallenna asetukset',
 'tooltip-summary' => 'Kirjoita lyhyt yhteenveto',
+'interlanguage-link-title' => '$1 — $2',
 
 # Stylesheets
 'common.css' => '/* Tämä sivu sisältää koko sivustoa muuttavia tyylejä. */',
@@ -3145,7 +3153,7 @@ Voit katsella sivun lähteenä olevaa wikitekstiä.',
 
 # Info page
 'pageinfo-title' => 'Tietoja sivusta $1',
-'pageinfo-not-current' => 'Tätä tietoa on mahdoton näyttää vanhoille versiolle.',
+'pageinfo-not-current' => 'Valitettavasti ei ole mahdollista antaa tätä tietoa, joka liittyy vanhoihin versioihin.',
 'pageinfo-header-basic' => 'Perustiedot',
 'pageinfo-header-edits' => 'Muutoshistoria',
 'pageinfo-header-restrictions' => 'Sivun suojaus',
@@ -3155,6 +3163,7 @@ Voit katsella sivun lähteenä olevaa wikitekstiä.',
 'pageinfo-length' => 'Sivun pituus (tavuina)',
 'pageinfo-article-id' => 'Sivun tunniste',
 'pageinfo-language' => 'Sivun sisällön kieli',
+'pageinfo-content-model' => 'Sivun sisällön muoto',
 'pageinfo-robot-policy' => 'Hakukonemerkinnät',
 'pageinfo-robot-index' => 'Indeksoitava',
 'pageinfo-robot-noindex' => 'Ei indeksoitava',
@@ -3219,8 +3228,8 @@ Voit katsella sivun lähteenä olevaa wikitekstiä.',
 
 $1',
 'filedelete-missing' => 'Tiedostoa $1 ei voi poistaa, koska sitä ei ole olemassa.',
-'filedelete-old-unregistered' => 'Tiedoston version $1 ei ole tietokannassa.',
-'filedelete-current-unregistered' => 'Tiedosto $1 ei ole tietokannassa.',
+'filedelete-old-unregistered' => 'Tiedoston määritettyä versiota $1 ei ole tietokannassa.',
+'filedelete-current-unregistered' => 'Tiedostoa $1 ei ole tietokannassa.',
 'filedelete-archive-read-only' => 'Arkistohakemistoon ”$1” kirjoittaminen epäonnistui.',
 
 # Browsing diffs
@@ -3240,7 +3249,7 @@ Suorittamalla sen järjestelmäsi voi muuttua epäluotettavaksi.",
 'svg-long-desc' => 'SVG-tiedosto; oletustarkkuus $1 × $2 kuvapistettä; tiedostokoko $3',
 'svg-long-desc-animated' => 'Animoitu SVG-tiedosto; oletustarkkuus $1 × $2 kuvapistettä; tiedostokoko $3',
 'svg-long-error' => 'Kelvoton SVG-tiedosto: $1',
-'show-big-image' => 'Korkeatarkkuuksinen versio',
+'show-big-image' => 'Alkuperäinen tiedosto',
 'show-big-image-preview' => 'Tämän esikatselun koko: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Muu resoluutio|Muut resoluutiot}}: $1.',
 'show-big-image-size' => '$1 × $2 kuvapistettä',
@@ -3707,7 +3716,7 @@ Kaikki muut linkit ovat poikkeuksia eli toisin sanoen sivuja, joissa tiedostoa s
 
 # External editor support
 'edit-externally' => 'Muokkaa tätä tiedostoa ulkoisessa sovelluksessa',
-'edit-externally-help' => '(Katso [//www.mediawiki.org/wiki/Manual:External_editors ohjeet], jos haluat lisätietoja.)',
+'edit-externally-help' => '(Katso [https://www.mediawiki.org/wiki/Manual:External_editors ohjeet], jos haluat lisätietoja.)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'koko historia',
@@ -3889,7 +3898,7 @@ Voit myös muokata listaa [[Special:EditWatchlist|tavalliseen tapaan]].',
 'version-hook-subscribedby' => 'Kytkökset',
 'version-version' => '(Versio $1)',
 'version-license' => 'Lisenssi',
-'version-poweredby-credits' => "Tämä wiki käyttää '''[//www.mediawiki.org/ MediaWikiä]'''. Copyright © 2001–$1 $2.",
+'version-poweredby-credits' => "Tämä wiki käyttää '''[https://www.mediawiki.org/ MediaWikiä]'''. Copyright © 2001–$1 $2.",
 'version-poweredby-others' => 'muut',
 'version-poweredby-translators' => 'translatewiki.net-kääntäjät',
 'version-credits-summary' => 'Haluaisimme kiittää seuraavia henkilöitä heidän panoksestaan [[Special:Version|MediaWiki-ohjelmistoon]].',
@@ -3930,8 +3939,8 @@ Sinun olisi pitänyt saada [{{SERVER}}{{SCRIPTPATH}}/COPYING kopio GNU General P
 
 # Special:SpecialPages
 'specialpages' => 'Toimintosivut',
-'specialpages-note' => '----
-* Normaalit toimintosivut.
+'specialpages-note-top' => 'Merkkien selitys',
+'specialpages-note' => '* Normaalit toimintosivut.
 * <span class="mw-specialpagerestricted">Rajoitetut toimintosivut.</span>',
 'specialpages-group-maintenance' => 'Sivujen huoltaminen',
 'specialpages-group-other' => 'Muut',
@@ -3966,7 +3975,7 @@ Sinun olisi pitänyt saada [{{SERVER}}{{SCRIPTPATH}}/COPYING kopio GNU General P
 'tag-filter-submit' => 'Suodata',
 'tag-list-wrapper' => '([[Special:Tags|{{PLURAL:$1|Merkintä|Merkinnät}}]]: $2)',
 'tags-title' => 'Merkinnät',
-'tags-intro' => 'Tämä sivu luetteloi merkinnät, joilla ohjelmisto voi merkitä muokkauksia, ja niiden tarkoitukset.',
+'tags-intro' => "Tämä sivu luetteloi ne merkinnät (''eng.'' tags), joilla ohjelmisto voi merkitä muokkauksia, ja niiden tarkoitukset.",
 'tags-tag' => 'Merkintänimi',
 'tags-display-header' => 'Näkyvyys muutosluetteloissa',
 'tags-description-header' => 'Täysi kuvaus tarkoituksesta',
index b848b16..942761a 100644 (file)
@@ -1227,7 +1227,6 @@ Legg til merkis, at teirra innihaldsyvirlit av {{SITENAME}} kann vera gamalt og
 'mypreferences' => 'Innstillingar',
 'prefs-edits' => 'Tal av rættingum:',
 'prefsnologin' => 'Tú hevur ikki ritað inn',
-'prefsnologintext' => 'Tú mást vera <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} innritað/ur]</span> fyri at broyta brúkarainnstillingar.',
 'changepassword' => 'Broyt loyniorð',
 'prefs-skin' => 'Hamur',
 'skin-preview' => 'Forskoðan',
@@ -2628,7 +2627,7 @@ Vinarliga vel eitt annað navn.',
 'allmessagesdefault' => 'Enskur tekstur',
 'allmessagescurrent' => 'Verandi tekstur',
 'allmessagestext' => 'Hetta er eitt yvirlit av tøkum kervisboðum í MediaWiki-navnarúmi.
-Vinarliga vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//translatewiki.net translatewiki.net] um tú ynskir at geva títt íkast til ta generisku MediaWiki lokalisatiónina.',
+Vinarliga vitja [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//translatewiki.net translatewiki.net] um tú ynskir at geva títt íkast til ta generisku MediaWiki lokalisatiónina.',
 'allmessagesnotsupportedDB' => "'''{{ns:special}}:AllMessages''' er ikki stuðlað orsakað av at '''\$wgUseDatabaseMessages''' er sløkt.",
 'allmessages-filter-legend' => 'Filtur',
 'allmessages-filter-unmodified' => 'Óbroytt',
@@ -3058,7 +3057,7 @@ Onnur metadáta verða fjald sum standard.
 
 # External editor support
 'edit-externally' => 'Rætta hesa fílu við eksternari applikatión',
-'edit-externally-help' => '(Sí [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] fyri meira kunning)',
+'edit-externally-help' => '(Sí [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] fyri meira kunning)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'alt',
@@ -3148,7 +3147,7 @@ Hendan váttanarkoda fer úr gildi tann $4.',
 'version-hook-name' => 'Krókurnavn',
 'version-version' => '(Útgáva $1)',
 'version-license' => 'Lisensur',
-'version-poweredby-credits' => "Henda wiki verður rikin av '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Henda wiki verður rikin av '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'onnur',
 'version-poweredby-translators' => 'translatewiki.net týðarar',
 'version-credits-summary' => 'Vit ynskja at takka fylgjandi persónum fyri teirra íkast til [[Special:Version|MediaWiki]].',
index d643f59..ccd4cfb 100644 (file)
@@ -60,6 +60,7 @@
  * @author Louperivois
  * @author Ltrlg
  * @author Lucyin
+ * @author Mattho69
  * @author McDutchie
  * @author Meithal
  * @author Metroitendo
@@ -71,6 +72,7 @@
  * @author Omnipaedista
  * @author Peter17
  * @author PieRRoMaN
+ * @author ProgVal
  * @author Quentinv57
  * @author Rastus Vernon
  * @author Remember the dot
@@ -434,7 +436,7 @@ $messages = array(
 'tog-noconvertlink' => 'Désactiver la conversion des titres',
 'tog-norollbackdiff' => "Ne pas afficher le diff lors d'une révocation",
 'tog-useeditwarning' => "M'avertir quand je quitte une page de modification sans publier les changements",
-'tog-prefershttps' => 'Toujours utiliser une connexion sécurisée en étant connecté',
+'tog-prefershttps' => 'Toujours utiliser une connexion sécurisée en étant connecté(e)',
 
 'underline-always' => 'Toujours',
 'underline-never' => 'Jamais',
@@ -797,8 +799,9 @@ Le motif avancé est « ''$2'' ».",
 L'administrateur qui l'a verrouillé a fourni ce motif : « $3 ».",
 'invalidtitle-knownnamespace' => "Titre invalide avec l'espace de noms « $2 » et l'intitulé « $3 »",
 'invalidtitle-unknownnamespace' => "Titre invalide avec le numéro d'espace de noms $1 et l'intitulé « $2 » inconnus",
-'exception-nologin' => 'Non connecté',
-'exception-nologin-text' => "Cette page ou cette action nécessite d'être connecté sur ce wiki.",
+'exception-nologin' => 'Non connecté(e)',
+'exception-nologin-text' => 'Veuillez [[Special:Userlogin|vous connecter]] pour pouvoir accéder à cette page ou cette action.',
+'exception-nologin-text-manual' => 'Veuillez $1 pour pouvoir accéder à cette page ou cette action.',
 
 # Virus scanner
 'virus-badscanner' => "Mauvaise configuration : scanneur de virus inconnu : ''$1''",
@@ -839,7 +842,7 @@ N'oubliez pas de modifier [[Special:Preferences|vos préférences pour {{SITENAM
 'notloggedin' => 'Non connecté',
 'userlogin-noaccount' => "Vous n'avez pas de compte ?",
 'userlogin-joinproject' => 'Rejoignez {{SITENAME}}',
-'nologin' => "Vous n'êtes pas encore inscrit ? $1.",
+'nologin' => "Vous n'avez pas de compte ? $1.",
 'nologinlink' => 'Créer un compte',
 'createaccount' => 'Créer un compte',
 'gotaccount' => "Vous avez déjà un compte ? '''$1'''.",
@@ -848,8 +851,8 @@ N'oubliez pas de modifier [[Special:Preferences|vos préférences pour {{SITENAM
 'userlogin-resetpassword-link' => 'Mot de passe oublié ?',
 'helplogin-url' => 'Help:Connexion',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Aide à la connexion]]',
-'userlogin-loggedin' => 'Vous êtes déjà connecté en tant que {{GENDER:$1|$1}}.
-Utilisez le formulaire ci-dessous pour vous connecter avec un autre utilisateur.',
+'userlogin-loggedin' => 'Vous êtes déjà connecté{{GENDER:$1||e|(e)}} en tant que {{GENDER:$1|$1}}.
+Utilisez le formulaire ci-dessous pour vous connecter avec un autre compte utilisateur.',
 'userlogin-createanother' => 'Créer un autre compte',
 'createacct-join' => 'Entrez vos informations ci-dessous.',
 'createacct-another-join' => 'Saisir les informations du nouveau compte ci-dessous.',
@@ -955,7 +958,7 @@ Si vous décidez de le fournir, il sera utilisé pour attribuer à l’utilisate
 'resetpass_submit' => 'Changer le mot de passe et se connecter',
 'changepassword-success' => 'Votre mot de passe a été changé avec succès !',
 'resetpass_forbidden' => 'Les mots de passe ne peuvent pas être changés',
-'resetpass-no-info' => 'Vous devez être connecté pour avoir accès à cette page.',
+'resetpass-no-info' => 'Vous devez être connecté(e) pour avoir accès à cette page.',
 'resetpass-submit-loggedin' => 'Changer de mot de passe',
 'resetpass-submit-cancel' => 'Annuler',
 'resetpass-wrong-oldpass' => 'Mot de passe actuel ou temporaire invalide.
@@ -996,7 +999,7 @@ Mot de passe temporaire : $2",
 'changeemail' => 'Changer l’adresse de courriel',
 'changeemail-header' => 'Changer l’adresse de courriel du compte',
 'changeemail-text' => 'Remplissez ce formulaire pour changer votre adresse de courriel. Vous devrez entrer votre mot de passe pour confirmer ce changement.',
-'changeemail-no-info' => 'Vous devez être connecté pour pouvoir accéder directement à cette page.',
+'changeemail-no-info' => 'Vous devez être connecté(e) pour pouvoir accéder directement à cette page.',
 'changeemail-oldemail' => 'Adresse de courriel actuelle :',
 'changeemail-newemail' => 'Nouvelle adresse de courriel :',
 'changeemail-none' => '(aucune)',
@@ -1048,7 +1051,7 @@ Vous devriez le faire si vous les avez partagés accidentellement avec quelqu'un
 'showlivepreview' => 'Aperçu rapide',
 'showdiff' => 'Voir les modifications',
 'anoneditwarning' => "'''Attention :''' vous n'êtes pas identifié(e). Votre adresse IP sera enregistrée dans l'historique de cette page.",
-'anonpreviewwarning' => "''Vous n'êtes pas identifié. Sauvegarder enregistrera votre adresse IP dans l'historique des modifications de la page.''",
+'anonpreviewwarning' => "''Vous n'êtes pas identifié(e). Sauvegarder enregistrera votre adresse IP dans l'historique des modifications de la page.''",
 'missingsummary' => "'''Rappel :''' vous n'avez pas encore fourni le résumé de votre modification.
 Si vous cliquez de nouveau sur le bouton « {{int:savearticle}} », la publication sera faite sans nouvel avertissement.",
 'missingcommenttext' => 'Veuillez entrer un commentaire ci-dessous.',
@@ -1097,7 +1100,7 @@ Elle a peut-être été déplacée ou supprimée depuis que vous avez lu cette p
 'loginreqpagetext' => 'Vous devez vous $1 pour voir les autres pages.',
 'accmailtitle' => 'Mot de passe envoyé.',
 'accmailtext' => "Un mot de passe généré aléatoirement pour [[User talk:$1|$1]] a été envoyé à $2.
-Il peut être modifié sur la page ''[[Special:ChangePassword|Changement de mot de passe]]'' après s’être connecté.",
+Il peut être modifié sur la page ''[[Special:ChangePassword|Changement de mot de passe]]'' après s’être connecté{{GENDER:$1||e|(e)}}.",
 'newarticle' => '(Nouveau)',
 'newarticletext' => "Vous avez suivi un lien vers une page qui n'existe pas encore ou qui a été [{{fullurl:Special:Log|type=delete&page={{FULLPAGENAMEE}}}} effacée].
 Pour créer cette page, entrez votre texte dans la boîte ci-dessous (vous pouvez consulter [[{{MediaWiki:Helppage}}|la page d'aide]] pour plus d'informations).
@@ -1169,8 +1172,8 @@ Une solution de rechange a été trouvée pour vous permettre de modifier en tou
 'editingold' => "'''Attention : vous êtes en train de modifier une ancienne version de cette page.
 Si vous la publiez, toutes les modifications effectuées depuis cette version seront perdues.'''",
 'yourdiff' => 'Différences',
-'copyrightwarning' => "Toutes les contributions à {{SITENAME}} sont considérées comme publiées sous les termes de la $2 (voir $1 pour plus de détails). Si vous ne désirez pas que vos écrits soient modifiés et distribués à volonté, merci de ne pas les soumettre ici.<br 
-/>Vous nous promettez aussi que vous avez écrit ceci vous-même, ou que vous l’avez copié d’une source provenant du domaine public, ou d’une ressource libre. '''N’UTILISEZ PAS DE TRAVAUX SOUS DROIT D’AUTEUR SANS AUTORISATION EXPRESSE !'''",
+'copyrightwarning' => "Toutes les contributions à {{SITENAME}} sont considérées comme publiées sous les termes de la $2 (voir $1 pour plus de détails). Si vous ne désirez pas que vos écrits soient modifiés et distribués à volonté, merci de ne pas les soumettre ici.<br />
+Vous nous promettez aussi que vous avez écrit ceci vous-même, ou que vous l’avez copié d’une source provenant du domaine public, ou d’une ressource libre. '''N’UTILISEZ PAS DE TRAVAUX SOUS DROIT D’AUTEUR SANS AUTORISATION EXPRESSE !'''",
 'copyrightwarning2' => "Toutes les contributions à {{SITENAME}} peuvent être modifiées ou supprimées par d’autres utilisateurs. Si vous ne désirez pas que vos écrits soient modifiés et distribués à volonté, merci de ne pas les soumettre ici.<br 
 />Vous nous promettez aussi que vous avez écrit ceci vous-même, ou que vous l’avez copié d’une source provenant du domaine public, ou d’une ressource libre. (voir $1 pour plus de détails).
 '''N’UTILISEZ PAS DE TRAVAUX SOUS DROIT D’AUTEUR SANS AUTORISATION EXPRESSE !'''",
@@ -1339,6 +1342,7 @@ Vous pouvez voir ce diff ; des détails sont disponibles dans le [{{fullurl:{{#S
 Les autres administrateurs de {{SITENAME}} pourront toujours accéder au contenu caché et le restaurer à travers cette même interface, à moins que des restrictions supplémentaires ne soient mises en place.",
 'revdelete-confirm' => 'Confirmez que vous voulez effectuer cette action, que vous en comprenez les conséquences, et que vous le faites en accord avec [[{{MediaWiki:Policy-url}}|les règles]].',
 'revdelete-suppress-text' => "La suppression ne doit être utilisée '''que''' dans les cas suivants :
+* Informations potentiellement diffamatoires
 * Informations personnelles inappropriées
 *: ''adresse, numéro de téléphone, numéro de sécurité sociale, …''",
 'revdelete-legend' => 'Mettre en place des restrictions de visibilité :',
@@ -1349,8 +1353,8 @@ Les autres administrateurs de {{SITENAME}} pourront toujours accéder au contenu
 'revdelete-hide-user' => 'Nom d’utilisateur/Adresse IP de l’éditeur',
 'revdelete-hide-restricted' => "Supprimer ces données aux administrateurs ainsi qu'aux autres",
 'revdelete-radio-same' => '(ne pas changer)',
-'revdelete-radio-set' => 'Visible',
-'revdelete-radio-unset' => 'Masqué',
+'revdelete-radio-set' => 'Masqué',
+'revdelete-radio-unset' => 'Visible',
 'revdelete-suppress' => 'Masquer également les données pour les administrateurs',
 'revdelete-unsuppress' => 'Enlever les restrictions sur les versions restaurées',
 'revdelete-log' => 'Motif :',
@@ -1477,10 +1481,10 @@ Vous pouvez trouver des détails dans le [{{fullurl:{{#Special:Log}}/delete|page
 'search-interwiki-caption' => 'Projets frères',
 'search-interwiki-default' => 'Résultats sur $1 :',
 'search-interwiki-more' => '(plus)',
-'search-relatedarticle' => 'Relaté',
+'search-relatedarticle' => 'Reliés',
 'mwsuggest-disable' => 'Désactiver les suggestions de recherche',
 'searcheverything-enable' => 'Rechercher dans tous les espaces de noms',
-'searchrelated' => 'relaté',
+'searchrelated' => 'reliés',
 'searchall' => 'tout',
 'showingresults' => 'Affichage de <b>$1</b> résultat{{PLURAL:$1||s}} à partir du n°<b>$2</b>.',
 'showingresultsnum' => 'Affichage de <b>$3</b> résultat{{PLURAL:$3||s}} à partir du n°<b>$2</b>.',
@@ -1505,7 +1509,7 @@ Essayez en utilisant le préfixe ''all:'' pour rechercher dans tout le contenu (
 'mypreferences' => 'Préférences',
 'prefs-edits' => 'Nombre de modifications :',
 'prefsnologin' => 'Non connecté',
-'prefsnologintext' => 'Vous devez être <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} connecté]</span> pour modifier vos préférences d\'utilisateur.',
+'prefsnologintext2' => 'Veuillez $1 pour définir les préférences utilisateur.',
 'changepassword' => 'Changer de mot de passe',
 'prefs-skin' => 'Habillage',
 'skin-preview' => 'Prévisualiser',
@@ -1713,7 +1717,7 @@ Cette information sera publique.',
 'right-unblockself' => 'Se débloquer soi-même',
 'right-protect' => 'Modifier les niveaux de protection et modifier les pages protégées en cascade',
 'right-editprotected' => 'Modifier les pages protégées avec « {{int:protect-level-sysop}} »',
-'right-editsemiprotected' => 'Modifier les pages protégées avec « {{int:protect-level-autoconfirmed}} »',
+'right-editsemiprotected' => 'Modifier les pages protégées avec « {{int:protect-level-autoconfirmed}} »',
 'right-editinterface' => "Modifier l'interface utilisateur",
 'right-editusercssjs' => "Modifier les fichiers CSS et JavaScript d'autres utilisateurs",
 'right-editusercss' => "Modifier les fichiers CSS d'autres utilisateurs",
@@ -1844,7 +1848,7 @@ Cette information sera publique.',
 'uploadbtn' => 'Importer le fichier',
 'reuploaddesc' => "Annuler et retourner au formulaire d'import",
 'upload-tryagain' => 'Envoyer la description du fichier modifiée',
-'uploadnologin' => 'Non connecté(e)',
+'uploadnologin' => 'Non connecté{{GENDER:||e|(e)}}',
 'uploadnologintext' => 'Vous devez $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.",
 'upload_directory_read_only' => "Le répertoire d'import de fichier ($1) n'est pas accessible en écriture depuis le serveur web.",
@@ -2058,7 +2062,7 @@ Voyez https://www.mediawiki.org/wiki/Manual:Image_Authorization.",
 'img-auth-notindir' => "Le chemin demandé n'est pas le répertoire d'import configuré.",
 'img-auth-badtitle' => 'Impossible de construire un titre valide à partir de « $1 ».',
 'img-auth-nologinnWL' => "Vous n'êtes pas connecté et « $1 » n'est pas dans la liste blanche.",
-'img-auth-nofile' => "Le fichier « $1 » n'existe pas.",
+'img-auth-nofile' => "Le fichier « $1 » n'existe pas.",
 'img-auth-isdir' => "Vous essayez d'accéder au répertoire « $1 ».
 Seul l'accès aux fichiers est permis.",
 'img-auth-streaming' => 'Lecture en continu de « $1 ».',
@@ -2239,7 +2243,7 @@ N'oubliez pas de vérifier s'il n'y a pas d'autres liens vers les modèles avant
 'pageswithprop' => 'Pages avec une propriété de page',
 'pageswithprop-legend' => 'Pages avec une propriété de page',
 'pageswithprop-text' => 'Cette page liste les pages qui utilisent une propriété de page particulière.',
-'pageswithprop-prop' => 'Nom de la propriété:',
+'pageswithprop-prop' => 'Nom de la propriété :',
 'pageswithprop-submit' => 'Aller',
 'pageswithprop-prophidden-long' => 'valeur de propriété de texte long masquée ($1)',
 'pageswithprop-prophidden-binary' => 'valeur de propriété binaire masquée ($1)',
@@ -2481,8 +2485,8 @@ L'adresse électronique que vous avez indiquée dans [[Special:Preferences|vos p
 'watchlistfor2' => 'Pour $1 $2',
 'nowatchlist' => 'Votre liste de suivi ne référence aucune page.',
 'watchlistanontext' => 'Veuillez vous $1 pour visualiser ou modifier les éléments de votre liste de suivi.',
-'watchnologin' => 'Non connecté',
-'watchnologintext' => 'Vous devez être [[Special:UserLogin|identifié]] pour modifier votre liste de suivi.',
+'watchnologin' => 'Non connecté(e)',
+'watchnologintext' => 'Vous devez être [[Special:UserLogin|identifié(e)]] pour modifier votre liste de suivi.',
 'addwatch' => 'Ajouter à la liste de suivi',
 'addedwatchtext' => 'La page « [[:$1]] » a été ajoutée à votre [[Special:Watchlist|liste de suivi]].
 Les prochaines modifications de cette page et de la page de discussion associée y seront répertoriées.',
@@ -2536,9 +2540,9 @@ Contactez ce contributeur :
 courriel : $PAGEEDITOR_EMAIL
 wiki : $PAGEEDITOR_WIKI
 
-Il n\'y aura pas d\'autres notifications en cas de changements ultérieurs, à moins que vous ne visitiez cette page. Vous pouvez aussi réinitialiser les drapeaux de notification pour toutes les pages de votre liste de suivi.
+Il n’y aura pas d’autres notifications en cas de changements ultérieurs, à moins que vous ne visitiez cette page une fois connecté. Vous pouvez aussi réinitialiser les drapeaux de notification pour toutes les pages de votre liste de suivi.
 
-             Votre système de notification de {{SITENAME}}
+Votre système de notification de {{SITENAME}}
 
 --
 Pour modifier les paramètres de notification par courriel, visitez
@@ -2832,7 +2836,7 @@ Donnez ci-dessous un motif précis (par exemple en citant les pages qui ont ét
 'blockipsuccesssub' => 'Blocage réussi',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] a été bloqué{{GENDER:$1||e|}}.<br />
 Consultez la [[Special:BlockList|liste des blocages]] pour revoir les blocages.',
-'ipb-blockingself' => 'Vous êtes sur le point de bloquer votre propre compte ! Êtes-vous certain de vouloir faire cela ?',
+'ipb-blockingself' => 'Vous êtes sur le point de bloquer votre propre compte ! Êtes-vous certain{{GENDER:||e|(e)}} de vouloir faire cela ?',
 'ipb-confirmhideuser' => "Vous êtes sur le point de bloquer un utilisateur avec « cacher l'utilisateur » activé. Cela supprime le nom de l'utilisateur dans toutes les listes et les entrées du journal. Êtes-vous sûr de vouloir le faire ?",
 'ipb-edit-dropdown' => 'Modifier les motifs de blocage par défaut',
 'ipb-unblock-addr' => 'Débloquer $1',
@@ -2842,8 +2846,8 @@ Consultez la [[Special:BlockList|liste des blocages]] pour revoir les blocages.'
 'unblockip' => 'Débloquer un utilisateur ou une adresse IP',
 'unblockiptext' => "Utilisez le formulaire ci-dessous pour rétablir l'accès aux modifications depuis une adresse IP ou un nom d'utilisateur.",
 'ipusubmit' => 'Supprimer ce blocage',
-'unblocked' => '[[User:$1|$1]] a été débloqué',
-'unblocked-range' => '$1 a été débloqué',
+'unblocked' => '[[User:$1|$1]] a été débloqué{{GENDER:$1||e|(e)}}',
+'unblocked-range' => '$1 a été débloqué{{GENDER:$1||e|(e)}}',
 'unblocked-id' => 'Le blocage $1 a été enlevé',
 'blocklist' => 'Utilisateurs bloqués',
 'ipblocklist' => 'Utilisateurs bloqués',
@@ -2917,7 +2921,7 @@ Vous ne pouvez pas créer un compte.',
 'cant-block-while-blocked' => 'Vous ne pouvez pas bloquer d’autres utilisateurs tant que vous êtes bloqué{{GENDER:||e|(e)}}.',
 'cant-see-hidden-user' => "L’utilisateur que vous tentez de bloquer a déjà été bloqué et masqué. N’ayant pas le droit ''hideuser'', vous ne pouvez pas voir ou modifier le blocage de cet utilisateur.",
 'ipbblocked' => "Vous ne pouvez pas bloquer ou débloquer d'autres utilisateurs, parce que vous êtes vous-même bloqué",
-'ipbnounblockself' => "Vous n'êtes pas autorisé à vous débloquer vous-même",
+'ipbnounblockself' => "Vous n'êtes pas autorisé{{GENDER:||e|(e)}} à vous débloquer vous-même",
 
 # Developer tools
 'lockdb' => 'Verrouiller la base de données',
@@ -3054,7 +3058,7 @@ Dans ce dernier cas vous pouvez aussi utiliser un lien, tel que [[{{#Special:Exp
 'allmessagesdefault' => 'Message par défaut',
 'allmessagescurrent' => 'Message actuel',
 'allmessagestext' => "Ceci est la liste des messages disponibles dans l'espace MediaWiki.
-Veuillez visiter la [//www.mediawiki.org/wiki/Localisation Localisation de MediaWiki] et [//translatewiki.net/ translatewiki.net] si vous désirez contribuer à la localisation générique de MediaWiki.",
+Veuillez visiter la [https://www.mediawiki.org/wiki/Localisation Localisation de MediaWiki] et [//translatewiki.net/ translatewiki.net] si vous désirez contribuer à la localisation générique de MediaWiki.",
 'allmessagesnotsupportedDB' => "Cette page '''{{ns:special}}:Allmessages''' n'est pas utilisable car '''\$wgUseDatabaseMessages''' a été désactivé.",
 'allmessages-filter-legend' => 'Filtrer',
 'allmessages-filter' => 'Filtrer par état de modification :',
@@ -3221,7 +3225,7 @@ Vous pouvez toutefois en visualiser la source.',
 'tooltip-undo' => '« Annuler » rétablit la modification précédente et ouvre la fenêtre de modification en mode prévisualisation. Il est possible d’ajouter une raison dans le résumé.',
 'tooltip-preferences-save' => 'Sauvegarder les préférences',
 'tooltip-summary' => 'Entrez un bref résumé',
-'tooltip-iwiki' => '$1 — $2',
+'interlanguage-link-title' => '$1 — $2',
 
 # Stylesheets
 'common.css' => '/* Le CSS placé ici sera appliqué à tous les habillages. */',
@@ -3285,6 +3289,7 @@ Ne '''RIEN''' inscrire ici !",
 'pageinfo-length' => 'Taille de la page (en octets)',
 'pageinfo-article-id' => 'Numéro de la page',
 'pageinfo-language' => 'Langue du contenu de la page',
+'pageinfo-content-model' => 'Modèle de contenu de la page',
 'pageinfo-robot-policy' => 'Indexation par robots',
 'pageinfo-robot-index' => 'Autorisée',
 'pageinfo-robot-noindex' => 'Interdite',
@@ -3371,7 +3376,7 @@ Si vous l'exécutez, votre système peut être compromis.",
 'svg-long-desc' => 'Fichier SVG, résolution de $1 × $2 pixels, taille : $3',
 'svg-long-desc-animated' => 'Fichier SVG animé, taille $1 x $2 pixels, taille du fichier: $3',
 'svg-long-error' => 'Fichier SVG non valide: $1',
-'show-big-image' => 'Image en plus haute résolution',
+'show-big-image' => "Fichier d'origine",
 'show-big-image-preview' => 'Taille de cet aperçu : $1.',
 'show-big-image-other' => '{{PLURAL:$2|Autre résolution|Autres résolutions}} : $1.',
 'show-big-image-size' => '$1 × $2 pixels',
@@ -3843,7 +3848,7 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 
 # External editor support
 'edit-externally' => 'Modifier ce fichier en utilisant une application externe',
-'edit-externally-help' => "(Consulter [//www.mediawiki.org/wiki/Manual:External_editors/fr les instructions d'installation] pour plus d'informations)",
+'edit-externally-help' => "(Consulter [https://www.mediawiki.org/wiki/Manual:External_editors/fr les instructions d'installation] pour plus d'informations)",
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tout',
@@ -3931,7 +3936,7 @@ $5',
 'scarytranscludetoolong' => "[L'URL est trop longue]",
 
 # Delete conflict
-'deletedwhileediting' => "'''Attention''' : cette page a été supprimée après que vous avez commencé à la modifier !",
+'deletedwhileediting' => "'''Attention''' : cette page a été supprimée après que vous ayez commencé à la modifier !",
 'confirmrecreate' => "L’utilisateur [[User:$1|$1]] ([[User talk:$1|Discussion]]) a supprimé cette page, alors que vous aviez commencé à la modifier, pour le motif suivant :
 : ''$2''
 Veuillez confirmer que vous désirez réellement recréer cette page.",
@@ -3953,6 +3958,7 @@ Veuillez confirmer que vous désirez réellement recréer cette page.",
 'semicolon-separator' => '&nbsp;;&#32;',
 'colon-separator' => '&nbsp;:&#32;',
 'percent' => '$1&#160;%',
+'quotation-marks' => '« $1 »',
 
 # Multipage image navigation
 'imgmultipageprev' => '← page précédente',
@@ -4105,7 +4111,7 @@ Vous pouvez aussi [[Special:EditWatchlist|utiliser l'éditeur normal]].",
 'version-hook-subscribedby' => 'Abonnés :',
 'version-version' => '(version $1)',
 'version-license' => 'Licence',
-'version-poweredby-credits' => "Ce wiki fonctionne grâce à '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Ce wiki fonctionne grâce à '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'autres',
 'version-poweredby-translators' => 'traducteurs de translatewiki.net',
 'version-credits-summary' => 'Nous tenons à remercier les personnes suivantes pour leur contribution à  [[Special:Version|MediaWiki]].',
@@ -4148,10 +4154,9 @@ Vous devriez avoir reçu [{{SERVER}}{{SCRIPTPATH}}/COPYING une copie de la Licen
 
 # Special:SpecialPages
 'specialpages' => 'Pages spéciales',
-'specialpages-note' => '----
-* Pages spéciales normales.
-* <span class="mw-specialpagerestricted">Pages spéciales restreintes.</span>
-* <span class="mw-specialpagecached">Pages spéciales seulement en cache (pourraient être désuètes).</span>',
+'specialpages-note-top' => 'Légende',
+'specialpages-note' => '* Pages spéciales normales.
+* <span class="mw-specialpagerestricted">Pages spéciales restreintes.</span>',
 'specialpages-group-maintenance' => 'Rapports de maintenance',
 'specialpages-group-other' => 'Autres pages spéciales',
 'specialpages-group-login' => "S'identifier / s'inscrire",
index e83aa9a..df78848 100644 (file)
@@ -1449,7 +1449,6 @@ Notâd que lor endèxacion du contegnu de {{SITENAME}} pôt pas étre a jorn.',
 'mypreferences' => 'Prèferences',
 'prefs-edits' => 'Nombro de changements :',
 'prefsnologin' => 'Pas branchiê',
-'prefsnologintext' => 'Vos dête étre <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} branchiê]</span> por dèfenir les prèferences utilisator.',
 'changepassword' => 'Changiér lo contresegno',
 'prefs-skin' => 'Habelyâjo',
 'skin-preview' => 'Prèvêre',
@@ -2988,7 +2987,7 @@ Dens cél dèrriér câs, vos pouede asse-ben utilisar un lim, coment [[{{#Speci
 'allmessagesdefault' => 'Mèssâjo per dèfôt',
 'allmessagescurrent' => 'Tèxto d’ora',
 'allmessagestext' => 'O est la lista des mèssâjos sistèmo disponiblos dens l’èspâço MediaWiki.
-Volyéd visitar la [//www.mediawiki.org/wiki/Localisation localisacion de MediaWiki] et pués [//translatewiki.net translatewiki.net] se vos voléd contribuar a la localisacion g·ènèrica de MediaWiki.',
+Volyéd visitar la [https://www.mediawiki.org/wiki/Localisation localisacion de MediaWiki] et pués [//translatewiki.net translatewiki.net] se vos voléd contribuar a la localisacion g·ènèrica de MediaWiki.',
 'allmessagesnotsupportedDB' => "Ceta pâge '''{{ns:special}}:Allmessages''' est inutilisâbla perce que '''\$wgUseDatabaseMessages''' at étâ dèsactivâ.",
 'allmessages-filter-legend' => 'Filtro',
 'allmessages-filter' => 'Filtrar per ètat de changement :',
@@ -3737,7 +3736,7 @@ Los ôtros champs seront cachiês per dèfôt.
 
 # External editor support
 'edit-externally' => 'Changiér ceti fichiér en utilisent una aplicacion de defôr',
-'edit-externally-help' => '(Vêde les [//www.mediawiki.org/wiki/Manual:External_editors enstruccions d’enstalacion] por més d’enformacions)',
+'edit-externally-help' => '(Vêde les [https://www.mediawiki.org/wiki/Manual:External_editors enstruccions d’enstalacion] por més d’enformacions)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tot',
@@ -3999,7 +3998,7 @@ Vos pouede asse-ben utilisar l’[[Special:EditWatchlist|èditor normal]].',
 'version-version' => '(Vèrsion $1)',
 'version-svn-revision' => '(v$2)',
 'version-license' => 'Licence',
-'version-poweredby-credits' => "Ceti vouiqui fonccione grâce a '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Ceti vouiqui fonccione grâce a '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'ôtros',
 'version-license-info' => 'MediaWiki est una programeria libra ; vos la pouede tornar distribuar et / ou changiér d’aprés los tèrmos de la Licence publica g·ènèrala GNU coment publeyê per la Free Software Foundation ; seye la vèrsion 2 de la Licence, ou ben (a voutron chouèx) tota novèla vèrsion.
 
@@ -4026,8 +4025,7 @@ Vos devriâd avêr reçu un [{{SERVER}}{{SCRIPTPATH}}/COPYING ègzemplèro de la
 
 # Special:SpecialPages
 'specialpages' => 'Pâges spèciâles',
-'specialpages-note' => '----
-* Pâges spèciâles normales.
+'specialpages-note' => '* Pâges spèciâles normales.
 * <span class="mw-specialpagerestricted">Pâges spèciâles rètrentes.</span>
 * <span class="mw-specialpagecached">Pâges spèciâles solament en cache (porriant étre dèpassâs).</span>',
 'specialpages-group-maintenance' => 'Rapôrts de mantegnence',
index 53d89d2..d62dadd 100644 (file)
@@ -479,7 +479,7 @@ Ferjid det ei, an aachte üüb din [[Special:Preferences|{{SITENAME}} iinstelang
 'gotaccount' => "Dü hääst ål en brükerkonto? '''$1'''.",
 'gotaccountlink' => 'Uunmelde',
 'userlogin-resetlink' => 'Heest dü din login dooten ferjiden?',
-'userlogin-resetpassword-link' => 'Paaswurd turagsaat',
+'userlogin-resetpassword-link' => 'Paaswurd ferjiden?',
 'helplogin-url' => 'Help:Uunmelde',
 'userlogin-helplink' => "[[{{MediaWiki:helplogin-url}}|Halep bi't uunmeldin]]",
 'userlogin-loggedin' => 'Du beest al üs {{GENDER:$1|$1}} uunmeldet.
@@ -505,8 +505,8 @@ Brük det formulaar diar oner, am di mä en öödern nööm uuntumeldin.',
 'createacct-benefit-body2' => '{{PLURAL:$1|sidj|sidjen}}',
 'createacct-benefit-body3' => 'aktiif {{PLURAL:$1|skriiwer|skriiwern}}',
 'badretype' => 'Jo tau paaswurden san ei likedenang.',
-'userexists' => 'Dideer brükernoome as ål ferjääwen.
-Wees sü gödj en kiis en ouderen.',
+'userexists' => 'Didiar brükernööm as al wech.
+Wees so gud an schük di en öödern.',
 'loginerror' => "Bi't uunmeldin as wat skiaf gingen",
 'createacct-error' => "Bi't iinrachten faan det brükerkonto as wat skiaf gingen",
 'createaccounterror' => 'Brükerkonto küd ei iinracht wurd: $1',
@@ -532,7 +532,7 @@ Wees so gud an ferschük det noch ans.',
 Ferschük det man noch ans.',
 'passwordtooshort' => 'Paaswurden skel tumanst {{PLURAL:$1|1 tiaken|$1 tiakens}} lung wees.',
 'password-name-match' => 'Dü könst dan brükernööm ei üs paaswurd nem.',
-'password-login-forbidden' => 'Jüdeer brükernoome än paasuurd as ferbin.',
+'password-login-forbidden' => 'Didiar brükernööm mä detdiar paaswurd as ei tuläät.',
 'mailmypassword' => 'Schüür mi en nei paaswurd.',
 'passwordremindertitle' => 'Nei tidjwiis paaswurd för {{SITENAME}}',
 'passwordremindertext' => 'En brüker (woorskiinelk dü, faan IP adres $1) hää am en nei paaswurd för {{SITENAME}} ($4) fraaget.
@@ -578,7 +578,7 @@ Wees so gud an teew $1, iar dü det noch ans ferschükst.',
 'createacct-another-realname-tip' => 'Stäänt tu wool. Wan dü dan rochten nööm uundääst, koon hi mä din feranrangen ferbünjen wurd.',
 
 # Email sending
-'php-mail-error-unknown' => 'Ünbekäänd feeler mä det funktsjuun mail() faan PHP.',
+'php-mail-error-unknown' => 'Ünbekäänd feeler mä det funktjuun mail() faan PHP.',
 'user-mail-no-addy' => 'Küd nian e-mail schüür saner e-mail-adres.',
 'user-mail-no-body' => 'Dü wulst en e-mail saner tekst wechsjüür.',
 
@@ -609,10 +609,10 @@ of am en nei paaswurd uunfraaget.',
 'passwordreset-legend' => 'Paaswurd turagsaat',
 'passwordreset-disabled' => 'Dü könst din paaswurd uun detdiar wiki ei turagsaat.',
 'passwordreset-emaildisabled' => 'E-mail as üüb detheer Wiki ufknipset wurden.',
-'passwordreset-username' => 'Brükernoome:',
+'passwordreset-username' => 'Brükernööm:',
 'passwordreset-domain' => 'Domain:',
 'passwordreset-capture' => 'Wel dü det e-mail nooracht uunluke?',
-'passwordreset-capture-help' => 'Wan dü detheer kasje uunkrüsagst, woort det e-mail nooracht mä det nei paaswurd uunwiset an tu di brüker sjüürd.',
+'passwordreset-capture-help' => 'Wan dü detheer kasche uunkrüsagst, woort det e-mail nooracht mä det nei paaswurd uunwiset an tu di brüker schüürd.',
 'passwordreset-email' => 'E-mail adres:',
 'passwordreset-emailtitle' => 'Brükerkonto aw {{SITENAME}}',
 'passwordreset-emailtext-ip' => 'Hoker mä det IP-Adres $1, woorskiinelk dü salew, wul hal brükerinformatsjuunen för {{SITENAME}} tusjüürd fu ($4). {{PLURAL:$3|Detdiar brükerkonto as|Jodiar brükerkontos san}} mä detdiar E-Mail-adres ferbünjen:
@@ -626,8 +626,8 @@ Dü skulst di uunmelde an en nei paaswurd iinracht. Wan hoker ööders detheer u
 $2
 
 {{PLURAL:$3|Detheer tidjwiis paaswurd lääpt|Joheer tidjwiis paaswurden luup}} efter {{PLURAL:$5|ään dai|$5 daar}} uf. Dü skulst di uunmelde an en nei paaswurd iinracht. Wan hoker ööders detheer uunfraag steld hää of dü din ual paaswurd käänst, säärst dü niks widjer onernem. Melde di ianfach mä din ual paaswurd uun.',
-'passwordreset-emailelement' => 'Brükernoome: $1
-Tidwis paasuurd: $2',
+'passwordreset-emailelement' => 'Brükernööm: $1
+Tidjwiis paaswurd: $2',
 'passwordreset-emailsent' => 'Diar as en E-Mail tu di onerwais.',
 'passwordreset-emailsent-capture' => 'Detdiar E-Mail, wat oner uunwiset woort, as tu di onerwais.',
 'passwordreset-emailerror-capture' => 'Detdiar E-Mail, wat oner uunwiset woort, wiar tu di onerwais, oober küd ei tu di {{GENDER:$2|brüker}} ufsjüürd wurd: $1',
@@ -693,7 +693,7 @@ Wan dü det sidj seekerst, woort det saner auerskraft auernimen.",
 'summary-preview' => 'Föörskau faan det tuupfaadang:',
 'subject-preview' => 'Föörskau faan det auerskraft:',
 'blockedtitle' => 'Brüker as speret',
-'blockedtext' => "'''Dan brükernööm of IP adres as speret wurden.'''
+'blockedtext' => "'''Dan brükernööm of din IP-adres as speret wurden.'''
 
 Det as maaget wurden faan $1.
 Di grünj as ''$2''.
@@ -704,11 +704,11 @@ Di grünj as ''$2''.
 
 Dü könst $1 kontaktiare of uk en [[{{MediaWiki:Grouppage-sysop}}|administraator]] am det tu diskutiarin.
 
-Dü könst ei det E-Mail-funktsjuun 'E-mail tu dideere brüker' brük, so loong dü nian E-Mail-adres uun din [[Special:Preferences|brükerkonto iinstelangen]] uunden heest of wan det E-Mail-funktsjuun för di speret wurden as.
+Dü könst ei det e-mail-funktjuun 'E-mail tu didiar brüker' brük, so loong dü nian e-mail-adres uun din [[Special:Preferences|brükerkonto-iinstelangen]] uunden heest of wan det e-mail-funktjuun för di speret wurden as.
 
-Uugenblakelk as din IP addres $3, an det sper ID as #$5.
-För arke uunfraag wurd aal jo informatsjuunen boowen brükt.",
-'autoblockedtext' => "'''Din IP adres as speret wurden, auer det faan en öödern spereten brüker brükt wurden as.'''
+Uugenblakelk as din IP-addres $3, an det sper-ID as #$5.
+För arke uunfraag wurd aal jo informatjuunen boowen brükt.",
+'autoblockedtext' => "'''Din IP-adres as speret wurden, auer det faan en öödern spereten brüker brükt wurden as.'''
 
 Di grünj as:
 : ''$2''.
@@ -719,10 +719,10 @@ Di grünj as:
 
 Dü könst $1 kontaktiare of uk en [[{{MediaWiki:Grouppage-sysop}}|administraator]] am det tu diskutiarin.
 
-Dü könst ei det E-Mail-funktsjuun 'E-mail tu dideere brüker' brük, so loong dü nian E-Mail-adres uun din [[Special:Preferences|brükerkonto iinstelangen]] uunden heest of wan det E-Mail-funktsjuun för di speret wurden as.
+Dü könst ei det e-mail-funktjuun 'E-mail tu didiar brüker' brük, so loong dü nian e-mail-adres uun din [[Special:Preferences|brükerkonto-iinstelangen]] uunden heest of wan det e-mail-funktjuun för di speret wurden as.
 
-Uugenblakelk as din IP addres $3, an det sper ID as #$5.
-För arke uunfraag wurd aal jo informatsjuunen boowen brükt.",
+Uugenblakelk as din IP-addres $3, an det sper-ID as #$5.
+För arke uunfraag wurd aal jo informatjuunen boowen brükt.",
 'blockednoreason' => 'nään grünj uunden',
 'whitelistedittext' => 'Dü skel di $1, am sidjen tu bewerkin.',
 'confirmedittext' => 'Dü skel iarst din e-mail-adres gudkään, iar dü began könst tu werkin. Maage det üüb det sidj mä din persöönelk [[Special:Preferences|iinstelangen]].',
@@ -976,7 +976,7 @@ Dü könst di ferskeel uunluke. Wan dü muar wed wel, luke iin uun't [{{fullurl:
 'revdelete-confirm' => 'Ferseekre noch ans, dat dü det würelk du wel, dat dü witjst, wat dü dääst, an dat det mä a [[{{MediaWiki:Policy-url}}|bestemangen]] auerian stemet.',
 'revdelete-suppress-text' => "Det skul '''bluas''' onertrakt wurd bi:
 * Persöönelk informatsjuunen, diar näämen wat uungung
-*: ''Adresen, Tilefoonnumern, Ferseekerangsnumern an sowat''",
+*: ''Adresen, tilefoonnumern, ferseekerangsnumern an sowat''",
 'revdelete-legend' => 'Iinstelangen, hüföl tu sen wees skal',
 'revdelete-hide-text' => 'Tekst faan det werjuun',
 'revdelete-hide-image' => 'Fersteeg, wat uun det datei stäänt',
@@ -1034,8 +1034,8 @@ Aachte diarüüb, dat di ferluup faan det sidj uk rocht as.',
 'mergehistory-into' => 'Ööder sidj:',
 'mergehistory-list' => 'Werjuunen, diar tuupfeerd wurd kön.',
 'mergehistory-merge' => 'Jodiar werjuunen faan „[[:$1]]“ kön efter „[[:$2]]“ auerdraanj wurd.
-Kääntiakne det wersjuun, wat üs leetst mä auerdraanj wurd skal.
-A nawigatjuun links saat ales weder turag üüb di ual stant.',
+Kääntiakne det werjuun, wat üs leetst mä auerdraanj wurd skal.
+A nawigatjuun-links saat ales weder turag üüb di ual stant.',
 'mergehistory-go' => 'Wise werjuunen, diar tuupfeerd wurd kön.',
 'mergehistory-submit' => 'Werjuunen tuupfeer',
 'mergehistory-empty' => 'Nian werjuunen kön tuupfeerd wurd.',
@@ -1140,7 +1140,6 @@ Dü könst det uun't [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}
 'mypreferences' => 'Iinstelangen',
 'prefs-edits' => 'Taal faan feranrangen:',
 'prefsnologin' => 'Ei uunmeldet',
-'prefsnologintext' => 'Dü skel <span class="plainlinks">[{{fullurl:{{#special:UserLogin}}|returnto=$1}} uunmeldet]</span> wees, am din iinstelangen tu feranrin.',
 'changepassword' => 'Paaswurd feranre',
 'prefs-skin' => 'Skak',
 'skin-preview' => 'Föörskau',
@@ -1475,7 +1474,7 @@ Arken koon det lees.',
 
 # Upload
 'upload' => 'Datei huuchschüür',
-'uploadbtn' => 'Datei huuchsjüür',
+'uploadbtn' => 'Datei huuchschüür',
 'reuploaddesc' => "Ufbreeg an turag tu't sidj för't huuchschüüren",
 'upload-tryagain' => 'Feranert dateibeskriiwang ufsjüür',
 'uploadnologin' => 'Ei uunmeldet',
@@ -1515,13 +1514,13 @@ Am en '''bil''' uun en artiikel tu brüken, brük en link faan det furem:
 'badfilename' => 'Det datei hää en neien nööm füngen an het nü „$1“.',
 'filetype-mime-mismatch' => 'Det dateiaanj „.$1“ paaset ei tu di MIME-Typ ($2).',
 'filetype-badmime' => 'Datein faan di MIME-Typ „$1“ mut ei huuchschüürd wurd.',
-'filetype-bad-ie-mime' => 'Detdiar datei koon ei huuchsjüürd wurd, auer di Internet Explorer det för en „$1“ häält, an di slach as ei tuläät, auer hi gefeerelk wees küd.',
+'filetype-bad-ie-mime' => 'Detdiar datei koon ei huuchschüürd wurd, auer di Internet Explorer det för en „$1“ häält, an di slach as ei tuläät, auer hi gefeerelk wees küd.',
 'filetype-unwanted-type' => "'''„.$1“''' as üs dateiformaat ei tuläät. Tuläät {{PLURAL:$3|as detdiar formaat|san jodiar formaaten}}: $2.",
 'filetype-banned-type' => "'''„.$1“''' {{PLURAL:$4|as nään tuläät slach faan datein|san nian tuläät slacher faan datein}}.
 {{PLURAL:$3|En tuläät slach as|Tuläät slacher san}} $2.",
-'filetype-missing' => 'Det datei, wat dü huuchsjüür wel, hää nian aanj (t.b. „.jpg“).',
-'empty-file' => 'Det datei, wat dü huuchsjüürd heest, as leesag.',
-'file-too-large' => 'Det datei, wat dü huuchsjüürd heest, as tu grat.',
+'filetype-missing' => 'Det datei, wat dü huuchschüür wel, hää nian aanj (t.b. „.jpg“).',
+'empty-file' => 'Det datei, wat dü huuchschüürd heest, as leesag.',
+'file-too-large' => 'Det datei, wat dü huuchschüürd heest, as tu grat.',
 'filename-tooshort' => 'Di dateinööm as tu kurt.',
 'filetype-banned' => 'Son slach faan datei as ei tuläät.',
 'verification-error' => 'Det datei hää det seekerhaidspreew ei bestenen.',
@@ -1533,8 +1532,8 @@ Am en '''bil''' uun en artiikel tu brüken, brük en link faan det furem:
 'tmp-write-error' => "Bi't skriiwen faan det tidjwiis datei as wat skiaf gingen.",
 'large-file' => 'Datein skul ei grater wees üs $1, wan mögelk. Detdiar datei as $2 grat.',
 'largefileserver' => 'Detdiar datei as grater, üs di server üüb iinsteld as.',
-'emptyfile' => 'Det datei, wat dü huuchsjüürd heest, as leesag. Ferlicht heest dü di ferskrewen. Luke noch ans, of dü würelk detdiar datei huuchsjüür wel.',
-'windows-nonascii-filename' => 'Detheer Wiki läät nian dateinöömer mä sondertiaken tu.',
+'emptyfile' => 'Det datei, wat dü huuchschüürd heest, as leesag. Ferlicht heest dü di ferskrewen. Luke noch ans, of dü würelk detdiar datei huuchschüür wel.',
+'windows-nonascii-filename' => 'Detheer wiki läät nian dateinöömer mä aparte tiakens tu.',
 'fileexists' => 'En datei mä didiar nööm jaft at al. Luke noch ans efter <strong>[[:$1]]</strong>, wan dü ei gans seeker beest, of dü det anre wel.
 [[$1|thumb]]',
 'filepageexists' => "En beskriiwangssidj för <strong>[[:$1]]</strong> as al diar, oober nian datei. Din beskriiwang woort ei apnimen. Det beskriiwangssidj mut do man efter't huuchschüüren noch ans efterluket wurd.
@@ -1543,26 +1542,26 @@ Am en '''bil''' uun en artiikel tu brüken, brük en link faan det furem:
 * Nööm faan det nei datei: <strong>[[:$1]]</strong>
 * Nööm faan det ual datei: <strong>[[:$2]]</strong>
 Wees so gud an nem en öödern nööm.',
-'fileexists-thumbnail-yes' => "Detdiar datei as was en letjer maaget bil ''(thumbnail)''. [[$1|thumb]]
+'fileexists-thumbnail-yes' => "Detdiar datei as was en sümnaielbil ''(thumbnail)''. [[$1|thumb]]
 Luke di det datei <strong>[[:$1]]</strong> noch ans uun.
-Wan det det originaal bil as, säärst dü nään letjer maaget bil huuchsjüür.",
-'file-thumbnail-no' => "Di dateinööm begant mä <strong>$1</strong>. Det as was en letjer maaget bil ''(thumbnail)''.
+Wan det det originaal bil as, säärst dü nian sümnaielbil huuchschüür.",
+'file-thumbnail-no' => "Di dateinööm begant mä <strong>$1</strong>. Det as was en sümnaielbil ''(thumbnail)''.
 Luke noch ans efter, of dü det bil uun fol grate diar heest, an do schüür det huuch.",
 'fileexists-forbidden' => 'En datei mä didiar nööm jaft at al an koon ei auerskrewen wurd.
 Gung noch ans turag an schüür det datei mä en öödern nööm huuch.
 [[File:$1|thumb|center|$1]]',
-'fileexists-shared-forbidden' => "En datei mä didiar nööm stäänt al uun't gemiansoom archiif. Wan dü det bil likes huuchsjüür wel, gung turag nem en öödern nööm.
+'fileexists-shared-forbidden' => "En datei mä didiar nööm stäänt al uun't gemiansoom archiif. Wan dü det bil likes huuchschüür wel, gung turag an nem en öödern nööm.
 [[File:$1|thumb|center|$1]]",
 'file-exists-duplicate' => 'Detdiar datei as en duplikaat faan {{PLURAL:$1|detdiar datei|$1 datein}}:',
 'file-deleted-duplicate' => "En duplikaat faan detdiar datei ([[:$1]]) as al ans stregen wurden. Luke iin uun logbuk för't striken, iar dü det noch ans huuchsjüürst.",
 'uploadwarning' => 'Wäärnang',
-'uploadwarning-text' => 'Feranre det datei-beskriiwang an fersjük det noch ans nei.',
+'uploadwarning-text' => 'Feranre det datei-beskriiwang an ferschük det noch ans nei.',
 'savefile' => 'Datei seekre',
 'uploadedimage' => 'hää "[[$1]]" huuchschüürd',
-'overwroteimage' => 'hää en nei werjuun faan „[[$1]]“ huuchsjüürd',
+'overwroteimage' => 'hää en nei werjuun faan „[[$1]]“ huuchschüürd',
 'uploaddisabled' => 'Huuchschüüren as ei aktiwiaret',
 'copyuploaddisabled' => 'Huuchschüüren faan URLs as ei aktiwiaret.',
-'uploadfromurl-queued' => 'Din huuchsjüürd datei teewt.',
+'uploadfromurl-queued' => 'Din huuchschüürd datei teewt.',
 'uploaddisabledtext' => 'Det huuchschüüren faan datein as ei aktiwiaret.',
 'php-uploaddisabledtext' => 'Det huuchschüüren faan datein as uun PHP ei aktiwiaret.
 Luke di det iinstelang faan <code>file_uploads</code> uun.',
@@ -1578,7 +1577,7 @@ Java-datein kön ei tuläät wurd, auer jo det seekerhaid uun fraag stel küd.',
 'upload-description' => 'Dateibeskriiwang',
 'upload-options' => "Iinstelangen för't huuchschüüren",
 'watchthisupload' => 'Luke efter detdiar datei',
-'filewasdeleted' => 'En datei mä didiar nööm as al ans huuchsjüürd an leederhen weder stregen wurden. Luke iarst ans iin uun $1, iar dü det datei würelk seekerst.',
+'filewasdeleted' => 'En datei mä didiar nööm as al ans huuchschüürd an leederhen weder stregen wurden. Luke iarst ans iin uun $1, iar dü det datei würelk seekerst.',
 'filename-bad-prefix' => "Di dateinööm begant mä '''„$1“'''. Sok nöömer kem miast faan digitaalkameras an sai ei föl ütj.
 Nem en beedern nööm för det datei.",
 'upload-success-subj' => 'Det huuchschüüren hää loket.',
@@ -1692,7 +1691,7 @@ För a seekerhaid as img_auth.php ei aktiwiaret.',
 'upload-curl-error6' => 'URL küd ei fünjen wurd',
 'upload-curl-error6-text' => 'Det URL küd ei fünjen wurd. Luke di det URL noch ans uun, an of det sidj uk würelk diar as.',
 'upload-curl-error28' => 'Det huuchschüüren hää tu loong düüret (time-out).',
-'upload-curl-error28-text' => 'Det sidj hää tu loong ei swaaret (time-out). Luke noch ans efter, of det sidj uk würelk diar as. Fersjük det beeder leeder noch ans weder.',
+'upload-curl-error28-text' => 'Det sidj hää tu loong ei swaaret (time-out). Luke noch ans efter, of det sidj uk würelk diar as. Ferschük det beeder leeder noch ans weder.',
 
 'license' => 'Lisens:',
 'license-header' => 'Lisens',
@@ -1754,7 +1753,7 @@ Ferlicht wel dü det [$2 beskriiwangssidj] feranre.',
 'sharedupload-desc-create' => 'Detdiar datei as faan $1 an koon faan ööder projekten brükt wurd.
 Ferlicht wel dü det [$2 beskriiwangssidj] feranre.',
 'filepage-nofile' => 'En datei mä didiar nööm jaft at ei.',
-'filepage-nofile-link' => 'En datei mä didiar nööm jaft at ei, man dü könst det [$1 huuchsjüür].',
+'filepage-nofile-link' => 'En datei mä didiar nööm jaft at ei, man dü könst det [$1 huuchschüür].',
 'uploadnewversion-linktext' => 'En nei werjuun faan detdiar datei huuchschüür',
 'shared-repo-from' => 'foon $1',
 'shared-repo' => 'en gemiansoom archiif',
@@ -1928,7 +1927,7 @@ Uun arke rä stun ferwisangen tu't iarst an ööder widjerfeerang an uk tu det s
 'usereditcount' => '{{PLURAL:$1|feranrang|$1 feranrangen}}',
 'usercreated' => '{{GENDER:$3|Maaget}} di $1 am a klook $2',
 'newpages' => 'Nei sidjen',
-'newpages-username' => 'Brükernoome:',
+'newpages-username' => 'Brükernööm:',
 'ancientpages' => 'Al loong ei muar bewerket sidjen',
 'move' => 'Fersküüw',
 'movethispage' => 'Detdiar sidj fersküüw',
@@ -2057,7 +2056,7 @@ Din aanj e-mail adres faan din [[Special:Preferences|iinstelangen]] woort uunwis
 'usermaildisabledtext' => 'Dü könst nian e-mail tu ööder brükern schüür.',
 'noemailtitle' => 'Nian e-mail adres',
 'noemailtext' => 'Didiar brüker hää nian gudkäänd e-mail adres uunden.',
-'nowikiemailtitle' => 'E-mail koon ei sjüürd wurd',
+'nowikiemailtitle' => 'E-mail koon ei wechschüürd wurd',
 'nowikiemailtext' => 'Didiar brüker maad nian e-mails faan ööder brükern fu.',
 'emailnotarget' => 'Didiar brükernööm as ei bekäänd of ei gudkäänd, am ham en e-mail tu schüüren',
 'emailtarget' => 'Brükernööm faan di ööder brüker iindu',
@@ -2269,7 +2268,7 @@ Dü könst det seekerhaid feranre, det feranert oober ei det seekerhaid faan jo
 'restriction-edit' => 'Bewerke',
 'restriction-move' => 'Fersküüw',
 'restriction-create' => 'Maage',
-'restriction-upload' => 'Huuchsjüür',
+'restriction-upload' => 'Huuchschüür',
 
 # Restriction levels
 'restriction-level-sysop' => 'seekert (bluas för administratooren)',
@@ -2640,7 +2639,7 @@ Di eksport as uk mä [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] mögelk, tun
 'allmessagesdefault' => 'Standard tekst',
 'allmessagescurrent' => 'Aktuel tekst',
 'allmessagestext' => "Det as en list mä MediaWiki-süsteemteksten.
-Wees so gud an beschük a sidjen [//www.mediawiki.org/wiki/Localisation MediaWiki-auersaatang] an [//translatewiki.net translatewiki.net], wan dü bi't auersaaten mähalep meest.",
+Wees so gud an beschük a sidjen [https://www.mediawiki.org/wiki/Localisation MediaWiki-auersaatang] an [//translatewiki.net translatewiki.net], wan dü bi't auersaaten mähalep meest.",
 'allmessagesnotsupportedDB' => 'Detdiar spezial-sidj koon ei brükt wurd, auer <tt>$wgUseDatabaseMessages</tt> ei aktiif as.',
 'allmessages-filter-legend' => 'Filter',
 'allmessages-filter' => 'Filter för di uunpaaset stant:',
@@ -2801,6 +2800,7 @@ Dü könst di kweltekst uunluke.',
 'tooltip-undo' => 'Saat bluas det leetst feranrang turag an wiset det resultoot uun en föörskau uun. Uun det tuupfaadet beskriiwang skul en grünj för det turagsaaten uunden wurd.',
 'tooltip-preferences-save' => 'Iinstelangen seekre',
 'tooltip-summary' => 'Faade det kurt tuup',
+'interlanguage-link-title' => '$1 - $2',
 
 # Metadata
 'notacceptable' => 'Di Wiki-server koon a dooten ei för dan aperoot apwerke.',
@@ -2840,6 +2840,7 @@ Heer '''NIKS''' iindreeg!",
 'pageinfo-length' => 'Sidjenlengde (uun bytes)',
 'pageinfo-article-id' => 'Sidjenkäännumer (ID)',
 'pageinfo-language' => 'Sidjenspriak',
+'pageinfo-content-model' => 'Muude för sidjenteksten',
 'pageinfo-robot-policy' => 'Faan bots indisiaret',
 'pageinfo-robot-index' => 'Tuläät',
 'pageinfo-robot-noindex' => 'Ei tuläät',
@@ -2934,7 +2935,7 @@ $1",
 # Special:NewFiles
 'newimages' => 'Nei datein',
 'imagelisttext' => "Diar as en list faan '''$1''' {{PLURAL:$1|datei|datein}}, sortiaret $2.",
-'newimages-summary' => 'Detdiar spezial-sidj wiset a tuleetst huuchsjüürd datein uun.',
+'newimages-summary' => 'Detdiar spezial-sidj wiset a tuleetst huuchschüürd datein uun.',
 'newimages-legend' => 'Filter',
 'newimages-label' => 'Dateinööm (of en dial diarfaan):',
 'showhidebots' => '(Bots $1)',
@@ -3385,7 +3386,7 @@ Ferwisangen uun det salew rä wurd üs ütjnoomen uunsen, huar det datei dach uu
 
 # External editor support
 'edit-externally' => 'Detdiar datei mä en ekstern program bewerke',
-'edit-externally-help' => "(Luk efter uun't [//www.mediawiki.org/wiki/Manual:External_editors hoonbuk] am muar diartu)",
+'edit-externally-help' => "(Luk efter uun't [https://www.mediawiki.org/wiki/Manual:External_editors hoonbuk] am muar diartu)",
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'aaltumaal',
@@ -3477,6 +3478,9 @@ Ferseekre, dat dü det sidj würelk nei maage wel.",
 'confirm-unwatch-button' => 'OK',
 'confirm-unwatch-top' => "Wel dü detdiar sidj ei muar uun't uug behual?",
 
+# Separators for various lists, etc.
+'quotation-marks' => '„$1“',
+
 # Multipage image navigation
 'imgmultipageprev' => '← leetst sidj (turag)',
 'imgmultipagenext' => 'naist sidj →',
@@ -3561,7 +3565,7 @@ Dü könst uk det [[Special:EditWatchlist|normool sidj]] tu bewerkin nem.",
 'version-hook-subscribedby' => 'Aprepen faan',
 'version-version' => '(Werjuun $1)',
 'version-license' => 'Lisens',
-'version-poweredby-credits' => "Detheer wääbsteed werket mä '''[//www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
+'version-poweredby-credits' => "Detheer wääbsteed werket mä '''[https://www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
 'version-poweredby-others' => 'öödern',
 'version-poweredby-translators' => 'Auersaatern faan translatewiki.net',
 'version-credits-summary' => 'Wi besoonke üs bi jodiar persuunen för hör bidracher tu [[Special:Version|MediaWiki]].',
@@ -3603,8 +3607,7 @@ An det woort so brükt: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special
 
 # Special:SpecialPages
 'specialpages' => 'Spezial-sidjen',
-'specialpages-note' => '----
-* Normool spezial-sidjen
+'specialpages-note' => '* Normool spezial-sidjen
 * <span class="mw-specialpagerestricted">Spezial-sidjen mä tugripsrochten</span>
 * <span class="mw-specialpagecached">Spezial-sidjen uun a cache (As ferlicht ei muar aktuel.)</span>',
 'specialpages-group-maintenance' => 'Werksteedsidjen',
@@ -3706,10 +3709,10 @@ An det woort so brükt: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special
 'logentry-suppress-revision-legacy' => '$1 {{GENDER:$2}} hää stalswigin det uunlukin feranert faan werjuunen faan det sidj $3',
 'revdelete-content-hid' => 'Ferbürgen',
 'revdelete-summary-hid' => 'Ferbürgen tuupfaadang',
-'revdelete-uname-hid' => 'brükernoome ferstäägen',
+'revdelete-uname-hid' => 'brükernööm ferbürgen',
 'revdelete-content-unhid' => 'Ei muar ferberag',
 'revdelete-summary-unhid' => 'Tuupfaadang ei muar ferberag',
-'revdelete-uname-unhid' => 'brükernoome frijääwen',
+'revdelete-uname-unhid' => 'brükernööm weder tu sen',
 'revdelete-restricted' => 'mögelkhaiden för administratooren wechnimen',
 'revdelete-unrestricted' => 'mögelkhaiden för administratooren ütjwidjet',
 'logentry-move-move' => '$1 {{GENDER:$2}} hää det sidj $3 efter $4 fersköwen.',
@@ -3756,12 +3759,12 @@ An det woort so brükt: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special
 'api-error-duplicate-archive' => 'Diar wiar al {{PLURAL:$1|[$2 ööder datei]|[$2 ööder datein]}} mä detsalew banen. {{PLURAL:$1|Hat as |Jo san}} oober stregen wurden.',
 'api-error-duplicate-archive-popup-title' => 'Dobelt {{PLURAL:$1|datei, diar al stregen wurden as|datein, diar al stregen wurden san}}.',
 'api-error-duplicate-popup-title' => 'Dobelt {{PLURAL:$1|datei|datein}}',
-'api-error-empty-file' => 'Det datei, wat dü huuchsjüürd heest, as leesag.',
+'api-error-empty-file' => 'Det datei, wat dü huuchschüürd heest, as leesag.',
 'api-error-emptypage' => 'Dü mutst nian leesag sidjen nei iinstel.',
 'api-error-fetchfileerror' => "Intern feeler: Bi't ufrepen faan det datei as wat skiaf gingen.",
 'api-error-fileexists-forbidden' => 'En datei mä di nööm „$1“ as al diar. Hat koon ei auerskrewen wurd.',
 'api-error-fileexists-shared-forbidden' => "En date mä di nööm „$1“ as al uun't gemiansoom archiif an koon ei auerskrewen wurd.",
-'api-error-file-too-large' => 'Det datei, wat dü huuchsjüürd heest, as tu grat.',
+'api-error-file-too-large' => 'Det datei, wat dü huuchschüürd heest, as tu grat.',
 'api-error-filename-tooshort' => 'Di dateinööm as tu kurt.',
 'api-error-filetype-banned' => 'Son slach faan datei as ei tuläät.',
 'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|as nään tuläät slach faan datein|san nian tuläät slacher faan datein}}.
index e5c1211..90f3c69 100644 (file)
@@ -1358,7 +1358,7 @@ Sielç par plasê un altri non.',
 'allmessagesdefault' => 'Test predeterminât',
 'allmessagescurrent' => 'Test curint',
 'allmessagestext' => 'Cheste e je une liste dai messaçs di sisteme disponibii tal non dal spazi MediaWiki.
-Par plasê va su [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] se tu vuelis contribuî ae traduzion gjeneriche di MediaWiki.',
+Par plasê va su [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] se tu vuelis contribuî ae traduzion gjeneriche di MediaWiki.',
 'allmessages-filter-all' => 'Ducj',
 'allmessages-language' => 'Lenghe:',
 'allmessages-filter-submit' => 'Va',
@@ -1543,7 +1543,7 @@ Se il file al è stât cambiât rispiet al so stât origjinâl, cualchi informaz
 
 # External editor support
 'edit-externally' => 'Modifiche chest file cuntune aplicazion esterne',
-'edit-externally-help' => '(Cjale lis [//www.mediawiki.org/wiki/Manual:External_editors istruzions] par vê altris informazions)',
+'edit-externally-help' => '(Cjale lis [https://www.mediawiki.org/wiki/Manual:External_editors istruzions] par vê altris informazions)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'dutis',
@@ -1625,8 +1625,7 @@ Se il file al è stât cambiât rispiet al so stât origjinâl, cualchi informaz
 
 # Special:SpecialPages
 'specialpages' => 'Pagjinis speciâls',
-'specialpages-note' => '----
-* Pagjinis speciâls no riservadis.
+'specialpages-note' => '* Pagjinis speciâls no riservadis.
 * <strong class="mw-specialpagerestricted">Pagjinis speciâls a ciertis categoriis di utents.</strong>',
 'specialpages-group-maintenance' => 'Rapuarts di manutenzion',
 'specialpages-group-other' => 'Altris pagjinis speciâls',
index db3b20d..1bf830f 100644 (file)
@@ -12,6 +12,7 @@
  * @author Purodha
  * @author Pyt
  * @author SK-luuut
+ * @author Shirayuki
  * @author Snakesteuben
  * @author Urhixidur
  * @author לערי ריינהארט
@@ -950,7 +951,6 @@ Jo kinne ek in nammerûmte as foarheaksel brûke.",
 'mypreferences' => 'Myn foarkarynstellings',
 'prefs-edits' => 'Tal bewurkings:',
 'prefsnologin' => 'Net oanmeld',
-'prefsnologintext' => 'Jo moatte <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} oanmeld]</span> wêze om jo foarkar-ynstellings te feroarje te kinnen.',
 'changepassword' => 'Wachtwurd feroarje',
 'prefs-skin' => 'Side-oansjen',
 'skin-preview' => 'Proefbyld',
@@ -1987,7 +1987,7 @@ De doelside "[[:$1]]" is der al. Moat dy wiske wurde om plak te meitsjen foar it
 'allmessagesdefault' => 'Standerttekst',
 'allmessagescurrent' => 'Tekst yn de nijste ferzje',
 'allmessagestext' => 'Dit is in list fan alle systeemberjochten beskikber yn de MediaWiki-nammeromte.
-Sjoch: [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation], [//translatewiki.net translatewiki.net].',
+Sjoch: [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation], [//translatewiki.net translatewiki.net].',
 
 # Thumbnails
 'thumbnail-more' => 'Fergrutsje',
@@ -2193,7 +2193,7 @@ Alle folgjende links dy't op deselde rigel steane, wurde behannele as útsûnder
 
 # External editor support
 'edit-externally' => 'Wizigje dizze triem mei in ekstern programma',
-'edit-externally-help' => 'Sjoch de [//www.mediawiki.org/wiki/Manual:External_editors ynstel-hantlieding] foar mear ynformaasje.',
+'edit-externally-help' => 'Sjoch de [https://www.mediawiki.org/wiki/Manual:External_editors ynstel-hantlieding] foar mear ynformaasje.',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'alles',
@@ -2290,8 +2290,7 @@ Wolle jo de side wier op 'e nij skriuwe?",
 
 # Special:SpecialPages
 'specialpages' => 'Bysûndere siden',
-'specialpages-note' => '----
-* Normale bysûndere siden.
+'specialpages-note' => '* Normale bysûndere siden.
 * <strong class="mw-specialpagerestricted">Beheinde bysûndere siden.</strong>',
 'specialpages-group-maintenance' => 'Underhâld siden',
 'specialpages-group-other' => 'Oare bysûndere siden',
index c8172dc..a7ef5b4 100644 (file)
@@ -822,7 +822,6 @@ Bain triail as ''all:'' a chur roimh d'iarratas chun an t-inneachar ar fad (leat
 'preferences' => 'Sainroghanna',
 'mypreferences' => 'Sainroghanna',
 'prefsnologin' => 'Níl tú logáilte isteach',
-'prefsnologintext' => 'Ní mór duit <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} logáil isteach]</span> chun do chuid sainroghanna phearsanta a shocrú.',
 'changepassword' => "Athraigh d'fhocal faire",
 'prefs-skin' => 'Craiceann',
 'skin-preview' => 'Réamhamharc',
@@ -1465,8 +1464,8 @@ Is an téacs as na leagan scriosta seo ar fáil do riarthóirí amháin.',
 'sp-contributions-submit' => 'Cuardaigh',
 
 # What links here
-'whatlinkshere' => 'Naisc go dtí an lch seo',
-'whatlinkshere-title' => 'Naisc chuig $1',
+'whatlinkshere' => 'Naisc leis an lch seo',
+'whatlinkshere-title' => 'Naisc le $1',
 'whatlinkshere-page' => 'Leathanach:',
 'linkshere' => "Tá nasc chuig '''[[:$1]]''' ar na leathanaigh seo a leanas:",
 'nolinkshere' => "Níl leathanach ar bith ann a bhfuil nasc chuig '''[[:$1]]''' air.",
@@ -1639,7 +1638,7 @@ Sa dara cás, is féidir leat nasc a úsáid, mar shampla [[{{#Special:Export}}/
 'allmessagesdefault' => 'Téacs réamhshocraithe',
 'allmessagescurrent' => 'Téacs reatha',
 'allmessagestext' => 'Is liosta é seo de theachtaireachtaí córais atá le fáil san ainmspás MediaWiki.
-Tabhair cuairt ar [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] agus [//translatewiki.net translatewiki.net] le do thoil más mian leat cur leis an logánú ginearálta MediaWiki.',
+Tabhair cuairt ar [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] agus [//translatewiki.net translatewiki.net] le do thoil más mian leat cur leis an logánú ginearálta MediaWiki.',
 'allmessagesnotsupportedDB' => "Ní féidir an leathanach seo a úsáid dá bharr gur díchumasaíodh '''\$wgUseDatabaseMessages'''.",
 'allmessages-filter-all' => 'Uile',
 'allmessages-language' => 'Teanga:',
@@ -1759,6 +1758,9 @@ iarradh sábháil. Is dócha gur nasc chuig suíomh seachtrach ba chúis leis.',
 'spamprotectionmatch' => 'Truicear ár scagaire dramhála ag an téacs seo a leanas: $1',
 'spambot_username' => 'MediaWiki turscar glanadh',
 
+# Info page
+'pageinfo-toolboxlink' => 'Faoin leathanach seo',
+
 # Skin names
 'skinname-cologneblue' => 'Gorm Köln',
 'skinname-monobook' => 'MonoBook',
@@ -2087,7 +2089,7 @@ cúlra i bhfócas)',
 
 # External editor support
 'edit-externally' => 'Athraigh an comhad seo le feidhmchlár seachtrach',
-'edit-externally-help' => '(Féach ar na [//www.mediawiki.org/wiki/Manual:External_editors treoracha cumraíochta] as Béarla le tuilleadh eolais)',
+'edit-externally-help' => '(Féach ar na [https://www.mediawiki.org/wiki/Manual:External_editors treoracha cumraíochta] as Béarla le tuilleadh eolais)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'an t-iomlán',
index 636e841..443952b 100644 (file)
@@ -1061,7 +1061,7 @@ Herliim fayl diiştirildi yaratılıştan sora, bir takım parametrlär var nic
 
 # External editor support
 'edit-externally' => 'Kompyuterinizdäki uygulamaklarlan faylı düz',
-'edit-externally-help' => 'Taa çok bilgi için var nicä bakmaa metadaki [//www.mediawiki.org/wiki/Manual:External_editors dış uygulama instrumentläri] (angliyça) sayfasına.',
+'edit-externally-help' => 'Taa çok bilgi için var nicä bakmaa metadaki [https://www.mediawiki.org/wiki/Manual:External_editors dış uygulama instrumentläri] (angliyça) sayfasına.',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'Hepsini göster',
index ac19fe0..1c9943d 100644 (file)
@@ -764,7 +764,6 @@ $2',
 'mypreferences' => '偶𠮶参数设置',
 'prefs-edits' => '编辑数:',
 'prefsnologin' => '哈冇登入',
-'prefsnologintext' => '汝要<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 登入]</span>后才设得正个人参数。',
 'changepassword' => '改过密码',
 'prefs-skin' => '皮',
 'skin-preview' => '(预览)',
@@ -1601,7 +1600,7 @@ $1',
 'allmessagesdefault' => '默认文字',
 'allmessagescurrent' => '眼前𠮶文字',
 'allmessagestext' => '个首列到全部制定得正𠮶系统界面。
-Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
+Please visit [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
 'allmessagesnotsupportedDB' => "'''{{ns:special}}:系统界面功能'''关卟嘞('''\$wgUseDatabaseMessages''')。",
 
 # Thumbnails
@@ -2070,7 +2069,7 @@ $1',
 
 # External editor support
 'edit-externally' => '用外部程式来编辑个只档案',
-'edit-externally-help' => '请参看[//www.mediawiki.org/wiki/Manual:External_editors 设置步骤]了解别𠮶内容。',
+'edit-externally-help' => '请参看[https://www.mediawiki.org/wiki/Manual:External_editors 设置步骤]了解别𠮶内容。',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => '全部',
@@ -2194,7 +2193,7 @@ $3
 'version-hook-subscribedby' => '订阅人',
 'version-version' => '(版本 $1)',
 'version-license' => '许可证',
-'version-poweredby-credits' => "个只 Wiki 由 '''[//www.mediawiki.org/ MediaWiki]''' 驱动,版权所有 © 2001-$1 $2。",
+'version-poweredby-credits' => "个只 Wiki 由 '''[https://www.mediawiki.org/ MediaWiki]''' 驱动,版权所有 © 2001-$1 $2。",
 'version-software' => '装正𠮶软件',
 'version-software-version' => '版本',
 
index 4628ab3..fc551a2 100644 (file)
@@ -786,7 +786,6 @@ $2',
 'mypreferences' => '我嗰參數設置',
 'prefs-edits' => '編輯數:',
 'prefsnologin' => '哈冇登入',
-'prefsnologintext' => '汝要<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 登入]</span>後才設得正個人參數。',
 'changepassword' => '改過密碼',
 'prefs-skin' => '皮',
 'skin-preview' => '(預覽)',
@@ -1623,7 +1622,7 @@ $1',
 'allmessagesdefault' => '默認文字',
 'allmessagescurrent' => '眼前嗰文字',
 'allmessagestext' => '箇首列到全部制定得正嗰系統界面。
-Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
+Please visit [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
 'allmessagesnotsupportedDB' => "'''{{ns:special}}:系統界面功能'''關卟嘞('''\$wgUseDatabaseMessages''')。",
 
 # Thumbnails
@@ -2092,7 +2091,7 @@ $1',
 
 # External editor support
 'edit-externally' => '用外部程式來編輯箇隻檔案',
-'edit-externally-help' => '請參看[//www.mediawiki.org/wiki/Manual:External_editors 設置步驟]瞭解別嗰內容。',
+'edit-externally-help' => '請參看[https://www.mediawiki.org/wiki/Manual:External_editors 設置步驟]瞭解別嗰內容。',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => '全部',
@@ -2216,7 +2215,7 @@ $3
 'version-hook-subscribedby' => '訂閱人',
 'version-version' => '(版本 $1)',
 'version-license' => '許可證',
-'version-poweredby-credits' => "箇隻 Wiki 由 '''[//www.mediawiki.org/ MediaWiki]''' 驅動,版權所有 © 2001-$1 $2。",
+'version-poweredby-credits' => "箇隻 Wiki 由 '''[https://www.mediawiki.org/ MediaWiki]''' 驅動,版權所有 © 2001-$1 $2。",
 'version-software' => '裝正嗰軟件',
 'version-software-version' => '版本',
 
index 00a058c..ebffa19 100644 (file)
@@ -492,7 +492,7 @@ Na dìochuimhnich na [[Special:Preferences|roghainnean agad air {{SITENAME}}]] a
 'gotaccount' => 'A bheil cunntas agad mu thràth? $1.',
 'gotaccountlink' => 'Log a-steach',
 'userlogin-resetlink' => "Na dhìochuimhnich thu d' ainm is facal-faire?",
-'userlogin-resetpassword-link' => 'Ath-shuidhich am facal-faire agad',
+'userlogin-resetpassword-link' => 'Na dhìochuimhnich thu am facal-faire agad?',
 'helplogin-url' => "Help:A' clàradh a-steach",
 'userlogin-helplink' => "[[{{MediaWiki:helplogin-url}}|Cobhair leis a' chlàradh a-steach]]",
 'userlogin-loggedin' => 'Chaidh do chlàradh mar {{GENDER:$1|$1}} mu thràth.
@@ -569,7 +569,7 @@ Mus dèid post-d sam bith eile a chur dhan chunntas, feumaidh tu leantainn ris a
 Gus casg a chur air mì-ghnàthachadh, cha chuir sinn ach aon chuimhneachan facail-fhaire gach {{PLURAL:$1|uair|$1 uair|$1 uairean|$1 uair}} a thìde.',
 'mailerror' => "Mearachd a' cur post: $1",
 'acct_creation_throttle_hit' => "Chruthaich na h-aoighean air an Uici seo {{PLURAL:$1|1 chunntas|$1 chunntas|$1 cunntasan|$1 cunntas}} fon IP agad an-dè agus sin an àireamh as motha a tha ceadaichte. Chan urrainn do dh'aoighean eile on IP seo barrachd chunntasan a chruthachadh air sgàth sin.",
-'emailauthenticated' => 'Chaidh an seòladh puist-dhealain agad a dhearbhadh $2 aig $3.',
+'emailauthenticated' => 'Chaidh an seòladh puist-d agad a dhearbhadh $2 aig $3.',
 'emailnotauthenticated' => 'Cha deach am post-d agad a dhearbhadh fhathast.
 Cha dèid post-d a chur airson gin dhe na feartan a leanas.',
 'noemailprefs' => 'Sònraich post-d sna roghainnean agad gus na feartan seo a chur an comas.',
@@ -1009,6 +1009,14 @@ Gheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/suppress|page={{FUL
 'revdelete-show-file-submit' => 'Tha',
 'revdelete-selected' => "'''{{PLURAL:$2|Lèirmheas|Lèirmheasan}} de [[:$1]] a thagh thu:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|An tachartas loga|Na tachartasan loga}} a thagh thu:'''",
+'revdelete-text' => "'''Nochdaidh lèirmheasan is tachartasan fhathast ann an eachdraidh 's logaichean na duilleige ach bidh cuid a shusbaint ann nach fhaic am poball.'''
+Gheibh rianairean eile air {{SITENAME}} greim fhathast air an t-susbaint fhalaichte agus gabhaidh an sguabadh às a neo-dhèanamh a-rithist san aon eadar-aghaidh mur an deach cuingeachaidhean eile a shuidheachadh.",
+'revdelete-confirm' => "Dearbh gu bheil thu airson seo a dhèanamh, gu bheil thu a' tuigsinn na thachras ri linn agus gu bheil thu a' dèanamh seo a-rèir [[{{MediaWiki:Policy-url}}|a' phoileasaidh]].",
+'revdelete-suppress-text' => "Cha bu chòir dhut mùchadh a chleachdadh '''ach''' ann an suidheachaidhean mar seo:
+* Fiosrachadh a dh'fhaodadh a bhith dìteachail
+* Fiosrachadh pearsanta a tha cearr
+*: ''seòladh taige, àireamhan fòn, àireamhan NI is msaa.''",
+'revdelete-legend' => 'Suidhich cuingeachaidhean na faicsinneachd',
 'revdelete-hide-text' => "Teacsa a' mhùthaidh",
 'revdelete-hide-image' => 'Falaich susbaint an fhaidhle',
 'revdelete-hide-name' => 'Falaich an gnìomh agus an targaid',
@@ -1033,19 +1041,58 @@ $1",
 'revdel-restore-visible' => 'mùthaidhean faicsinneach',
 'pagehist' => 'Eachdraidh na duilleige',
 'deletedhist' => 'Eachdraidh a chaidh a sguabadh às',
+'revdelete-hide-current' => "Mearachd a' cur am falach an nì dhen $2, $1: Seo an lèirmheas làithreach. Cha ghabh a chur am falach.",
+'revdelete-show-no-access' => 'Mearachd a\' sealltainn an nì on $2, $1: Tha comharra ann a dh\'innseas gu bheil e "cuingichte".
+Chan eil cothrom agad air.',
+'revdelete-modify-no-access' => 'Mearachd ag atharrachadh an nì on $2, $1: Tha comharra ann a dh\'innseas gu bheil e "cuingichte".
+Chan eil cothrom agad air.',
+'revdelete-modify-missing' => 'Mearachd ag atharrachadh an nì leis an ID $1: Chan eil e san stòr-dàta!',
+'revdelete-no-change' => "'''Rabhadh:''' Bha na roghainnean faicsinneachd a dh'iarr thu aig an nì dhen $2, $1 mu thràth.",
+'revdelete-concurrent-change' => "Mearachd ag atharrachadh an nì on $2, $1: Tha coltas gun deach a staid atharrachadh le cuideigin dìreach nuair a dh'fheuch thusa ri atharrachadh.
+Thoir sùil air na logaichean.",
+'revdelete-only-restricted' => "Mearachd a' cur an nì on $2, $1 am falach: Chan urrainn dhut nithean le rianairean a mhùchadh gun a bhith a' taghadh aon dhe na roghainnean faicsinneachd eile cuideachd.",
+'revdelete-reason-dropdown' => "*Adhbharan cumanta airson sguabadh às rudan
+** Briseadh còrach-lethbhreac
+** Beachd no fiosrachadh pearsanta mì-iomchaidh
+** Ainm-cleachdaiche mì-iomchaidh
+** Fiosrachadh a dh'fhaodadh a bhith dìteachail",
 'revdelete-otherreason' => 'Adhbhar eile/a bharrachd:',
 'revdelete-reasonotherlist' => 'Adhbhar eile',
 'revdelete-edit-reasonlist' => 'Deasaich adhbharan an sguabaidh às',
 'revdelete-offender' => "Ùghdar a' mhùthaidh:",
 
+# Suppression log
+'suppressionlog' => 'Loga nam mùchaidhean',
+'suppressionlogtext' => "Chì thu liosta nan rudan a chaidh a sguabadh às agus a bhacadh gu h-ìosal, a' gabhail a-steach stuth a chaidh fhalach o rianairean. Faic [[Special:BlockList|liosta nam bacaidhean]] airson liosta nan toirmeasgan is bacaidhean beò.",
+
 # History merging
+'mergehistory' => 'Co-aonaich eachdraidhean na duilleige',
+'mergehistory-header' => 'Leigidh an duilleag seo leat na lèirmheasan aig aon duilleag a cho-aonadh le duilleag nas ùire.
+Dèan cinnteach gun glèidh an t-atharrachadh seo leantainneachd eachdraidh na duilleige.',
+'mergehistory-box' => 'Co-aonaich na lèirmheasan aig dà dhuilleag:',
 'mergehistory-from' => 'An duilleag thùsail:',
+'mergehistory-into' => 'An duilleag targaide:',
+'mergehistory-list' => 'Eachdraidh nan deasachaidhean a ghabhas a cho-aonadh',
+'mergehistory-merge' => 'Gabhaidh na lèirmheasan a leanas aig [[:$1]] a cho-aonadh le [[:$2]].
+Cleachd colbh nam putanan-rèidio gus dìreach na lèirmheasan a cho-aonadh a chaidh a chruthachadh aig an àm a chaidh a shònrachadh no roimhe sin.
+Thoir an aire gun dèid an colbh seo ath-shuidheachadh ma chleachdas tu ceanglaichean na seòladaireachd.',
+'mergehistory-go' => 'Seall na deasachaidhean a ghabhas a cho-aonadh',
+'mergehistory-submit' => 'Co-aonaich na lèirmheasan',
+'mergehistory-empty' => 'Chan eil lèirmheas sam bith ann a ghabhas a cho-aonadh.',
+'mergehistory-success' => 'Chaidh $3 {{PLURAL:$3|lèirmheas|lèirmheas|lèirmheasan|lèirmheas}} de [[:$1]] a cho-aonadh dha [[:$2]].',
+'mergehistory-fail' => "Cha ghabh an eachdraidh a cho-aonadh, thoir sùil air paramadairean na duilleige 's an ama.",
+'mergehistory-no-source' => 'Chan eil an tùs-duilleag $1 ann.',
+'mergehistory-no-destination' => 'Chan eil an an duilleag targaide $1 ann.',
+'mergehistory-invalid-source' => "Feumaidh an tùs-duilleag a bhith 'na thiotal dligheach.",
+'mergehistory-invalid-destination' => "Feumaidh an duilleag targaide a bhith 'na thiotal dligheach.",
 'mergehistory-autocomment' => 'Chaidh [[:$1]] a cho-aonadh dha [[:$2]]',
 'mergehistory-comment' => 'Chaidh [[:$1]] a cho-aonadh dha [[:$2]]: $3',
+'mergehistory-same-destination' => 'Chan fhaod an tùs-duilleag is an duilleag targaide a bhith co-ionnann',
 'mergehistory-reason' => 'Adhbhar:',
 
 # Merge log
 'mergelog' => "Loga a' cho-aonaidh",
+'pagemerge-logentry' => 'chaidh [[$1]] a cho-aonadh dha [[$2]] (lèirmheasan suas ri $3)',
 'revertmerge' => 'Dì-aontaich',
 
 # Diffs
@@ -1127,7 +1174,6 @@ Faodaidh gum bi inneacsan susbaint {{SITENAME}} tuilleadh 's sean ge-tà.",
 'mypreferences' => 'Na roghainnean agam',
 'prefs-edits' => 'Co mheud deasachadh:',
 'prefsnologin' => 'Chan eil thu air clàradh a-steach',
-'prefsnologintext' => 'Feumaidh tu <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} clàradh a-steach]</span> mus urrainn dhut roghainnean cleachdaiche a chur air gleus.',
 'changepassword' => 'Atharraich facal-faire',
 'prefs-skin' => 'Bian',
 'skin-preview' => 'Ro-shealladh',
@@ -1669,7 +1715,7 @@ Bidh agad ris an co-aontachadh a làimh.'''",
 'allmessagesname' => 'Ainm',
 'allmessagesdefault' => 'Teacsa bunaiteach na teachdaireachd',
 'allmessagestext' => 'Seo liosta de theachdaireachdan an t-siostaim a tha ri làimh ann an namespace MediaWiki.
-Tadhail air [//www.mediawiki.org/wiki/Localisation Ionadaileadh MediaWiki] is [//translatewiki.net translatewiki.net] ma tha thu airson pàirt a ghabhail ann an ionadaileadh MediaWiki.',
+Tadhail air [https://www.mediawiki.org/wiki/Localisation Ionadaileadh MediaWiki] is [//translatewiki.net translatewiki.net] ma tha thu airson pàirt a ghabhail ann an ionadaileadh MediaWiki.',
 
 # Thumbnails
 'thumbnail-more' => 'Meudaich',
@@ -1788,7 +1834,7 @@ Bidh an fheadhainn eile falaichte a ghnàth.
 
 # External editor support
 'edit-externally' => 'Deasaich am faidhle le prògram on taobh a-muigh',
-'edit-externally-help' => '(Seall air [//www.mediawiki.org/wiki/Manual:External_editors mìneachadh an t-suidheachaidh] airson barrachd fiosrachaidh)',
+'edit-externally-help' => '(Seall air [https://www.mediawiki.org/wiki/Manual:External_editors mìneachadh an t-suidheachaidh] airson barrachd fiosrachaidh)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'a h-uile',
index 40c829b..9b82053 100644 (file)
@@ -561,7 +561,7 @@ $1',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Páxina',
-'nstab-user' => 'Páxina de {{GENDER:{{#titleparts:{{BASEPAGENAME}}|1}}|usuario|usuaria}}',
+'nstab-user' => 'Páxina de {{GENDER:{{ROOTPAGENAME}}|usuario|usuaria}}',
 'nstab-media' => 'Páxina multimedia',
 'nstab-special' => 'Páxina especial',
 'nstab-project' => 'Páxina do proxecto',
@@ -711,7 +711,7 @@ Non esqueza personalizar as súas [[Special:Preferences|preferencias de {{SITENA
 'gotaccount' => 'Xa ten unha conta? $1.',
 'gotaccountlink' => 'Acceda ao sistema',
 'userlogin-resetlink' => 'Esqueceu os seus datos de rexistro?',
-'userlogin-resetpassword-link' => 'Restablecer o seu contrasinal',
+'userlogin-resetpassword-link' => 'Esqueceu o contrasinal?',
 'helplogin-url' => 'Help:Rexistro',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Axuda co rexistro]]',
 'userlogin-loggedin' => 'Xa accedeu ao sistema como {{GENDER:$1|$1}}.
@@ -791,8 +791,9 @@ Para evitar o abuso do sistema só se enviará unha mensaxe de restablecemento c
 'mailerror' => 'Produciuse un erro ao enviar o correo electrónico: $1',
 'acct_creation_throttle_hit' => 'Alguén que visitou este wiki co seu enderezo IP creou, no último día, {{PLURAL:$1|unha conta|$1 contas}}, que é o máximo permitido neste período de tempo.
 Como resultado, os visitantes que usen este enderezo IP non poden crear máis contas nestes intres.',
-'emailauthenticated' => 'O seu enderezo de correo electrónico foi autenticado o $2 ás $3.',
-'emailnotauthenticated' => 'O seu enderezo de correo electrónico aínda <strong>non foi autenticado</strong>. Non se enviou ningunha mensaxe por algunha das seguintes razóns.',
+'emailauthenticated' => 'O seu enderezo de correo electrónico foi confirmado o $2 ás $3.',
+'emailnotauthenticated' => 'O seu enderezo de correo electrónico aínda non foi confirmado.
+Non se enviará ningunha mensaxe por ningunha das seguintes características.',
 'noemailprefs' => 'Especifique un enderezo de correo electrónico se quere que funcione esta opción.',
 'emailconfirmlink' => 'Confirmar o enderezo de correo electrónico',
 'invalidemailaddress' => 'Non se pode aceptar o enderezo de correo electrónico porque semella ter un formato incorrecto.
@@ -1233,19 +1234,20 @@ función, a revisión especificada non existe ou está intentando agochar a revi
 'revdelete-text' => "'''As revisións borradas seguirán aparecendo no historial da páxina e nos rexistros, pero partes do seu contido serán inaccesibles de cara ao público.'''
 Os demais administradores de {{SITENAME}} poderán acceder ao contido agochado e poderán restaurar a páxina de novo a través desta mesma interface, a non ser que se estableza algunha restrición adicional.",
 'revdelete-confirm' => 'Por favor, confirme que quere levar a cabo esta acción, que comprende as consecuencias e que o fai de acordo [[{{MediaWiki:Policy-url}}|coas políticas]].',
-'revdelete-suppress-text' => "A eliminación '''só''' debería ser usada nos seguintes casos:
+'revdelete-suppress-text' => "A eliminación '''unicamente''' debería utilizarse nos seguintes casos:
+* Información potencialmente difamatoria
 * Información persoal inapropiada
-*: ''domicilios e números de teléfono, números da seguridade social, etc.''",
+*: ''domicilios e números de teléfono, números da seguridade social etc.''",
 'revdelete-legend' => 'Aplicar restricións de visibilidade',
-'revdelete-hide-text' => 'Agochar o texto da revisión',
+'revdelete-hide-text' => 'Texto da revisión',
 'revdelete-hide-image' => 'Agochar o contido do ficheiro',
 'revdelete-hide-name' => 'Agochar a acción e o destino',
-'revdelete-hide-comment' => 'Agochar o resumo de edición',
-'revdelete-hide-user' => 'Agochar o nome de usuario ou o enderezo IP do editor',
+'revdelete-hide-comment' => 'Resumo de edición',
+'revdelete-hide-user' => 'Nome de usuario ou enderezo IP do editor',
 'revdelete-hide-restricted' => 'Eliminar os datos da vista dos administradores así coma da doutros',
 'revdelete-radio-same' => '(non cambiar)',
-'revdelete-radio-set' => 'Si',
-'revdelete-radio-unset' => 'Non',
+'revdelete-radio-set' => 'Agochado',
+'revdelete-radio-unset' => 'Visible',
 'revdelete-suppress' => 'Eliminar os datos da vista dos administradores así coma da doutros',
 'revdelete-unsuppress' => 'Retirar as restricións sobre as revisións restauradas',
 'revdelete-log' => 'Motivo:',
@@ -1403,7 +1405,6 @@ Note que os seus índices do contido de {{SITENAME}} poden estar desactualizados
 'mypreferences' => 'Preferencias',
 'prefs-edits' => 'Número de edicións:',
 'prefsnologin' => 'Non accedeu ao sistema',
-'prefsnologintext' => 'Debe <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} acceder ao sistema]</span> para modificar as preferencias de usuario.',
 'changepassword' => 'Cambiar o meu contrasinal',
 'prefs-skin' => 'Aparencia',
 'skin-preview' => 'Vista previa',
@@ -1583,7 +1584,7 @@ Se escolle dalo utilizarase para atribuírlle o seu traballo.',
 'right-move-rootuserpages' => 'Mover páxinas de usuario raíz',
 'right-movefile' => 'Mover ficheiros',
 'right-suppressredirect' => 'Non crear unha redirección dende o nome vello ao mover unha páxina',
-'right-upload' => 'Cargar ficheiros',
+'right-upload' => 'Subir ficheiros',
 'right-reupload' => 'Sobrescribir ficheiros existentes',
 'right-reupload-own' => 'Sobrescribir un ficheiro existente cargado polo mesmo usuario',
 'right-reupload-shared' => 'Sobrescribir localmente ficheiros do repositorio multimedia',
@@ -1740,8 +1741,8 @@ As páxinas da súa [[Special:Watchlist|lista de vixilancia]] aparecen en '''neg
 'recentchangeslinked-to' => 'Mostrar os cambios relacionados das páxinas que ligan coa dada',
 
 # Upload
-'upload' => 'Cargar un ficheiro',
-'uploadbtn' => 'Cargar o ficheiro',
+'upload' => 'Subir un ficheiro',
+'uploadbtn' => 'Subir o ficheiro',
 'reuploaddesc' => 'Cancelar a carga e volver ao formulario de carga',
 'upload-tryagain' => 'Enviar a descrición do ficheiro modificada',
 'uploadnologin' => 'Non accedeu ao sistema',
@@ -2964,7 +2965,7 @@ No último caso, pode usar tamén unha ligazón, por exemplo [[{{#Special:Export
 'allmessagesdefault' => 'Texto predeterminado',
 'allmessagescurrent' => 'Texto actual',
 'allmessagestext' => 'Esta é unha lista de todas as mensaxes dispoñibles no espazo de nomes MediaWiki.
-Por favor, visite a [//www.mediawiki.org/wiki/Localisation localización MediaWiki] e [//translatewiki.net translatewiki.net] se quere contribuír á localización xenérica de MediaWiki.',
+Por favor, visite a páxina de [https://www.mediawiki.org/wiki/Localisation localización de MediaWiki] e [//translatewiki.net translatewiki.net] se quere contribuír á localización xenérica de MediaWiki.',
 'allmessagesnotsupportedDB' => "Esta páxina non está dispoñible porque '''\$wgUseDatabaseMessages''' está desactivado.",
 'allmessages-filter-legend' => 'Filtrar',
 'allmessages-filter' => 'Filtrar por estado de personalización:',
@@ -3099,7 +3100,7 @@ Pode ver o código fonte.',
 'tooltip-feed-atom' => 'Fonte de novas Atom desta páxina',
 'tooltip-t-contributions' => 'Ver a lista de contribucións {{GENDER:{{BASEPAGENAME}}|deste usuario|desta usuaria}}',
 'tooltip-t-emailuser' => 'Enviarlle unha mensaxe a {{GENDER:{{BASEPAGENAME}}|este usuario|esta usuaria}} por correo electrónico',
-'tooltip-t-upload' => 'Cargar ficheiros',
+'tooltip-t-upload' => 'Subir ficheiros',
 'tooltip-t-specialpages' => 'Lista de todas as páxinas especiais',
 'tooltip-t-print' => 'Versión para imprimir da páxina',
 'tooltip-t-permalink' => 'Ligazón permanente a esta versión da páxina',
@@ -3127,6 +3128,7 @@ Pode ver o código fonte.',
 'tooltip-undo' => '"Desfacer" reverte esta edición e abre o formulario de edición nun modo previo. Permite engadir un motivo no resumo de edición.',
 'tooltip-preferences-save' => 'Gardar as preferencias',
 'tooltip-summary' => 'Escriba un breve resumo',
+'interlanguage-link-title' => '$1 – $2',
 
 # Stylesheets
 'common.css' => '/** O CSS que se coloque aquí será aplicado a todas as aparencias */',
@@ -3191,6 +3193,7 @@ Isto, probabelmente, se debe a unha ligazón cara a un sitio externo que está n
 'pageinfo-length' => 'Lonxitude da páxina (en bytes)',
 'pageinfo-article-id' => 'ID da páxina',
 'pageinfo-language' => 'Lingua do contido da páxina',
+'pageinfo-content-model' => 'Modelo do contido da páxina',
 'pageinfo-robot-policy' => 'Indexación por robots',
 'pageinfo-robot-index' => 'Permitida',
 'pageinfo-robot-noindex' => 'Non permitida',
@@ -3276,7 +3279,7 @@ O seu sistema pode quedar comprometido se o executa.",
 'svg-long-desc' => 'ficheiro SVG; resolución de $1 × $2 píxeles; tamaño do ficheiro: $3',
 'svg-long-desc-animated' => 'ficheiro SVG animado; resolución de $1 × $2 píxeles; tamaño do ficheiro: $3',
 'svg-long-error' => 'Ficheiro SVG non válido: $1',
-'show-big-image' => 'Imaxe na máxima resolución',
+'show-big-image' => 'Ficheiro orixinal',
 'show-big-image-preview' => 'Tamaño desta vista previa: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Outra resolución|Outras resolucións}}: $1.',
 'show-big-image-size' => '$1 × $2 píxeles',
@@ -3745,7 +3748,7 @@ Os demais agocharanse por omisión.
 
 # External editor support
 'edit-externally' => 'Editar este ficheiro cunha aplicación externa',
-'edit-externally-help' => '(Vexa as seguintes [//www.mediawiki.org/wiki/Manual:External_editors instrucións] <small>(en inglés)</small> para obter máis información)',
+'edit-externally-help' => '(Consulte as seguintes [https://www.mediawiki.org/wiki/Manual:External_editors instrucións] para obter máis información)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'todo',
@@ -3937,7 +3940,7 @@ Tamén pode [[Special:EditWatchlist|empregar o editor normal]].',
 'version-hook-subscribedby' => 'Subscrito por',
 'version-version' => '(Versión $1)',
 'version-license' => 'Licenza',
-'version-poweredby-credits' => "Este wiki está desenvolvido por '''[//www.mediawiki.org/wiki/MediaWiki/gl MediaWiki]''', dereitos de autor © 2001-$1 $2.",
+'version-poweredby-credits' => "Este wiki está desenvolvido por '''[https://www.mediawiki.org/wiki/MediaWiki/gl MediaWiki]''', dereitos de autoría © 2001-$1 $2.",
 'version-poweredby-others' => 'outros',
 'version-poweredby-translators' => 'os tradutores de translatewiki.net',
 'version-credits-summary' => 'Queremos recoñecer as seguintes persoas polas súas achegas a [[Special:Version|MediaWiki]].',
@@ -3980,8 +3983,7 @@ Debería recibir [{{SERVER}}{{SCRIPTPATH}}/COPYING unha copia da licenza públic
 
 # Special:SpecialPages
 'specialpages' => 'Páxinas especiais',
-'specialpages-note' => '----
-* Páxinas especiais normais.
+'specialpages-note' => '* Páxinas especiais normais.
 * <span class="mw-specialpagerestricted">Páxinas especiais restrinxidas.</span>',
 'specialpages-group-maintenance' => 'Informes de mantemento',
 'specialpages-group-other' => 'Outras páxinas especiais',
index fe133ad..c78efd1 100644 (file)
@@ -112,7 +112,7 @@ $messages = array(
 'vector-action-move' => 'Fuddem voch',
 'vector-action-protect' => 'Rakh',
 'vector-view-create' => 'Roch',
-'vector-view-edit' => 'sudar',
+'vector-view-edit' => 'Sudar',
 'vector-view-history' => 'Itihas polloi',
 'vector-view-view' => 'Vach',
 'vector-view-viewsource' => 'Mull polloi',
@@ -164,7 +164,7 @@ $messages = array(
 'jumptosearch' => 'sod',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
-'aboutsite' => '(Thollachea) babtint',
+'aboutsite' => '{{SITENAME}} babtint',
 'aboutpage' => 'Project:Vixoiavixim',
 'copyrightpage' => '{{ns:project}}:Prat-hokk',
 'currentevents' => 'Chalu ghoddnneo',
@@ -216,6 +216,7 @@ $messages = array(
 'nstab-category' => 'Vorg',
 
 # General errors
+'error' => 'Chuk',
 'missing-article' => 'Totv-kox (Database) hantun mellunk zai aslem tem mozkur "$1" $2 mellunk-nam.
 
 Horxim, oxem ek pornem frk vo eka panachem itihasachem zodd vogllailem, tedna zata.
@@ -223,6 +224,7 @@ Horxim, oxem ek pornem frk vo eka panachem itihasachem zodd vogllailem, tedna za
 Oxem nhoi zalear, tuka softwer-an chuk sampodlam zait.
 Upkar korun eka [[Special:ListUsers/sysop|karbhari]]chea nodrek hadd, Internet Zago Sodpi (URL) hachi nond gheun.',
 'missingarticle-rev' => '(uzollnni#: $1)',
+'missingarticle-diff' => '(Frk: $1, $2)',
 'badtitle' => 'Chukichem nanv',
 'badtitletext' => 'Tuven maglelem panache nanv chukichem, rintem, vo ek sarkem zodunk-naslelem bhase-modlem vo wiki-modlem nanv.
 
@@ -233,6 +235,7 @@ Tantun ek vo sabaar okxor asot jenka nanvanim uzar korunk zainan.',
 'welcomeuser' => 'Ievkar, $1!',
 'yourname' => 'Vapuddpeachem nanv:',
 'yourpassword' => 'Gupitutor:',
+'userlogin-yourpassword' => 'Gupitutor',
 'yourpasswordagain' => 'Gupit utor porot boroi:',
 'remembermypassword' => 'Hea internet browseran mhojem sotrachem ugdas dovor (chodan chod $1 {{PLURAL:$1|disak|disank}})',
 'login' => 'Sotrromb kor',
@@ -397,7 +400,7 @@ Dusre tuje xim sompork kortat tednam tuzo email potto tankam kollchenam.',
 'newuserlogpage' => 'Vapurpi rochnnechem sotr',
 
 # Associated actions - in the sentence "You do not have permission to X"
-'action-edit' => 'hem pan bodol',
+'action-edit' => 'hem pan sudar',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|bodlop|bodlopam}}',
@@ -524,7 +527,8 @@ Hachem [$2 failichem vivron panan] asleli vivron khala dilea:',
 'watch' => 'Sadur rav',
 'watchthispage' => 'Hea panar dixtt dovor',
 'unwatch' => 'Nodor kadd',
-'watchlist-details' => '{{PLURAL:$1|$1 pan tujea sadurvollerint asa|$1 panam tujea sadurvollerint asat}} , ulovpachim panam meznastanam.',
+'watchlist-details' => 'Tujea sadurvollerint {{PLURAL:$1|$1 pan asa|$1 panam asat}}, ulovpachim panam mezonastanam.',
+'wlheader-showupdated' => "Tujea fatle bhette san bodol'lean tim panam '''datt''' dakhoileant.",
 'wlshowlast' => 'Xevottchim $1 voram $2 dis $3 dakhoi',
 'watchlist-options' => 'Sadurvollericheo poryay',
 
@@ -678,6 +682,9 @@ Tujean tachem mull pollonv ieta',
 'tooltip-undo' => '"Rodd\' kor" sudharop portita ani sudharopak Zholok ritin ukodta. Tem saran karon zoddunk dita.',
 'tooltip-summary' => 'Mottvo sar ghal',
 
+# Info page
+'pageinfo-toolboxlink' => 'Panachi mahiti',
+
 # Browsing diffs
 'previousdiff' => '←  Adlo sudar',
 'nextdiff' => 'Fuddlem bodlop →',
@@ -686,7 +693,7 @@ Tujean tachem mull pollonv ieta',
 'file-info-size' => '$1 × $2 pixelam, failicho akar: $3, MIME prokar: $4',
 'file-nohires' => 'Odhik bariksai na.',
 'svg-long-desc' => 'SVG fail, nanvak $1 × $2 pixeli, failcho akar: $3',
-'show-big-image' => 'Akhi bariksai',
+'show-big-image' => 'Mull fail',
 
 # Bad image list
 'bad_image_list' => 'Akar oso asa:
@@ -715,7 +722,7 @@ Zori tor hi failik bodol'lam zalear kai mahiti bodololem failik sarkem mell khai
 
 # External editor support
 'edit-externally' => 'Hea failik bhaili program uzar korun bodol.',
-'edit-externally-help' => '(Odhik mahite khatir [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] polloi)',
+'edit-externally-help' => '(Odhik mahite khatir [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] polloi)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'soglle',
@@ -746,4 +753,7 @@ Zori tor hi failik bodol'lam zalear kai mahiti bodololem failik sarkem mell khai
 # Special:Tags
 'tag-filter' => '[[Special:Tags|Dospi]] challni:',
 
+# Search suggestions
+'searchsuggest-search' => 'Sod',
+
 );
index f1161fd..653b9cf 100644 (file)
@@ -827,7 +827,6 @@ $1",
 'mypreferences' => 'Αἱ προαιρέσεις μου',
 'prefs-edits' => 'Τοσοῦται αἱ μεταβολαί:',
 'prefsnologin' => 'Μὴ συνδεδεμένος',
-'prefsnologintext' => 'Δεῖ σε <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} συνδεδεμένος εἶναι]</span> πρὸ τοῦ καθορίσειν τὰς ἐσοῦ προαιρέσεις χρωμένου.',
 'changepassword' => 'Ἀλλάττειν σύνθημα',
 'prefs-skin' => 'Ἐμφάνισις',
 'skin-preview' => 'Προεπισκοπεῖν',
@@ -2443,7 +2442,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'Μεταγράφειν τόδε τὸ ἀρχεῖον χρώμενος ἐξώτερήν τινα ἐφαρμογήν.',
-'edit-externally-help' => 'Εἰ πλείοντα βούλει μαθεῖν, [//www.mediawiki.org/wiki/Manual:External_editors τὰς περὶ τοῦ σχῆματος διδασκαλίας] ἴδε.',
+'edit-externally-help' => 'Εἰ πλείοντα βούλει μαθεῖν, [https://www.mediawiki.org/wiki/Manual:External_editors τὰς περὶ τοῦ σχῆματος διδασκαλίας] ἴδε.',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ἅπασαι',
@@ -2590,8 +2589,7 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'Εἰδικαὶ δέλτοι',
-'specialpages-note' => '----
-* Κανονικαὶ εἰδικαὶ δέλτοι.
+'specialpages-note' => '* Κανονικαὶ εἰδικαὶ δέλτοι.
 * <strong class="mw-specialpagerestricted">Περιωρισμέναι εἰδικαὶ δἐλτοι.</strong>
 * <span class="mw-specialpagecached">Μόναι δέλτοι ἀποτεταμιευμέναι.</span>',
 'specialpages-group-maintenance' => 'Ἀναφοραὶ συντηρήσεως',
index 6716266..3d6fbd0 100644 (file)
@@ -140,12 +140,12 @@ $messages = array(
 'tog-hidepatrolled' => 'Vum Fäldhieter aagluegti Änderige in dr „Letschte Änderige“ usblände',
 'tog-newpageshidepatrolled' => 'Aagluegti Syten uf dr Lischt „Neiji Syte“ verstecke',
 'tog-extendwatchlist' => 'Beobachtungslischte erwytere go alli Änderige aazeige, nit numme di letschte',
-'tog-usenewrc' => 'Sytebezogeni Gruppierig bi dr «letschte Änderige» un uf dr Beobachtigslischte  (brucht JavaScript)',
+'tog-usenewrc' => 'Änderigen uf „Letschte Änderige“ un dr Beobachtigslischt no Syte gruppiere',
 'tog-numberheadings' => 'Überschrifte outomatisch numeriere',
-'tog-showtoolbar' => 'Editier-Wärchzüüg aazeige',
-'tog-editondblclick' => 'Syte ändere mit Doppelklick i d Syte (JavaScript)',
+'tog-showtoolbar' => 'Wärchzyyglyscht zum Bearbeite aazeige',
+'tog-editondblclick' => 'Syte ändere mit Doppelklick',
 'tog-editsection' => 'Links aazeige für ds Bearbeite vo einzelnen Absätz',
-'tog-editsectiononrightclick' => 'Einzelni Absätz ändere mit Rächtsclick (Javascript)',
+'tog-editsectiononrightclick' => 'Einzelni Absätz ändere mit Rächtsclick uf d Iberschrifte',
 'tog-showtoc' => 'Inhaltsverzeichnis aazeige bi Artikle mit meh als drei Überschrifte',
 'tog-rememberpassword' => 'Mit däm Browser duurhaft aamälde (Maximal fir $1 {{PLURAL:$1|Tag|Täg}})',
 'tog-watchcreations' => 'Sälber gmachti Sytene un uffegladeni Dateie automatisch  beobachte',
@@ -163,7 +163,7 @@ $messages = array(
 'tog-shownumberswatching' => 'Aazahl Benutzer aazeige, wo ne Syten am Aaluege sy (i den Artikelsyte, i de «letschten Änderigen» und i der Beobachtigslischte)',
 'tog-oldsig' => 'Vorschau vu dr Unterschrift:',
 'tog-fancysig' => 'Signatur as Wikitext behandle (ohni automatischi Vergleichig)',
-'tog-uselivepreview' => 'Live-Vorschau bruche (JavaScript) (experimentell)',
+'tog-uselivepreview' => 'Live-Vorschau bruche (experimentell)',
 'tog-forceeditsummary' => 'Sag mer s, wänn i s Zämmefassigsfeld läär loss',
 'tog-watchlisthideown' => 'Eigeni Änderige uf d Beobachtigslischt usblände',
 'tog-watchlisthidebots' => 'Bot-Änderige in d Beobachtigslischt usblende',
@@ -177,6 +177,7 @@ $messages = array(
 'tog-noconvertlink' => 'Konvertierig vum Titel deaktiviere',
 'tog-norollbackdiff' => 'Unterschid noch em Zrucksetze unterdrucke',
 'tog-useeditwarning' => 'Warn mi, wänn I ne Syte verloss mit Bearbeitige, wu nonig gspycheret sin',
+'tog-prefershttps' => 'Wänn aagmäldet, alliwyl e sicheri Verbindig bruuche',
 
 'underline-always' => 'immer',
 'underline-never' => 'nie',
@@ -240,6 +241,18 @@ $messages = array(
 'oct' => 'Okt.',
 'nov' => 'Nov.',
 'dec' => 'Dez.',
+'january-date' => '$1. Jänner',
+'february-date' => '$1. Februar',
+'march-date' => '$1. Merz',
+'april-date' => '$1. April',
+'may-date' => '$1. Mai',
+'june-date' => '$1. Juni',
+'july-date' => '$1. Juli',
+'august-date' => '$1. Augschte',
+'september-date' => '$1. Septämber',
+'october-date' => '$1. Oktober',
+'november-date' => '$1. Novämber',
+'december-date' => '$1. Dezämber',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Kategori|Kategorie}}',
@@ -265,6 +278,7 @@ $messages = array(
 'newwindow' => '(imene nöie Fänschter)',
 'cancel' => 'Abbräche',
 'moredotdotdot' => 'Meh …',
+'morenotlisted' => 'Die Lischt isch nit vollständig.',
 'mypage' => 'Syte',
 'mytalk' => 'Diskussionsyte',
 'anontalk' => 'Diskussionssyste vo sellere IP',
@@ -298,6 +312,7 @@ $messages = array(
 'namespaces' => 'Namensryym',
 'variants' => 'Variante',
 
+'navigation-heading' => 'Navigationsmenü',
 'errorpagetitle' => 'Fähler',
 'returnto' => 'Zruck zur Syte $1.',
 'tagline' => 'Us {{SITENAME}}',
@@ -319,6 +334,7 @@ $messages = array(
 'create-this-page' => 'Die Syte afange',
 'delete' => 'Lesche',
 'deletethispage' => 'Syte lösche',
+'undeletethispage' => 'Die Syte widerhärstelle',
 'undelete_short' => '{{PLURAL:$1|1 Version|$1 Versione}} widerherstelle',
 'viewdeleted_short' => '{{PLURAL:$1|ei gleschti Änderig|$1 gleschti Ändrige}} aaluege',
 'protect' => 'Schütze',
@@ -366,7 +382,7 @@ Di maximal Wartezyt fir e Lock isch umme',
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
 'aboutsite' => 'Über {{GRAMMAR:akkusativ|{{SITENAME}}}}',
 'aboutpage' => 'Project:Über {{UCFIRST:{{GRAMMAR:akkusativ|{{SITENAME}}}}}}',
-'copyright' => 'Der Inhalt vo dere Syte stoht unter der $1.',
+'copyright' => 'Dr Inhalt vu dere Syte stoht unter dr Lizänz $1, wänn s nit andersch aagee isch.',
 'copyrightpage' => '{{ns:project}}:Copyright',
 'currentevents' => 'Aktuelli Mäldige',
 'currentevents-url' => 'Project:Aktuelli Termin',
@@ -449,6 +465,12 @@ Alli verfiegbare Spezialsyte sin in dr [[Special:SpecialPages|Lischt vu Spezials
 # General errors
 'error' => 'Fähler',
 'databaseerror' => 'Fähler in dr Datebank',
+'databaseerror-text' => 'S het e Datebankabfrogfähler gee.
+Des chennt e Fähler in dr Software aazeige.',
+'databaseerror-textcl' => 'S het e Datebankabfrogfähler gee.',
+'databaseerror-query' => 'Abfrog: $1',
+'databaseerror-function' => 'Funktion: $1',
+'databaseerror-error' => 'Fähler: $1',
 'laggedslavemode' => 'Warnig: di letschte Änderige wäre u. U. nonig aazeigt!',
 'readonly' => 'Datebank isch gsperrt',
 'enterlockreason' => 'Bitte gib e Grund y, worum d Datebank soll gsperrt wäre un e Yschätzig wie lang si soll gsperrt blybe',
@@ -479,6 +501,7 @@ Wänn s des nit isch, hesch villicht e Fähler in dr Software gfunde. Bitte mäl
 'cannotdelete' => 'D Syte oder d Datei „$1“ cha nit glescht wäre. Si isch villicht scho vu eber anderem glescht wore.',
 'cannotdelete-title' => 'Syte „$1“ cha nit glescht wäre',
 'delete-hook-aborted' => 'D Leschig isch ohni Erchlärung dur e Schnittstell abbroche wore.',
+'no-null-revision' => 'Di nej Nullversion fir d Syte „$1“ het nit chennen aagleit wäre',
 'badtitle' => 'Ugültiger Titel',
 'badtitletext' => 'Dr Titel vu dr agforderte Syte isch nit giltig gsi, leer, oder e nit giltig Sprochgleich vun eme andre Wiki.',
 'perfcached' => 'Die Informatione chemme us em Zwischespycher un sin derwyl villicht nit aktuäll. Maximal {{PLURAL:$1|ei Ergebnis isch|$1 Ergebnis sin}} im Cache verfiegbar.',
@@ -501,6 +524,10 @@ $2',
 'namespaceprotected' => "Du hesch kei Berächtigung, die Syte im '''$1'''-Namensruum z bearbeite.",
 'customcssprotected' => 'Du bisch nid berächtigt, die Syte mit CSS z bearbeite, wel si zue dr persenlige Yystellige vun eme andere Benutzer ghert.',
 'customjsprotected' => 'Du bisch nid berächtigt, die Javaskript-Syte z bearbeite, wel si zue dr persenlige Yystellige vun eme andere Benutzer ghert.',
+'mycustomcssprotected' => 'Du derfsch die CSS-Syte nit bearbeite.',
+'mycustomjsprotected' => 'Du derfsch die JavaScript-Syte nit bearbeite.',
+'myprivateinfoprotected' => 'Du derfsch Dyni privaten Informatione nit bearbeite.',
+'mypreferencesprotected' => 'Du derfsch Dyni Yystellige nit bearbeite.',
 'ns-specialprotected' => 'Spezialsyte chenne nid bearbeitet wäre.',
 'titleprotected' => "E Syte mit däm Name cha nid aaglait wäre.
 Die Sperri isch dur [[User:$1|$1]] yygrichtet wore mit dr Begrindig ''„$2“''.",
@@ -520,13 +547,24 @@ Dr Administrator, wu dr Schrybzuegriff gsperrt het, het dää Grund aagee: „$3
 # Login and logout pages
 'logouttext' => "'''Du bisch jetz abgmäldet.'''
 
-Du chasch {{SITENAME}} wyter anonym bruche, oder Du chasch di <span class='plainlinks'>[$1 wider aamälde]</span> mit em glyche oder eme andere Benutzername.
-
-Ochat: s cha syy, ass bstimmti Syte eso aazeigt wäre, wie wänn Du allno aagmäldet wärsch, bis Du dr Zwischespycher vu Dyym Browser glescht hesch.",
+Obacht: s cha syy, ass bstimmti Syte eso aazeigt wäre, wie wänn Du allno aagmäldet wärsch, bis Du dr Zwischespycher vu Dyym Browser glescht hesch.",
+'welcomeuser' => 'Willchuu, $1!',
+'welcomecreation-msg' => 'Dyy Benutzerkonto isch aagleit wore.
+Vergiss nit, Dyni [[Special:Preferences|{{SITENAME}}-Yystellige]] z ändere.',
 'yourname' => 'Dyy Benutzername',
+'userlogin-yourname' => 'Benutzername',
+'userlogin-yourname-ph' => 'Gib Dyy Benutzernamen yy',
+'createacct-another-username-ph' => 'Gib Dyy Benutzernamen yy',
 'yourpassword' => 'Passwort:',
+'userlogin-yourpassword' => 'Passwort',
+'userlogin-yourpassword-ph' => 'Gib Dyy Passwort yy',
+'createacct-yourpassword-ph' => 'Passwort yygee',
 'yourpasswordagain' => 'Passwort no mol yygee:',
+'createacct-yourpasswordagain' => 'Passwort bstetige',
+'createacct-yourpasswordagain-ph' => 'Gib s Passwort nomol yy',
 'remembermypassword' => 'Uf däm Computer duurhaft aamälde (Maximal fir $1 {{PLURAL:$1|Tag|Täg}})',
+'userlogin-remembermypassword' => 'Aagmäldet blyybe',
+'userlogin-signwithsecure' => 'Sicheri Verbindig bruuche',
 'yourdomainname' => 'Dyyni Domäne',
 'password-change-forbidden' => 'Du chasch uf däm Wiki kei Passwerter ändere.',
 'externaldberror' => 'Entwäder s lit e Fähler bi dr externe Authentifizierung vor, oder Du derfsch Dyy extern Benutzerkonto nid aktualisiere.',
@@ -538,18 +576,44 @@ Ochat: s cha syy, ass bstimmti Syte eso aazeigt wäre, wie wänn Du allno aagmä
 'logout' => 'Abmälde',
 'userlogout' => 'Abmälde',
 'notloggedin' => 'Nit aagmäldet',
+'userlogin-noaccount' => 'No kei Benutzerkonto?',
+'userlogin-joinproject' => 'Bi {{SITENAME}} aamälde',
 'nologin' => 'No kei Benutzerkonto? $1.',
 'nologinlink' => '»Konto aaleege«',
 'createaccount' => 'Nöis Benutzerkonto aalege',
 'gotaccount' => "Du häsch scho a Konto? '''$1'''",
 'gotaccountlink' => '»Login fir Benutzer, wu scho aagmäldet sin«',
 'userlogin-resetlink' => 'Hesch Dyy Aamäldedate vergässe?',
-'createaccountmail' => 'iber E-Mail',
+'userlogin-resetpassword-link' => 'Passwort vergässe?',
+'helplogin-url' => 'Help:Aamälde',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hilf bim Aamälde]]',
+'userlogin-loggedin' => 'Du bisch scho as {{GENDER:$1|$1}} aagmäldet.
+Bruuch s Formular unte go Di unter eme andere Benutzername aamälde.',
+'userlogin-createanother' => 'En ander Benutzerkonto aalege',
+'createacct-join' => 'Gib unte Dyni Informationen yy.',
+'createacct-another-join' => 'Gib unte d Informatione vum neie Benutzerkonto yy.',
+'createacct-emailrequired' => 'E-Mail-Adräss',
+'createacct-emailoptional' => 'E-Mail-Adräss (optional)',
+'createacct-email-ph' => 'Gib Dyy E-Mail-Adräss yy',
+'createacct-another-email-ph' => 'Gib Dyy E-Mail-Adräss yy',
+'createaccountmail' => 'E temporär Zuefallspasswort bruuchen un an di aagee E-Mail-Adräss schicke',
+'createacct-realname' => 'Richtige Name (optional)',
 'createaccountreason' => 'Grund:',
+'createacct-reason' => 'Grund',
+'createacct-reason-ph' => 'Wurum Du ne ander Benutzerkonto aaleisch',
+'createacct-captcha' => 'Sicherheitspriefig',
+'createacct-imgcaptcha-ph' => 'Gib dr Tekscht yy, wu Du obe siisch',
+'createacct-submit' => 'Dyy Benutzerkonto aalege',
+'createacct-another-submit' => 'En ander Benutzerkonto aalege',
+'createacct-benefit-heading' => '{{SITENAME}} wird vu Mänsche wie Dir gschaffe.',
+'createacct-benefit-body1' => '{{PLURAL:$1|Bearbeitig|Bearbeitige}}',
+'createacct-benefit-body2' => '{{PLURAL:$1|Syte|Syte}}',
+'createacct-benefit-body3' => '{{PLURAL:$1|aktive Autor|aktivi Autore}}',
 'badretype' => 'Di beidi Passwörter stimme nid zämme.',
 'userexists' => 'Dä Benutzername git s scho.
 Bitte nimm e andere.',
 'loginerror' => 'Fähler bir Aamäldig',
+'createacct-error' => 'Fähler bim Aalege vum Benutzerkonto',
 'createaccounterror' => 'Het s Benutzerkonto nit chenne aalege: $1',
 'nocookiesnew' => 'Dr Benutzerzuegang isch aaglait wore, aber Du bisch nid yygloggt. {{SITENAME}} brucht fir die Funktion Cookies, bitte tue die aktiviere un logg Di derno mit Dyynem neje Benutzername un em Passwort, wu drzue ghert, yy.',
 'nocookieslogin' => '{{SITENAME}} brucht Cookies fir e Aamäldig. Du hesch d Cookies deaktiviert. Aktivier si bitte un versuech s no mol.',
@@ -594,7 +658,7 @@ Voreb ass no mee Mails iber d {{SITENAME}}-Mailfunktion an die Adräss gschickt
 'acct_creation_throttle_hit' => 'Bsuecher vu däm Wiki, wu Dyyni IP-Adräss bruuche, hän innerhalb vum letschte Tag {{PLURAL:$1|1 Benutzerkonto|$1 Benutzerkonte}} aagleit. Des isch di maximal Aazahl, wu in däm Zytruum erlaubt isch.
 
 Bsuecher, wu die IP-Adräss bruuche, chenne im Momänt kei Benutzerkonte meh aalege.',
-'emailauthenticated' => 'Di E-Mail-Adräss isch am $2 um $3 Uhr bschtätigt worde.',
+'emailauthenticated' => 'Dyy E-Mail-Adräss isch am $2 am $3 Uhr bstetigt wore.',
 'emailnotauthenticated' => 'Dyni E-Mail-Adräss isch nonig bstätigt. Wäg däm gehn di erwyterete E-Mail-Funktione nonig.
 Fir d Bstätigung muesch em Link nogoh, wu Dir gschickt woren isch. Du chasch au e neie sonig Link aafordere:',
 'noemailprefs' => 'Du hesch kei E-Mail-Adrässen aaggä, drum sy di folgende Funktione nid müglech.',
@@ -604,20 +668,23 @@ Bitte gib ä neiji Adress in nem gültige Format ii, odr tue s Feld leere.',
 'cannotchangeemail' => 'E-Mail-Adrässe chönne in däm Wiki nit gänderet werde.',
 'emaildisabled' => 'Iber die Websyte chenne kei E-Mail verschickt wäre.',
 'accountcreated' => 'S Benutzerkonto isch aagleit wore.',
-'accountcreatedtext' => 'S Benutzerkonto $1 isch aagleit wore.',
+'accountcreatedtext' => 'S Benutzerkonto fir [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|Diskussion]]) isch aagleit wore.',
 'createaccount-title' => 'Aalege vum e Benutzerkonto fir {{SITENAME}}',
 'createaccount-text' => 'Fir Dii isch e Benutzerkonto "$2" uf {{SITENAME}} ($4) aaglait wore. S Passwort fir "$2" , wu automatisch generiert woren isch, isch "$3". Du sottsch Di jetz aamälde un s Passwort ändere.
 
 Wänn s Benutzerkonto us Versäh aaglait woren isch, chasch die Nochricht ignoriere.',
 'usernamehasherror' => 'In Benutzernäme derf s kei Rautezeiche din haa',
-'login-throttled' => 'Du hesch z vilmol vergebli versuecht, Di aazmälde. Bitte wart, voreb Du s non emol versuechsch.',
+'login-throttled' => 'Du hesch z vilmol umesuscht versuecht, Di aazmälde. Bitte wart $1, voreb Du s non emol versuechsch.',
 'login-abort-generic' => 'Dyy Aamäldig isch nit erfolgryych gsii – Abbroche',
 'loginlanguagelabel' => 'Sproch: $1',
 'suspicious-userlogout' => 'Dyy Versuech di abzmälde isch abbroche wore, wel s uusgsäh het, wie wänn s vun eme bschedigte Browser oder eme Cacheproxy uus gsändet woren isch.',
+'createacct-another-realname-tip' => 'Dr richtig Name isch optional.
+Wänn Du ne aagiisch, wird er bruucht fir d Zueornig vu dr Byytreg.',
 
 # Email sending
 'php-mail-error-unknown' => 'Nit bekannte Fähler mit dr Funktion mail() vu PHP',
 'user-mail-no-addy' => 'Es isch versuecht worde e E-Mail ohni Angab vunere E-Mail-Adräss z verschigge.',
+'user-mail-no-body' => 'S isch versuecht wore, ne E-Mail mit eme lääre oder z churze Tekscht z verschicke.',
 
 # Change password dialog
 'resetpass' => 'Passwort fir s Benutzerkonto ändere oder zrucksetze',
@@ -628,7 +695,7 @@ Wänn s Benutzerkonto us Versäh aaglait woren isch, chasch die Nochricht ignori
 'newpassword' => 'Nöis Passwort',
 'retypenew' => 'Nöis Passwort (es zwöits Mal)',
 'resetpass_submit' => 'Passwort ibermittle un aamälde',
-'changepassword-success' => 'Dyy Passwort isch erfolgryych gänderet wore. Jetz chunnt d Aamäldig …',
+'changepassword-success' => 'Dyy Passwort isch erfolgryych gänderet wore.',
 'resetpass_forbidden' => 'S Passwort cha nid gänderet wäre.',
 'resetpass-no-info' => 'Du muesch Di aamälde zum uf die Syte diräkt zuegryfe z chenne.',
 'resetpass-submit-loggedin' => 'Passwort ändere',
@@ -636,33 +703,41 @@ Wänn s Benutzerkonto us Versäh aaglait woren isch, chasch die Nochricht ignori
 'resetpass-wrong-oldpass' => 'S temporär oder aktuäll Passwort isch nimi giltig.
 Villicht hesch Dyy Passwort scho gänderet oder e nej temporär Passwort aagforderet.',
 'resetpass-temp-password' => 'Temporär Passwort:',
+'resetpass-abort-generic' => 'D Passwortänderig isch dur e Erwyterig abbroche wore.',
 
 # Special:PasswordReset
 'passwordreset' => 'Passwort zruggsetze',
+'passwordreset-text-one' => 'Fill des Formular uus go Dy Passwort zrucksetze.',
+'passwordreset-text-many' => '{{PLURAL:$1|Fill eis vu dr Fälder uus go Dy Passwort zrucksetze.}}',
 'passwordreset-legend' => 'Passwort zrucksetze',
 'passwordreset-disabled' => 'S Zrucksetze vu Passwerter isch in däm Wiki deaktiviert wore.',
+'passwordreset-emaildisabled' => 'D E-Mail-Funktione sin uf däm Wiki deaktiviert wore.',
 'passwordreset-username' => 'Benutzername:',
 'passwordreset-domain' => 'Domain:',
 'passwordreset-capture' => 'Die E-Mail aaluege?',
 'passwordreset-capture-help' => 'Wänn du des Chäschtli aachrüüzesch, no wird die E-Mail (mit em temporäre Passwort) dir aazeigt, un au em Benutzer zuegschiggt.',
 'passwordreset-email' => 'E-Mail-Adräss:',
 'passwordreset-emailtitle' => 'Benutzerkontoinformationen uf {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Eber mit dr IP-Adresse $1, wahrschyns Du sälber, het e Erinnerig an Dyyni Benutzerkonteninformatione fir {{SITENAME}} aagforderet ($4). {{PLURAL:$3|Des Benutzerkonto isch|Die Benutzerkonte sin}} mit däre E-Mail-Adräss verchnipft:
+'passwordreset-emailtext-ip' => 'Eber mit dr IP-Adresse $1, wahrschyns Du sälber, het e Erinnerig an Dyyni Benutzerkonteninformatione fir {{SITENAME}} aagforderet ($4). 
+
+{{PLURAL:$3|Des Benutzerkonto isch|Die Benutzerkonte sin}} mit däre E-Mail-Adräss verchnipft: 
 
-$2
+$2 
 
 {{PLURAL:$3|Des temporär Passwort lauft|Die temporäre Passwerter laufe}} in {{PLURAL:$5|eim Tag|$5 Täg}} ab.
 Du sottsch di aamälden un e nej Passwort vergee. Wänn eber ander die Aafrog gstellt het oder Du di wider an Dyy alt Passwort chasch erinnere un s nimi wettsch ändere, chasch die Nochricht ignorieren un alsfurt Dyy alt Passwort bruche.',
-'passwordreset-emailtext-user' => 'Benutzer $1 uf {{SITENAME}} het e Erinnerig an Dyyni Benutzerkonteninformatione fir {{SITENAME}} aagforderet ($4). {{PLURAL:$3|Des Benutzerkonto isch|Die Benutzerkonte sin}} mit däre E-Mail-Adräss verchnipft:
+'passwordreset-emailtext-user' => 'Dr Benutzer $1 bi {{SITENAME}} het e Zrucksetzig vu Dym Passwort bi {{SITENAME}} aagforderet ($4). 
+
+{{PLURAL:$3|Des Benutzerkonto isch|Die Benutzerkonte sin}} mit däre E-Mail-Adräss verchnipft: 
 
-$2
+$2 
 
 {{PLURAL:$3|Des temporär Passwort lauft|Die temporäre Passwerter laufe}} in {{PLURAL:$5|eim Tag|$5 Täg}} ab.
 Du sottsch di aamälden un e nej Passwort vergee. Wänn eber ander die Aafrog gstellt het oder Du di wider an Dyy alt Passwort chasch erinnere un s nimi wettsch ändere, chasch die Nochricht ignorieren un alsfurt Dyy alt Passwort bruche.',
 'passwordreset-emailelement' => 'Benutzername: $1
 Temporär Passwort: $2',
-'passwordreset-emailsent' => 'E Erinnerig isch per E-Mail verschickt wore.',
-'passwordreset-emailsent-capture' => 'E Erinnerigsmail isch abgschiggt worde, un isch unte aazeigt.',
+'passwordreset-emailsent' => 'E Passwort-Zrucksetzig isch per E-Mail verschickt wore.',
+'passwordreset-emailsent-capture' => 'E Passwort-Zrucksetzigs-Mail isch vergschickt worde, un isch unte aazeigt.',
 'passwordreset-emailerror-capture' => 'Die Erinnerigsmail, wo unte aazeigt isch, isch generiert worde, aber de Versand aa de Benutzer isch gschyyteret: $1',
 
 # Special:ChangeEmail
@@ -1159,7 +1234,6 @@ Einzelheite chasch im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'mypreferences' => 'Yystellige',
 'prefs-edits' => 'Aazahl vu dr Bearbeitige:',
 'prefsnologin' => 'Nid aagmäldet',
-'prefsnologintext' => 'Du muesch <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} aagmäldet]</span> sy, für Benutzerystellige chönne z ändere',
 'changepassword' => 'Passwort ändere',
 'prefs-skin' => 'Benutzeroberflechi',
 'skin-preview' => 'Vorschou',
@@ -2595,7 +2669,7 @@ Zum Exportiere trag dr Sytetitel in dr Täxtchaschte unter yy, ei Titel pro Zyyl
 'allmessagesdefault' => 'Standardtext',
 'allmessagescurrent' => 'jetzige Tekscht',
 'allmessagestext' => 'Des isch e Lischt vu allene meglige Syschtemnochrichte us em MediaWiki Namensruum.
-Lueg au uf [//www.mediawiki.org/wiki/Localisation MediaWiki Lokalisierig] un [//translatewiki.net translatewiki.net], wänn Du zue dr MediaWiki-Lokalisierig wit byytrage.',
+Lueg au uf [https://www.mediawiki.org/wiki/Localisation MediaWiki Lokalisierig] un [//translatewiki.net translatewiki.net], wänn Du zue dr MediaWiki-Lokalisierig wit byytrage.',
 'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' cha nit bruucht wärde will '''\$wgUseDatabaseMessages''' abgschalte isch.",
 'allmessages-filter-legend' => 'Filter',
 'allmessages-filter' => 'Filter fir dr aapasst Zuestand:',
@@ -2863,7 +2937,7 @@ $1',
 'file-nohires' => 'Kei höcheri Uflösig verfüegbar.',
 'svg-long-desc' => 'SVG-Datei, Basisgrößi: $1 × $2 Pixel, Dateigrößi: $3',
 'svg-long-desc-animated' => 'Animierti SVG-Datei, Basisgreßi $1 × $2 Pixel, Dateigreßi: $3',
-'show-big-image' => 'Originalgrößi',
+'show-big-image' => 'Originaldatei',
 'show-big-image-preview' => 'Greßi vu däre Vorschau: $1.',
 'show-big-image-other' => 'Wyteri {{PLURAL:$2|Ufflösig|Ufflösige}}: $1.',
 'show-big-image-size' => '$1 × $2 Pixel',
@@ -3314,7 +3388,7 @@ Andri wäre standardmäßig nit aazeigt.
 
 # External editor support
 'edit-externally' => 'Die Datei mit emnen externe Programm bearbeite',
-'edit-externally-help' => '(Lueg d [//www.mediawiki.org/wiki/Manual:External_editors Installationsaawisige] fir witeri Informatione)',
+'edit-externally-help' => '(Lueg d [https://www.mediawiki.org/wiki/Manual:External_editors Installationsaawisige] fir witeri Informatione)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'alli',
@@ -3494,7 +3568,7 @@ Du chasch au d [[Special:EditWatchlist|Standard-Bearbeitigssyte]] bruuche.',
 'version-hook-subscribedby' => 'Ufruef vu',
 'version-version' => '(Version $1)',
 'version-license' => 'Lizänz',
-'version-poweredby-credits' => "Die Websyte nutzt '''[//www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
+'version-poweredby-credits' => "Die Websyte nutzt '''[https://www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
 'version-poweredby-others' => 'anderi',
 'version-credits-summary' => 'Mir danke däne Lyt fir ihri Bytreg zue [[Special:Version|MediaWiki]].',
 'version-license-info' => 'MediaWiki isch e freji Software, d. h. s cha, no dr Bedingige vu dr GNU General Public-Lizänz, wu vu dr Free Software Foundation vereffentligt woren isch, wyterverteilt un/oder modifiziert wäre. Doderbyy cha d Version 2, oder no eigenem Ermässe, jedi nejeri Version vu dr Lizänz brucht wäre.
index 864ffa5..f36a514 100644 (file)
@@ -563,7 +563,8 @@ $2',
 'invalidtitle-knownnamespace' => 'નામસ્થળ "$2" અને લખાણ "$3" સાથે અમાન્ય મથાળું',
 'invalidtitle-unknownnamespace' => 'અજ્ઞાત નામસ્થળ ક્રમાંક $1 અને નામ "$2" વાળું અમાન્ય મથાળું',
 'exception-nologin' => 'પ્રવેશ કરેલ નથી',
-'exception-nologin-text' => 'આ પાનું કે ક્રિયા માટે આ વિકિ પર લોગઈન થવું જરૂરી છે.',
+'exception-nologin-text' => 'આ પાનું કે પ્રક્રિયા પ્રાપ્તી માટે કૃપયા [[Special:Userlogin|લોગઈન]] કરો.',
+'exception-nologin-text-manual' => 'આ પાનું કે પ્રક્રિયા મેળવવા માટે કૃપયા $1.',
 
 # Virus scanner
 'virus-badscanner' => "ખરાબ રૂપરેખા: અજાણ્યું વાઇરસ સ્કેનર: ''$1''",
@@ -610,7 +611,7 @@ $2',
 'gotaccount' => "પહેલેથી ખાતું ખોલેલું છે? '''$1'''.",
 'gotaccountlink' => 'પ્રવેશ કરો',
 'userlogin-resetlink' => 'પોતાની પ્રવેશ માહિતી ભૂલી ગયા છો?',
-'userlogin-resetpassword-link' => 'તમારà«\80 àª\97à«\81પà«\8dતસàª\82àª\9cà«\8dàª\9eા àª¬àª¦àª²à«\8b',
+'userlogin-resetpassword-link' => 'તમારà«\8b àªªàª¾àª¸àªµàª°à«\8dડ àª­à«\82લà«\80 àª\97યા àª\9bà«\8b?',
 'helplogin-url' => 'Help:પ્રવેશ માટે',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|પ્રવેશવા માટેની મદદ]]',
 'userlogin-loggedin' => 'તમે પહેલેથી {{GENDER:$1|$1}} તરીકે પ્રવેશ કરેલો જ છે.
@@ -680,7 +681,7 @@ $2',
 'passwordsent' => '"$1" ની નવી ગુપ્તસંજ્ઞા (પાસવર્ડ) આપના ઇમેઇલ પર મોકલવામાં આવ્યો છે.
 કૃપા કરી તે મળ્યા બાદ ફરી લોગ ઇન કરો.',
 'blocked-mailpassword' => 'ફેરફાર કરવા માટે તમારું IP એડ્રેસ સ્થગિત કરી દેવાયું છે, તેથી દૂરુપયોગ ટાળવા માટે તમને ગુપ્તસંજ્ઞા ફરી મેળવવાની છૂટ નથી.',
-'eauthentsent' => 'પà«\81ષà«\8dàª\9fિ àª\95રવા àª®àª¾àª\9fà«\87 àª¤àª®à«\87 àª\86પેલા સરનામાં પર ઇમેલ મોકલવામાં આવ્યો છે.
+'eauthentsent' => 'પà«\81ષà«\8dàª\9fિ àª\95રવા àª®àª¾àª\9fà«\87 àª¨àª¿àª¶à«\8dàª\9aિત àª¥àª¯ેલા સરનામાં પર ઇમેલ મોકલવામાં આવ્યો છે.
 એ જ સરનામે બીજો ઇમેલ થતાં પહેલાં તમારે ઇમેલમાં લખેલી સૂચનાઓ પ્રમાણે કરવું પડશે જેથી એ પુષ્ટિ થઇ શકે કે આપેલું સરનામું તમારું છે.',
 'throttled-mailpassword' => 'ગુપ્ત સંજ્ઞા યાદ અપાવતી ઇમેઇલ છેલ્લા {{PLURAL:$1|કલાકમાં|$1 કલાકોમાં}} મોકલેલી છે.
 દૂરુપયોગ રોકવા માટે, {{PLURAL:$1|કલાકમાં|$1 કલાકોમાં}} ફક્ત એક જ આવી મેઇલ કરવામાં આવે છે.',
@@ -716,6 +717,7 @@ $2',
 # Email sending
 'php-mail-error-unknown' => 'PHPની મેલ() કામગીરીમાં અજ્ઞાત ત્રુટિ',
 'user-mail-no-addy' => 'ઈ મેલ એડ્રસ વગર ઈ મેલ મોકલવા પ્રયત્ન કરેલ.',
+'user-mail-no-body' => 'કોરો કે નાનકડો ઈમેઇલ મોકલવાનો પ્રયાસ કરાયો.',
 
 # Change password dialog
 'resetpass' => 'ગુપ્તસંજ્ઞા બદલો',
@@ -740,6 +742,7 @@ $2',
 # Special:PasswordReset
 'passwordreset' => 'ગુપ્ત સંજ્ઞા ફરી ગોઠવો',
 'passwordreset-text-one' => 'તમારો પાસવર્ડ બદલવા માટે આ ફોર્મ પૂરુ કરો.',
+'passwordreset-text-many' => '{{PLURAL:$1|તમારો પાસવર્ડ બદલવા માટે કોઈ એક ખાનું ભરો.}}',
 'passwordreset-legend' => 'ગુપ્ત સંજ્ઞા ફરી ગોઠવો',
 'passwordreset-disabled' => 'આ વિકી પર ગુપ્ત સંજ્ઞા ફરી ગોઠવવા પર પ્રતિબંધ છે.',
 'passwordreset-emaildisabled' => 'આ વિકિ પર ઇમેઇલ સગવડ બંધ છે.',
@@ -953,10 +956,10 @@ $2
 તમે તમારું લખાણ કોઇ ટેક્સ્ટ ફાઇલ માં સેવ કરી મૂકી દો અને માહિતીસંચ ખુલતા વિકિ પર સાચવી શકશો. 
 
 જે પ્રબંધકે માહિતીસંચ બંધ કર્યો છે તેણે આ કારણ આપ્યું છે: $1",
-'protectedpagewarning' => "'''ચેતવણી : આ પાના પર સંરક્ષણ વિકલ્પ સક્રીય છે અને માત્ર પ્રબંધકો જ આમાં ફેરફાર કરી શકે.'''
-તમારા àª¸àª\82દરà«\8dભ àª®àª¾àª\9fà«\87 àª¤àª¾àª\9cà«\87તરનà«\80 àª²à«\8bàª\97 àª¯àª¾àª¦àª¿ આપી છે:",
-'semiprotectedpagewarning' => "'''નોંધ : આ પાના પર સંરક્ષણ વિકલ્પ સક્રીય છે અને માત્ર પ્રબંધકો જ આમાં ફેરફાર કરી શકે.'''
-તમારા àª¸àª\82દરà«\8dભ àª®àª¾àª\9fà«\87 àª¤àª¾àª\9cà«\87તરનà«\80 àª²à«\8bàª\97 àª¯àª¾àª¦àª¿ આપી છે:",
+'protectedpagewarning' => "'''ચેતવણી:''' આ પાના પર સંરક્ષણ વિકલ્પ સક્રીય છે અને માત્ર પ્રબંધકો જ આમાં ફેરફાર કરી શકે છે.
+સàª\82દરà«\8dભ àª®àª¾àª\9fà«\87 àª¤àª¾àª\9cà«\87તરનà«\80 àª²à«\8bàª\97 àª¯àª¾àª¦à«\80 àª¨à«\80àª\9aà«\87 આપી છે:",
+'semiprotectedpagewarning' => "'''નોંધ :''' આ પાના પર સંરક્ષણ વિકલ્પ સક્રીય છે અને માત્ર નોંધાયેલાં સભ્યો જ આમાં ફેરફાર કરી શકે છે.
+સàª\82દરà«\8dભ àª®àª¾àª\9fà«\87 àª¤àª¾àª\9cà«\87તરનà«\80 àª²à«\8bàª\97 àª¯àª¾àª¦à«\80 àª¨à«\80àª\9aà«\87 આપી છે:",
 'cascadeprotectedwarning' => "'''ચેતવણી:''' આ પાનું સંરક્ષિત છે. પ્રબંધન અધિકાર ધરાવતા સભ્યો જ આમાં ફેરફાર કરી શકે છે. આ પાનું નીચેના પગથિયામય સંરક્ષણ{{PLURAL:$1|પાના|પાનાઓ}} દ્વારા સુરક્ષિત છે.",
 'titleprotectedwarning' => "'''ચેતવણી: આ પાનું સંરક્ષિત છે આથી આની રચના માટે [[Special:ListGroupRights|વિશેષ અધિકારો]]ની જરૂર છે.'''
 તે સંબંધી તાજેતરની ફેરફાર યાદી તમારા સંદર્ભ માટે આપેલી છે:",
@@ -1110,20 +1113,20 @@ $3 દ્વારા અપાયેલ કારણ છે ''$2''",
 'revdelete-text' => "''' રદ્દ કરાયેલ ફેરફારો અને ઘટનાઓ પાનાના ઈતિહાસ અને લોગમાં દેખાશે , પણ તેની અંદરની માહિતી જન સમુદાયથી અદ્રશ્ય રહેશે. '''
 {{SITENAME}} પરના અન્ય પ્રબંધકો આ અદ્રશ્ય માહિતે જોઇ શકશે અને તેને પુનઃ જીવિત કરી શકશે સિવાય કે તેના પર વધારાની પાબંદી ન મુકાઇ હોય.",
 'revdelete-confirm' => 'કૃપયા પુષ્ટિ કરો કે તમે શું કરી રહ્યા છો તેની અને તેના પરિણામોની તમને જાણ છે અને તમે આ બધું  [[{{MediaWiki:Policy-url}}|the policy]] અ6તર્ગત કરી રહ્યાં છો.',
-'revdelete-suppress-text' => "બળ પૂર્વક છુપાવવું માત્ર આજ સંજોગોમાં કરી શકાશે:
+'revdelete-suppress-text' => "બળ પૂર્વક છુપાવવું \"માત્ર\" આજ સંજોગોમાં કરી શકાશે:
 * સંભવતઃ ભયાજનક માહિતી 
 * અયોગ્ય નિજી માહિતી 
-*: ''àª\98રનà«\81àª\82 àª¸àª°àª¨àª¾àª®à«\81àª\82 àª\85નà«\87 àª\9fà«\87લિફà«\8bન àª¨àª\82બર, àª¸àª¾àª®àª¾àª\9cિàª\95 àª¸à«\81રàª\95à«\8dષા àª\95à«\8dરà«\8dમ àª\88.''",
+*: ''àª\98રનà«\81àª\82 àª¸àª°àª¨àª¾àª®à«\81àª\82 àª\85નà«\87 àª\9fà«\87લિફà«\8bન àª¨àª\82બર, àª°àª¾àª·à«\8dàª\9fà«\8dરà«\80ય àª\93ળàª\96 àª\95à«\8dરમાàª\82àª\95à«\8b àªµàª\97à«\87રà«\87.''",
 'revdelete-legend' => 'દ્રશ્યતા સંબંધી પ્રતિબંધોને ગોઠવો',
-'revdelete-hide-text' => 'પà«\81નરાવરà«\8dતન àª\9bà«\81પાવà«\8b',
+'revdelete-hide-text' => 'પà«\81નરાવરà«\8dતન àª²àª\96ાણ',
 'revdelete-hide-image' => 'ફાઇલની માહિતી છુપાવો',
 'revdelete-hide-name' => 'ક્રિયા અને લક્ષ્ય સંતાડો',
-'revdelete-hide-comment' => 'ફેરફાર સારાંશ છુપાવો',
-'revdelete-hide-user' => 'સંપાદકનું નામ /આઈ પી એડ્રેસ સંતાડો',
+'revdelete-hide-comment' => 'ફેરફાર સારાંશ',
+'revdelete-hide-user' => 'સંપાદકનું નામ /આઈ પી એડ્રેસ',
 'revdelete-hide-restricted' => 'પ્રબંધક કે અન્યો સૌની માહિતી છુપાવો',
 'revdelete-radio-same' => '(બદલશો નહીઁ)',
-'revdelete-radio-set' => 'હા',
-'revdelete-radio-unset' => 'ના',
+'revdelete-radio-set' => 'àª\9bà«\81પાયà«\87લ',
+'revdelete-radio-unset' => 'દà«\8dશà«\8dયમાન',
 'revdelete-suppress' => 'પ્રબંધક કે અન્યો સૌની માહિતી છુપાવો',
 'revdelete-unsuppress' => 'સમા કરાયેલા પુનરાવર્તનો પરના પ્રતિબંધ હટાવો',
 'revdelete-log' => 'કારણ:',
@@ -1279,7 +1282,7 @@ $1",
 'mypreferences' => 'પસંદગીઓ',
 'prefs-edits' => 'સંપાદનોની સંખ્યા',
 'prefsnologin' => 'પ્રવેશ કરેલ નથી',
-'prefsnologintext' => 'સભ્યના અધિકારો બદલવા તમે <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} logged in]</span> પ્રવેશ કરેલો હોવો જોઈએ',
+'prefsnologintext2' => 'તમારી પસંદગીઓ પસંદ કરવા માટે કૃપયા $1.',
 'changepassword' => 'ગુપ્તસંજ્ઞા બદલો',
 'prefs-skin' => 'ફલક',
 'skin-preview' => 'ફેરફાર બતાવો',
@@ -2778,10 +2781,10 @@ $1',
 'imageinvalidfilename' => 'લક્ષ્ય ફાઈલ અવૈધ છે',
 'fix-double-redirects' => 'મૂળ શીર્ષક તરફ  નિર્દેશન કરતા  દિશા નિર્દેશકો અધ્યતન કરો',
 'move-leave-redirect' => 'પાછળ દિશા સૂચન છોડો',
-'protectedpagemovewarning' => "'''નà«\8bàª\82ધ : àª\86 àªªàª¾àª¨àª¾ àªªàª° àª¸àª\82રàª\95à«\8dષણ àªµàª¿àª\95લà«\8dપ àª¸àª\95à«\8dરà«\80ય àª\9bà«\87 àª\85નà«\87 àª®àª¾àª¤à«\8dર àªªà«\8dરબàª\82ધàª\95à«\8b àª\9c àª\86માàª\82 àª«à«\87રફાર àª\95રà«\80 àª¶àª\95à«\87.'''
-તમારા àª¸àª\82દરà«\8dભ àª®àª¾àª\9fà«\87 àª¤àª¾àª\9cà«\87તરનà«\80 àª²à«\8bàª\97 àª¯àª¾àª¦àª¿ આપી છે:",
-'semiprotectedpagemovewarning' => "'''નોંધ : આ પાના પર સંરક્ષણ વિકલ્પ સક્રીય છે અને માત્ર પ્રબંધકો જ આમાં ફેરફાર કરી શકે.'''
-તમારા àª¸àª\82દરà«\8dભ àª®àª¾àª\9fà«\87 àª¤àª¾àª\9cà«\87તરનà«\80 àª²à«\8bàª\97 àª¯àª¾àª¦àª¿ આપી છે:",
+'protectedpagemovewarning' => "'''àª\9aà«\87તવણà«\80:''' àª\86 àªªàª¾àª¨àª¾ àªªàª° àª¸àª\82રàª\95à«\8dષણ àªµàª¿àª\95લà«\8dપ àª¸àª\95à«\8dરà«\80ય àª\9bà«\87 àª\85નà«\87 àª®àª¾àª¤à«\8dર àªªà«\8dરબàª\82ધàª\95à«\8b àª\9c àª\86નà«\87 àª\96સà«\87ડà«\80 àª¶àª\95à«\87 àª\9bà«\87.
+સàª\82દરà«\8dભ àª®àª¾àª\9fà«\87 àª¤àª¾àª\9cà«\87તરનà«\80 àª²à«\8bàª\97 àª¯àª¾àª¦à«\80 àª¨à«\80àª\9aà«\87 આપી છે:",
+'semiprotectedpagemovewarning' => "'''નોંધ :''' આ પાના પર સંરક્ષણ વિકલ્પ સક્રીય છે અને માત્ર નોંધાયેલાં સભ્યો જ આને ખસેડી શકે છે.
+સàª\82દરà«\8dભ àª®àª¾àª\9fà«\87 àª¤àª¾àª\9cà«\87તરનà«\80 àª²à«\8bàª\97 àª¯àª¾àª¦à«\80 àª¨à«\80àª\9aà«\87 આપી છે:",
 'move-over-sharedrepo' => '== ફાઇલ અસ્તિત્વ ધારાવે છે ==
 સર્વસામાન્ય ફાઇલ સંગ્રહમાં [[:$1]] પહેલેથી મોજૂદ છે.  આ સ્થળે કોઇ અન્ય ફાઇલ હટાવતા વિહરમાન ફાઇલની માહિતી પર આ ફાઇલ લખાશે.',
 'file-exists-sharedrepo' => 'પસંદ કરેલ ફાઇલ ના નામે અન્ય ફાઇલ પહેલેથી સર્વ સામાન્ય ફાઇલ સંગ્રહમાં મોજૂદ છે/
@@ -2815,7 +2818,7 @@ $1',
 'allmessagesdefault' => 'મૂળ સંદેશ',
 'allmessagescurrent' => 'વર્તમાન દસ્તાવેજ',
 'allmessagestext' => 'આ મિડિયાવિકિ નામસ્થળમાં આવેલ પ્રણાલીજનિત સંદેશાની યાદી આ મુજબ છે.
-જો તમે મિડિયાયાવિકિના સ્થાનીયકરણમાં મદદરૂપ થવા ઇચ્છતા હોવ તો કૃપયા [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] અને [//translatewiki.net translatewiki.net]ની મુલાકાત લો.',
+જો તમે મિડિયાયાવિકિના સ્થાનીયકરણમાં મદદરૂપ થવા ઇચ્છતા હોવ તો કૃપયા [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] અને [//translatewiki.net translatewiki.net]ની મુલાકાત લો.',
 'allmessagesnotsupportedDB' => "આ પાનું ન વાપરી શકાશે કેમકે '''\$wgUseDatabaseMessages'''  નિષ્ક્રીય કરાયું છે",
 'allmessages-filter-legend' => 'ચાળણી',
 'allmessages-filter' => 'સ્થાનીયકરણ સ્થિતિ દ્વારા ચાળો',
@@ -3084,7 +3087,7 @@ $2',
 'file-nohires' => 'આથી વધુ આવર્તન ઉપલબ્ધ નથી.',
 'svg-long-desc' => 'SVG ફાઇલ, માત્ર $1 × $2 પીક્સલ, ફાઇલનું કદ: $3',
 'svg-long-error' => 'અયોગ્ય SVG ફાઇલ: $1',
-'show-big-image' => 'મહતà«\8dતમ àª\86વરà«\8dતન',
+'show-big-image' => 'મà«\82ળભà«\81ત àª«àª¾àª\87લ',
 'show-big-image-preview' => 'આ મહાવરા દ્રશ્યનું માપ: $1.',
 'show-big-image-other' => 'અન્ય {{PLURAL:$2|આવર્તન|આવર્તનો}}: $1.',
 'show-big-image-size' => '$1 × $2 પીક્સલ',
@@ -3550,7 +3553,7 @@ $2',
 
 # External editor support
 'edit-externally' => 'બાહ્ય સોફ્ટવેર વાપરીને આ ફાઇલમાં ફેરફાર કરો',
-'edit-externally-help' => '(વધુ માહિતી માટે [//www.mediawiki.org/wiki/Manual:External_editors સેટ-અપ સૂચનાઓ] જુઓ)',
+'edit-externally-help' => '(વધુ માહિતી માટે [https://www.mediawiki.org/wiki/Manual:External_editors સેટ-અપ સૂચનાઓ] જુઓ)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'બધા',
@@ -3731,7 +3734,7 @@ $5
 'version-hook-subscribedby' => 'દ્વ્રારા લાભાન્વીત',
 'version-version' => '(આવૃત્તિ $1)',
 'version-license' => 'પરવાનો',
-'version-poweredby-credits' => "આ વિકિ  '''[//www.mediawiki.org/ MediaWiki]''' દ્વારા ચાલે છે, પ્રકાશનાધિકાર © 2001-$1 $2.",
+'version-poweredby-credits' => "આ વિકિ  '''[https://www.mediawiki.org/ MediaWiki]''' દ્વારા ચાલે છે, પ્રકાશનાધિકાર © 2001-$1 $2.",
 'version-poweredby-others' => 'અન્યો',
 'version-poweredby-translators' => 'ટ્રાન્સલેટવિકિ.નેટ ભાષાંતરકર્તાઓ',
 'version-license-info' => 'મિડિયાવિકિ એક મુક્ત સોફ્ટવેર છે. તમે તેનું પુનઃવિતરણ કરી શકો છો અને/અથવા તેને the Free Software Foundation દ્વારા પ્રકાશિત  GNU General Public License હેઠળ તેના સંસ્કરણ 2 ને કે તે પછીના સંસ્કરણ   મઠારી શકો છો . 
@@ -3768,9 +3771,8 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'ખાસ પાનાં',
-'specialpages-note' => '----
-* નિયમિત ખાસ પાનાં.
-* <span class="mw-specialpagerestricted">ખાસ પાનાં પ્રતિબંધિત.</span>',
+'specialpages-note' => '* નિયમિત ખાસ પાનાં.
+* <span class="mw-specialpagerestricted">પ્રતિબંધિત ખાસ પાનાં.</span>',
 'specialpages-group-maintenance' => 'સમારકામ અહેવાલ',
 'specialpages-group-other' => 'અન્ય ખાસ પાનાઓ',
 'specialpages-group-login' => 'પ્રવેશ / ખાતુ બનાવો',
@@ -3829,7 +3831,7 @@ $5
 
 # Database error messages
 'dberr-header' => 'આ વિકિમાં તકલીફ છે',
-'dberr-problems' => 'દિલàª\97à«\80રà«\80! àª\86 àª¸àª¾àª\87àª\9f àª¤àª\95નિàª\95à«\80 àª\85ડàª\9aણ અનુભવી રહી છે.',
+'dberr-problems' => 'માફ àª\95રશà«\8b! àª\86 àª¸àª¾àª\87àª\9f àª¤àª\95નિàª\95à«\80 àª\85ડàª\9aણà«\8b અનુભવી રહી છે.',
 'dberr-again' => 'થોડી વાર રાહ જોઈને ફરી પેજ લોડ કરવાનો પ્રયત્ન કરો.',
 'dberr-info' => '(માહિતી સંચય સર્વર : $1નો સંપર્ક નથી કરી શકાયો)',
 'dberr-info-hidden' => '(ડેટાબેઝ સર્વર સાથે જોડાણ થઇ શકતું નથી)',
index 1e2aafe..b0453c8 100644 (file)
@@ -1410,7 +1410,7 @@ Bee adsyn elley follit dy seyr-obbragh.<br />
 
 # External editor support
 'edit-externally' => 'Reagh yn coadan shoh lesh sheeyntagh mooie',
-'edit-externally-help' => 'Jeeagh er [//www.mediawiki.org/wiki/Manual:External_editors saraghyn soiaghey seose] son tooilley oayllys.',
+'edit-externally-help' => 'Jeeagh er [https://www.mediawiki.org/wiki/Manual:External_editors saraghyn soiaghey seose] son tooilley oayllys.',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'yn clane',
index 32f816e..c0dc165 100644 (file)
@@ -898,7 +898,6 @@ Liá-chhṳ chhà-fûng he yù $1 só fûng ke. Tông-chûng ke ngièn-yîn he '
 'preferences' => '偏好設定',
 'mypreferences' => '偏好設定',
 'prefsnologin' => '還吂登入',
-'prefsnologintext' => 'Ngì pit-sî chhai-siên [[Special:UserLogin|tên-ngi̍p]] chhòi-nèn sat-chṳ ke-ngìn chhâm-su.',
 'changepassword' => '更改密碼',
 'prefs-skin' => '外皮',
 'skin-preview' => '預覽',
@@ -1644,7 +1643,7 @@ chhiáng chhai hàng-thung chṳ̂-chhièn siên liáu-kié khì-thâ khó-nèn
 'allmessagesdefault' => '默認信息文字',
 'allmessagescurrent' => 'Tông-chhièn ke vùn-sṳ',
 'allmessagestext' => 'Liá-piên lie̍t-chhut só-yû hí-khó thin-chṳ ke ne-thúng kie-mien.
-Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
+Please visit [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
 'allmessagesnotsupportedDB' => 'Ne-thúng kie-mien kûng-yung chhu-yî kôan-pit chong-thai (wgUseDatabaseMessages)。',
 
 # Thumbnails
@@ -1853,7 +1852,7 @@ Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and
 
 # External editor support
 'edit-externally' => '用外部應用程序編寫本文件',
-'edit-externally-help' => '(請參詳[//www.mediawiki.org/wiki/Manual:External_editors 設定步驟]了解詳細資訊)',
+'edit-externally-help' => '(請參詳[https://www.mediawiki.org/wiki/Manual:External_editors 設定步驟]了解詳細資訊)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => '全部',
index b0084fa..02a781d 100644 (file)
@@ -816,7 +816,7 @@ Hiki iā ʻoe ke ʻikena i kāna molekumu.',
 'ilsubmit' => 'Huli',
 
 # External editor support
-'edit-externally-help' => '(E ʻike i nā [//www.mediawiki.org/wiki/Manual:External_editors aʻo palapala no ka hoʻokuene ʻana])',
+'edit-externally-help' => '(E ʻike i nā [https://www.mediawiki.org/wiki/Manual:External_editors aʻo palapala no ka hoʻokuene ʻana])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'apau',
index a617a02..e4957e7 100644 (file)
@@ -689,7 +689,7 @@ $1',
 'nosuchspecialpage' => 'אין דף מיוחד בשם זה',
 'nospecialpagetext' => '<strong>ביקשתם דף מיוחד שאינו קיים.</strong>
 
-ר×\90×\95 ×\92×\9d ×\90ת [[Special:SpecialPages|רש×\99×\9eת ×\94×\93פ×\99×\9d ×\94×\9e×\99×\95×\97×\93×\99×\9d ×\94תק×\99× ×\99×\9d]].',
+ראו את [[Special:SpecialPages|רשימת הדפים המיוחדים התקינים]].',
 
 # General errors
 'error' => 'שגיאה',
@@ -773,7 +773,8 @@ $2',
 'invalidtitle-knownnamespace' => 'כותרת בלתי־תקינה עם מרחב השם "$2" ושם דף "$3"',
 'invalidtitle-unknownnamespace' => 'כותרת בלתי־תקינה עם מרחב שם בלתי־ידוע מספר $1 ושם דף "$2"',
 'exception-nologin' => 'לא בחשבון',
-'exception-nologin-text' => 'כדי לראות את הדף הזה או לבצע את הפעולה הזאת צריך להיכנס לחשבון באתר הוויקי הזה.',
+'exception-nologin-text' => 'אנא [[Special:Userlogin|היכנסו לחשבון]] כדי לראות את הדף הזה או לבצע את הפעולה הזו.',
+'exception-nologin-text-manual' => 'אנא $1 כדי לראות את הדף הזה או לבצע את הפעולה הזו.',
 
 # Virus scanner
 'virus-badscanner' => "הגדרות שגויות: סורק הווירוסים אינו ידוע: ''$1''",
@@ -786,7 +787,7 @@ $2',
 שימו לב כי ייתכן שדפים אחדים ימשיכו להיות מוצגים כאילו אתם עדיין מחוברים לחשבון עד שתנקו את המטמון של הדפדפן שלכם.",
 'welcomeuser' => 'ברוך בואך, $1!',
 'welcomecreation-msg' => 'חשבונך נוצר.
 ×\90 ×\9c×\90 ×\9cש×\9b×\95×\97 ×\9c×\94ת×\90×\99×\9d ×\90ת [[Special:Preferences|×\94×¢×\93פ×\95ת ×\94×\9eשת×\9eש]] שלך ב{{grammar:תחילית|{{SITENAME}}}}.',
\91×\90פשר×\95ת×\9a ×\9c×\94ת×\90×\99×\9d ×\90ת [[Special:Preferences|×\94×\94×¢×\93פ×\95ת]] שלך ב{{grammar:תחילית|{{SITENAME}}}}.',
 'yourname' => 'שם משתמש:',
 'userlogin-yourname' => 'שם משתמש',
 'userlogin-yourname-ph' => 'יש להקליד את שם המשתמש',
@@ -1021,7 +1022,7 @@ $2
 'headline_sample' => 'כותרת',
 'headline_tip' => 'כותרת – דרגה 2',
 'nowiki_sample' => 'טקסט לא מעוצב',
-'nowiki_tip' => '×\98קס×\98 ×\9c×\90 ×\9e×¢×\95צ×\91 (×\94תע×\9c×\9d ×\9eס×\99×\9e× ×\99 ×\95×\99ק×\99)',
+'nowiki_tip' => '×\94תע×\9c×\9e×\95ת ×\9e×¢×\99צ×\95×\91 ×\95×\99ק×\99',
 'image_tip' => 'קובץ המוצג בתוך הדף',
 'media_tip' => 'קישור לקובץ מדיה',
 'sig_tip' => 'חתימה + שעה',
@@ -1332,7 +1333,7 @@ $2
 'revdelete-suppress-text' => "יש להשתמש בהסתרה מלאה '''אך ורק''' במקרים הבאים:
 * מידע שעלול להיות לשון הרע
 * חשיפת מידע אישי
-*: '''×\9bת×\95×\91×\95ת ×\91ת×\99×\9d ×\95×\9eספר×\99 ×\98×\9cפ×\95×\9f, ×\9eספר×\99 ×\91×\99×\98×\95×\97 ×\9c×\90×\95×\9e×\99, וכדומה'''",
+*: '''×\9bת×\95×\91×\95ת ×\91ת×\99×\9d ×\95×\9eספר×\99 ×\98×\9cפ×\95×\9f, ×\9eספר×\99 ×\96×\99×\94×\95×\99 ×\9e×\93×\99נת×\99×\99×\9d, וכדומה'''",
 'revdelete-legend' => 'הגדרת הגבלות התצוגה',
 'revdelete-hide-text' => 'תוכן הגרסה',
 'revdelete-hide-image' => 'הסתרת תוכן הקובץ',
@@ -1341,8 +1342,8 @@ $2
 'revdelete-hide-user' => 'שם המשתמש או כתובת ה־IP של העורך',
 'revdelete-hide-restricted' => 'הסתרת המידע גם ממפעילי המערכת',
 'revdelete-radio-same' => '(ללא שינוי)',
-'revdelete-radio-set' => '×\92×\9c×\95×\99',
-'revdelete-radio-unset' => '×\9e×\95סתר',
+'revdelete-radio-set' => '×\9e×\95סתר',
+'revdelete-radio-unset' => '×\92×\9c×\95×\99',
 'revdelete-suppress' => 'הסתרת המידע גם ממפעילי המערכת',
 'revdelete-unsuppress' => 'הסרת הגבלות בגרסאות המשוחזרות',
 'revdelete-log' => 'סיבה:',
@@ -1501,7 +1502,7 @@ $1",
 'mypreferences' => 'העדפות',
 'prefs-edits' => 'מספר עריכות:',
 'prefsnologin' => 'לא נכנסת לחשבון',
-'prefsnologintext' => 'עליכם <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} להיכנס לחשבון]</span> כדי לשנות העדפות משתמש.',
+'prefsnologintext2' => 'אנא $1 כדי לשנות העדפות משתמש.',
 'changepassword' => 'שינוי סיסמה',
 'prefs-skin' => 'עיצוב',
 'skin-preview' => 'תצוגה מקדימה',
@@ -1590,9 +1591,9 @@ $1",
 'gender-unknown' => 'איני רוצה לומר',
 'gender-male' => 'הוא עורך דפים בוויקי',
 'gender-female' => 'היא עורכת דפים בוויקי',
-'prefs-help-gender' => '×\90×\99×\9f ×\97×\95×\91×\94 ×\9c×\9e×\9c×\90 ×\90ת ×\94×\94×¢×\93פ×\94 ×\94×\96×\90ת.
\94ת×\9b× ×\94 ×\9eשת×\9eשת ×\91×\9e×\99×\93×¢ ×\94×\96×\94 ×\9b×\93×\99 ×\9cפנ×\95ת ×\90×\9c×\99×\9a ×\90×\95 ×\90×\9c×\99×\99×\9a ×\95×\9c×\94×\96×\9b×\99ר ×\90×\95ת×\9a ×\9c×\90×\97ר×\99×\9d במין הדקדוקי הנכון.
\94×\9e×\99×\93×¢ ×\94×\96×\94 ×\99×\94×\99×\94 ×¦×\99×\91×\95ר×\99.',
+'prefs-help-gender' => '×\90×\99×\9f ×\97×\95×\91×\94 ×\9c×\9e×\9c×\90 ×\94×¢×\93פ×\94 ×\96×\95.
\94×\9eער×\9bת ×\9eשת×\9eשת ×\91×\9e×\99×\93×¢ ×\96×\94 ×\9b×\93×\99 ×\9cפנ×\95ת ×\90×\9c×\99×\9a\90×\9c×\99×\99×\9a ×\95×\9cצ×\99×\99×\9f ×\90ת ×©×\9d ×\94×\9eשת×\9eש ×©×\9c×\9a במין הדקדוקי הנכון.
+המידע יהיה ציבורי.',
 'email' => 'דוא"ל',
 'prefs-help-realname' => 'השם האמיתי הוא אופציונאלי.
 אם תבחרו לספקו, הוא ישמש לייחוס עבודתכם אליכם.',
@@ -2538,9 +2539,9 @@ $PAGEINTRO $NEWPAGE
 בדואר האלקטרוני: $PAGEEDITOR_EMAIL
 באתר: $PAGEEDITOR_WIKI
 
-לא תהיינה הודעות על פעולות נוספות עד שתבקרו בדף. באפשרותכם גם לאפס את דגלי ההודעות בכל הדפים שברשימת המעקב.
+לא תהיינה הודעות על פעולות נוספות עד שתבקרו בדף כשאתם מחוברים לחשבון. באפשרותכם גם לאפס את דגלי ההודעות בכל הדפים שברשימת המעקב.
 
-             מערכת ההודעות של {{SITENAME}}
+מערכת ההודעות של {{SITENAME}}
 
 --
 כדי לשנות את ההגדרות של הודעות הדוא"ל הנשלחות אליכם, בקרו בדף
@@ -3284,6 +3285,7 @@ $2',
 'pageinfo-length' => 'אורך הדף (בבתים)',
 'pageinfo-article-id' => 'מזהה הדף',
 'pageinfo-language' => 'שפת התוכן של הדף',
+'pageinfo-content-model' => 'סוג התוכן של הדף',
 'pageinfo-robot-policy' => 'איסוף על ידי רובוטים של מנועי חיפוש',
 'pageinfo-robot-index' => 'מותר',
 'pageinfo-robot-noindex' => 'אסור',
@@ -3370,7 +3372,7 @@ $1',
 'svg-long-desc' => 'קובץ SVG, הגודל המקורי: <span dir="ltr">$1 × $2</span> פיקסלים, גודל הקובץ: $3',
 'svg-long-desc-animated' => 'קובץ SVG מונפש, הגודל המקורי: <span dir="ltr">$1 × $2</span> פיקסלים, גודל הקובץ: $3',
 'svg-long-error' => 'קובץ SVG לא תקין: $1',
-'show-big-image' => 'ת×\9e×\95× ×\94 ×\91ר×\96×\95×\9c×\95צ×\99×\94 ×\92×\91×\95×\94×\94 ×\99×\95תר',
+'show-big-image' => '×\9cק×\95×\91×¥ ×\94×\9eק×\95ר×\99',
 'show-big-image-preview' => 'גודל תצוגה זו: $1.',
 'show-big-image-other' => '{{PLURAL:$2|רזולוציה אחרת|רזולוציות אחרות}}: $1.',
 'show-big-image-size' => '<span dir="ltr">$1 × $2</span> פיקסלים',
@@ -3635,6 +3637,10 @@ $1',
 'exif-compression-2' => 'קידוד הופמן מואתם חד-מימדי לאורך ריצה CCITT קבוצה 3',
 'exif-compression-3' => 'קידוד פקס CCITT קבוצה 3',
 'exif-compression-4' => 'קידוד פקס CCITT קבוצה 4',
+'exif-compression-6' => 'JPEG (ישן)',
+'exif-compression-8' => 'Deflate (של Adobe)',
+'exif-compression-32773' => 'PackBits (של Macintosh RLE)',
+'exif-compression-32946' => 'Deflate (של PKZIP)',
 
 'exif-copyrighted-true' => 'מוגן בזכויות יוצרים',
 'exif-copyrighted-false' => 'מצב זכויות היוצרים לא הוגדר',
@@ -3818,6 +3824,8 @@ $1',
 
 'exif-isospeedratings-overflow' => 'מעל 65535',
 
+'exif-maxaperturevalue-value' => '$1 APEX (יחידות: f/$2)',
+
 'exif-iimcategory-ace' => 'אמנויות, תרבות ובידור',
 'exif-iimcategory-clj' => 'פשע ומשפט',
 'exif-iimcategory-dis' => 'אסונות ותאונות',
@@ -3843,7 +3851,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'עריכת קובץ זה באמצעות יישום חיצוני',
-'edit-externally-help' => '(ראו את [//www.mediawiki.org/wiki/Manual:External_editors הוראות ההתקנה] למידע נוסף)',
+'edit-externally-help' => '(ראו את [https://www.mediawiki.org/wiki/Manual:External_editors הוראות ההתקנה] למידע נוסף)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'הכול',
@@ -4089,7 +4097,7 @@ $5
 'version-hook-subscribedby' => 'הפונקציה הרושמת',
 'version-version' => '(גרסה $1)',
 'version-license' => 'רישיון',
-'version-poweredby-credits' => "אתר הוויקי הזה מופעל על ידי '''[//www.mediawiki.org/ מדיה־ויקי]''', © 2001–$1 $2.",
+'version-poweredby-credits' => "אתר הוויקי הזה מופעל על ידי '''[https://www.mediawiki.org/ מדיה־ויקי]''', © 2001–$1 $2.",
 'version-poweredby-others' => 'אחרים',
 'version-poweredby-translators' => 'מתרגמי translatewiki.net',
 'version-credits-summary' => 'אנו רוצים להודות לאנשים הבאים על תרומתם ל[[Special:Version|מדיה־ויקי]].',
@@ -4130,8 +4138,8 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'דפים מיוחדים',
-'specialpages-note' => '----
-* דפים מיוחדים רגילים.
+'specialpages-note-top' => 'מקרא',
+'specialpages-note' => '* דפים מיוחדים רגילים.
 * <span class="mw-specialpagerestricted">דפים מיוחדים מוגבלים.</span>',
 'specialpages-group-maintenance' => 'דיווחי תחזוקה',
 'specialpages-group-other' => 'דפים מיוחדים אחרים',
index 9787c39..9acbedc 100644 (file)
@@ -1332,7 +1332,6 @@ $1",
 'mypreferences' => 'पसंद',
 'prefs-edits' => 'संपादन संख्या:',
 'prefsnologin' => 'लॉग इन नहीं किया है',
-'prefsnologintext' => 'वरीयताएँ बदलने के लिए आपको <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} सत्रारंभ]</span> करना होगा।',
 'changepassword' => 'कूटशब्द बदलें',
 'prefs-skin' => 'त्वचा',
 'skin-preview' => 'झलक',
@@ -2891,7 +2890,7 @@ $1 को बाध्य करने का कारण है: "$2"',
 'allmessagesname' => 'नाम',
 'allmessagesdefault' => 'डिफॉल्ट पाठ',
 'allmessagescurrent' => 'वर्तमान पाठ',
-'allmessagestext' => 'ये मीडियाविकि नामस्थान में उपलब्ध प्रणाली संदेशों की एक सूची है। यदि आप सामान्य मीडियाविकि क्षेत्रीयकरण में योगदान देना चाहें तो कृपया [//www.mediawiki.org/wiki/Localisation मीडियाविकि क्षेत्रीयकरण] व [//translatewiki.net translatewiki.net] को देखें।',
+'allmessagestext' => 'ये मीडियाविकि नामस्थान में उपलब्ध प्रणाली संदेशों की एक सूची है। यदि आप सामान्य मीडियाविकि क्षेत्रीयकरण में योगदान देना चाहें तो कृपया [https://www.mediawiki.org/wiki/Localisation मीडियाविकि क्षेत्रीयकरण] व [//translatewiki.net translatewiki.net] को देखें।',
 'allmessagesnotsupportedDB' => "इस पृष्ठ का इस्तेमाल नहीं कर सकते क्योंकी '''\$wgUseDatabaseMessages''' बंद हैं।",
 'allmessages-filter-legend' => 'छानें',
 'allmessages-filter' => 'अनुकूलन स्थिति के आधार पर छानें:',
@@ -3642,7 +3641,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'बाहरी प्रणाली का उपयोग करते हुए इस सञ्चिका को सम्पादित करें ।',
-'edit-externally-help' => '(और जानकारी के लिए [//www.mediawiki.org/wiki/Manual:External_editors जमाव निर्देश] देखें)',
+'edit-externally-help' => '(और जानकारी के लिए [https://www.mediawiki.org/wiki/Manual:External_editors जमाव निर्देश] देखें)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'सभी',
@@ -3879,7 +3878,7 @@ $5
 'version-hook-subscribedby' => 'ने सदस्यत्व लिया',
 'version-version' => '(अवतरण $1)',
 'version-license' => 'अनुज्ञापत्र',
-'version-poweredby-credits' => "यह विकि  '''[//www.mediawiki.org/ MediaWiki]''' द्वारा संचालित है, कॉपीराइट © 2001 - $1  $2 ।",
+'version-poweredby-credits' => "यह विकि  '''[https://www.mediawiki.org/ MediaWiki]''' द्वारा संचालित है, कॉपीराइट © 2001 - $1  $2 ।",
 'version-poweredby-others' => 'अन्य',
 'version-software' => 'इन्स्टॉल की हुई प्रणाली',
 'version-software-product' => 'प्रोडक्ट',
@@ -3904,8 +3903,7 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'विशेष पृष्ठ',
-'specialpages-note' => '----
-* साधारण विशेष पृष्ठ।
+'specialpages-note' => '* साधारण विशेष पृष्ठ।
 * <span class="mw-specialpagerestricted">प्रतिबंधित विशेष पृष्ठ।</span>',
 'specialpages-group-maintenance' => 'अनुरक्षण रिपोर्ट',
 'specialpages-group-other' => 'अन्य विशेष पृष्ठ',
index ac292cb..39719d2 100644 (file)
@@ -1170,7 +1170,6 @@ Yaad rakhna ki uu log ke {{SITENAME}} ke index saait purana hoi.',
 'mypreferences' => 'Pasand',
 'prefs-edits' => 'Badlao ke number:',
 'prefsnologin' => 'Aap abhi logged in nai hai',
-'prefsnologintext' => 'Aaap ke <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} logged in]</span> chaahi rahe ke user preferences ke badle ke khatir.',
 'changepassword' => 'Pasword ke badlo',
 'prefs-skin' => 'Skin',
 'skin-preview' => 'Jhalak',
@@ -2714,7 +2713,7 @@ Duusra case me aap ek link ke bhi use kare saktaa hai, jaise ki [[{{#Special:Exp
 'allmessagesdefault' => 'Default text',
 'allmessagescurrent' => 'Abhi ke text',
 'allmessagestext' => 'Ii ek system sandes ke suchi hai jon ki MediaWiki namespace me pawa jaae sake hai.
-Agar aap generic MediaWiki localisation ke yogdaan de mangtaa hai tab meharbani kar ke [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] aur [//translatewiki.net translatewiki.net]  pe jao.',
+Agar aap generic MediaWiki localisation ke yogdaan de mangtaa hai tab meharbani kar ke [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] aur [//translatewiki.net translatewiki.net]  pe jao.',
 'allmessagesnotsupportedDB' => "Ii panna ke kaam me nai lawa jaae sake hai kahe ki '''\$wgUseDatabaseMessages''' ke band kar dewa gais hai.",
 'allmessages-filter-legend' => 'Chaalo',
 'allmessages-filter' => 'Customisation state se chhaano',
@@ -3464,7 +3463,7 @@ Wahii line pe aur koi jorr exception consider karaa jai i.e. jahaan pe panna sak
 
 # External editor support
 'edit-externally' => 'Ii file ke bahaari program me kaam me laae ke badlo',
-'edit-externally-help' => '(Aur jaankari khatir [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] ke dekho)',
+'edit-externally-help' => '(Aur jaankari khatir [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] ke dekho)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'sab',
index 1c611e3..7cefd04 100644 (file)
@@ -1095,7 +1095,6 @@ Tandai nga ang ila nga palasulundan sang mga unod sang {{SITENAME}} mahimo nga m
 'mypreferences' => 'Mga Ginabasehan',
 'prefs-edits' => 'Numero sang mga gin-ilisan:',
 'prefsnologin' => 'Wala naka-sulod',
-'prefsnologintext' => 'Kinahanglan nga ikaw <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} nakasulod]</span> agod nga mabuhat ang pag-ilis sang mga ginapalabi.',
 'changepassword' => 'Ilisan ang pasword',
 'prefs-skin' => 'Panit',
 'skin-preview' => 'Ipakita subong',
@@ -1240,7 +1239,7 @@ Ang imo adres sang e-mail wala ginapakita kon kontakon ka sang iban.',
 'group-all' => '(tanan)',
 
 'group-user-member' => '{{GENDER:$1|naga-usar}}',
-'group-autoconfirmed-member' => '{GENDER:$1|naga-usar nga awtomatikong nakompirma}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|naga-usar nga awtomatikong nakompirma}}',
 'group-bot-member' => '{{GENDER:$1|bot}}',
 'group-sysop-member' => '{{GENDER:$1|tagdumala}}',
 'group-bureaucrat-member' => '{{GENDER:$1|byurokratiko}}',
@@ -1417,7 +1416,7 @@ Mga Pahina sa [[Special:Watchlist|imo lista-lantaw]] ay '''dukot'''.",
 'upload-recreate-warning' => "'''Abiso: Ang isa ka file nga amo ang iya ngalan ginpanas na ukon ginsaylo'''
 
 Ang log sang pagpanas kag pagsaylo para sa sini nga panid ginahatag diri para sa imo nga kombinyensya.",
-'uploadtext' => "Usaron ang porma sa idalum para makakarga sang mga file. Para matan-aw ukon mapangita ang mga file nga ginkarga na, kadto sa:[Special:FileList|lista sang mga files nga ginkarga]], ang mga ginkarga liwat nakalista sa: [[Special:Log/upload|lista sang mga ginkarga]], ang mga ginpanas [[Special:Log/delete|lista sang mga ginpanas]].
+'uploadtext' => "Usaron ang porma sa idalum para makakarga sang mga file. Para matan-aw ukon mapangita ang mga file nga ginkarga na, kadto sa:[[Special:FileList|lista sang mga files nga ginkarga]], ang mga ginkarga liwat nakalista sa: [[Special:Log/upload|lista sang mga ginkarga]], ang mga ginpanas [[Special:Log/delete|lista sang mga ginpanas]].
 
 Para maupod ang isa ka file sa isa ka panid, usaron ang sini nga sugpon sa mga masunod nga mga porma:
 * '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' para mausar ang bilog nga bersyon sang file
@@ -1884,7 +1883,7 @@ Ang iban ay pagataguon sang default.
 
 # External editor support
 'edit-externally' => 'Islan ini nga file gamit ang eksternal nga aplikasyon',
-'edit-externally-help' => '(Lantawa ang [//www.mediawiki.org/wiki/Manual:External_editors tudlo sa pag panugod] para sa mga dugang nga impormasyon)',
+'edit-externally-help' => '(Lantawa ang [https://www.mediawiki.org/wiki/Manual:External_editors tudlo sa pag panugod] para sa mga dugang nga impormasyon)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tanan',
index 8fb7446..535dbc7 100644 (file)
@@ -762,8 +762,10 @@ Ne zaboravite prilagoditi Vaše [[Special:Preferences|{{SITENAME}} postavke]].',
 'gotaccount' => "Već imate suradnički račun? '''$1'''.",
 'gotaccountlink' => 'Prijavite se',
 'userlogin-resetlink' => 'Zaboravili ste detalje vaše prijave?',
-'userlogin-resetpassword-link' => 'Ponovno postavi zaporku',
+'userlogin-resetpassword-link' => 'Zaboravili ste zaporku?',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Pomoć pri prijavi]]',
+'userlogin-loggedin' => 'Već ste prijavljeni kao {{GENDER:$1|$1}}.
+Rabite donji obrazac da biste se prijavili kao drugi suradnik.',
 'userlogin-createanother' => 'Stvori još jedan račun',
 'createacct-join' => 'Upišite ispod svoje podatke.',
 'createacct-another-join' => 'Upišite dolje podatke o novom računu.',
@@ -822,16 +824,16 @@ koristiti staru lozinku.',
 'noemailcreate' => 'Morate navesti važeću e-mail adresu',
 'passwordsent' => 'Nova je lozinka poslana na e-mail adresu suradnika "$1"',
 'blocked-mailpassword' => 'Vašoj IP adresi je blokirano uređivanje stranica, a da bi se spriječila nedopuštena radnja, mogućnost zahtijevanja nove lozinke je također onemogućena.',
-'eauthentsent' => 'Na navedenu adresu poslan je e-mail s potvrdom.
-Prije nego što pošaljemo daljnje poruke, molimo Vas da otvorite e-mail i slijedite u njemu sadržana uputstva kako biste potvrdili da je e-mail adresa zaista Vaša.',
+'eauthentsent' => 'Na navedenu adresu poslana je e-poruka s potvrdom.
+Prije nego što pošaljemo daljnje poruke, molimo Vas otvorite e-poruku i slijedite u njemu sadržana uputstva kako biste potvrdili da je adresa e-pošte zaista Vaša.',
 'throttled-mailpassword' => 'Već Vam je poslan e-mail za promjenu zaporke, u {{PLURAL:$1|zadnjih sat vremena|zadnja $1 sata|zadnjih $1 sati}}.
 Da bi spriječili zloupotrebu, moguće je poslati samo jedan e-mail za promjenu zaporke {{PLURAL:$1|svakih sat vremena|svaka $1 sata|svakih $1 sati}}.',
 'mailerror' => 'Pogrješka pri slanju e-pošte: $1',
 'acct_creation_throttle_hit' => 'Posjetitelji ovog wikija koji rabe Vašu IP adresu napravili su {{PLURAL:$1|1 račun|$1 računa}} u posljednjem danu, što je najveći dopušteni broj u tom vremenskom razdoblju.
 Zbog toga posjetitelji s ove IP adrese trenutačno ne mogu otvoriti nove suradničke račune.',
-'emailauthenticated' => 'vaša e-mail adresa je ovjerena $2 u $3.',
-'emailnotauthenticated' => 'Vaša e-mail adresa još nije ovjerena.
-Ne možemo poslati e-mail ni u jednoj od sljedećih naredbi.',
+'emailauthenticated' => 'Vaša adresa e-pošte potvrđena je $2 u $3.',
+'emailnotauthenticated' => 'Vaša adresa e-pošte još nije potvrđena.
+Ne možemo poslati e-poruku ni u jednoj od sljedećih naredbi.',
 'noemailprefs' => 'Nije navedena adresa elektroničke pošte, stoga sljedeće naredbe ne će raditi.',
 'emailconfirmlink' => 'Potvrdite svoju e-mail adresu',
 'invalidemailaddress' => 'Ne mogu prihvatiti e-mail adresu jer nije valjano oblikovana.
@@ -850,6 +852,8 @@ Molimo Vas pričekajte $1 prije nego što pokušate ponovno.',
 'login-abort-generic' => 'Vaša prijava bila je neuspješna - Prekinuto',
 'loginlanguagelabel' => 'Jezik: $1',
 'suspicious-userlogout' => 'Vaš zahtjev za odjavu je odbijen jer to izgleda kao da je poslan preko pokvarenog preglednika ili keširanog posrednika (proxyja).',
+'createacct-another-realname-tip' => 'Pravo ime nije obvezno. 
+Ako ga navedete, bit će korišteno za pripisivanje Vaših doprinosa.',
 
 # Email sending
 'php-mail-error-unknown' => 'Nepoznata pogrješka u funkciji PHP-poruke()',
@@ -877,6 +881,7 @@ Možda ste već uspješno promijenili Vašu lozinku ili ste zatražili novu priv
 # Special:PasswordReset
 'passwordreset' => 'Ponovno postavi lozinku',
 'passwordreset-text-one' => 'Ispunite ovaj obrazac ako želite ponovno postaviti Vašu zaporku.',
+'passwordreset-text-many' => '{{PLURAL:$1|Ispunite jedno od polja za ponovno postavljanje Vaše zaporke.}}',
 'passwordreset-legend' => 'Poništi lozinku',
 'passwordreset-disabled' => 'Poništavanje lozinke je onemogućeno na ovom wikiju.',
 'passwordreset-emaildisabled' => 'Funkcija e-pošte je onemogućena na ovom wikiju.',
@@ -1406,7 +1411,6 @@ Više informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{F
 'mypreferences' => 'Moje postavke',
 'prefs-edits' => 'Broj uređivanja:',
 'prefsnologin' => 'Niste prijavljeni',
-'prefsnologintext' => 'Morate biti <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} prijavljeni]</span> za podešavanje suradničkih postavki.',
 'changepassword' => 'Promjena lozinke',
 'prefs-skin' => 'Izgled',
 'skin-preview' => 'Pregled',
@@ -2899,7 +2903,7 @@ U potonjem slučaju možete rabiti i poveznicu, npr. [[{{#Special:Export}}/{{Med
 'allmessagesname' => 'Ime',
 'allmessagesdefault' => 'Prvotni tekst',
 'allmessagescurrent' => 'Trenutačni tekst',
-'allmessagestext' => 'Ovo je popis svih sistemskih poruka u imenskom prostoru MediaWiki. Molimo posjetite [//www.mediawiki.org/wiki/Localisation lokalizaciju MediaWikija] i [//translatewiki.net translatewiki.net] ako želite doprinijeti lokalizaciji MediaWiki softvera.',
+'allmessagestext' => 'Ovo je popis svih sistemskih poruka u imenskom prostoru MediaWiki. Molimo posjetite [https://www.mediawiki.org/wiki/Localisation lokalizaciju MediaWikija] i [//translatewiki.net translatewiki.net] ako želite doprinijeti lokalizaciji MediaWiki softvera.',
 'allmessagesnotsupportedDB' => "Ova stranica ne može biti korištena jer je isključen parametar '''\$wgUseDatabaseMessages'''.",
 'allmessages-filter-legend' => 'Filtriraj',
 'allmessages-filter' => 'Filtriraj prema prilagođenom obliku:',
@@ -3650,7 +3654,7 @@ Svaka sljedeća poveznica u istom retku je izuzetak, npr. kod stranica gdje se s
 
 # External editor support
 'edit-externally' => 'Uredi koristeći se vanjskom aplikacijom',
-'edit-externally-help' => '(Vidi [//www.mediawiki.org/wiki/Manual:External_editors setup upute] za više informacija)',
+'edit-externally-help' => '(Vidi [https://www.mediawiki.org/wiki/Manual:External_editors setup upute] za više informacija)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'sve',
@@ -3890,9 +3894,9 @@ Također možete koristiti [[Special:EditWatchlist|standardni editor]].',
 'version-hook-subscribedby' => 'Pretplaćeno od',
 'version-version' => '(Inačica $1)',
 'version-license' => 'Licencija',
-'version-poweredby-credits' => "Ovaj wiki pogoni '''[//www.mediawiki.org/ MediaWiki]''', autorska prava © 2001-$1 $2.",
+'version-poweredby-credits' => "Ovaj wiki pogoni '''[https://www.mediawiki.org/ MediaWiki]''', autorska prava © 2001-$1 $2.",
 'version-poweredby-others' => 'ostali',
-'version-credits-summary' => 'Željeli bismo se zahvaliti sljedećim suradnicima na njihovom doprinosu [[Special:Version|MediaWikiju]].',
+'version-credits-summary' => 'Željeli bismo zahvaliti sljedećim suradnicima na njihovom doprinosu [[Special:Version|MediaWikiju]].',
 'version-license-info' => 'MediaWiki je slobodni softver; možete ga distribuirati i/ili mijenjati pod uvjetima GNU opće javne licencije u obliku u kojem ju je objavila Free Software Foundation; bilo verzije 2 licencije, ili (Vama na izbor) bilo koje kasnije verzije.
 
 MediaWiki je distribuiran u nadi da će biti koristan, no BEZ IKAKVOG JAMSTVA; čak i bez impliciranog jamstva MOGUĆNOSTI PRODAJE ili PRIKLADNOSTI ZA ODREĐENU NAMJENU. Pogledajte GNU opću javnu licenciju za više detalja.
@@ -3924,8 +3928,7 @@ Trebali ste primiti [{{SERVER}}{{SCRIPTPATH}}/COPYING kopiju GNU opće javne lic
 
 # Special:SpecialPages
 'specialpages' => 'Posebne stranice',
-'specialpages-note' => '----
-* Normalne posebne stranice
+'specialpages-note' => '* Normalne posebne stranice
 * <span class="mw-specialpagerestricted">Posebne stranice s ograničenim pristupom.</span>',
 'specialpages-group-maintenance' => 'Izvještaji za održavanje',
 'specialpages-group-other' => 'Ostale posebne stranice',
index 42eeeb5..dce4671 100644 (file)
@@ -162,12 +162,12 @@ $messages = array(
 'tog-hidepatrolled' => 'Dohladawane změny w aktualnych změnach schować',
 'tog-newpageshidepatrolled' => 'Dohladowane strony z lisćiny nowych stronow schować',
 'tog-extendwatchlist' => 'Lisćinu wobkedźbowankow wočinić, zo by wšě změny widźał, nic jenož najnowše',
-'tog-usenewrc' => 'Skupinske změny po stronje w aktualnych změnach a wobkedźbowankach (trjeba JavaScript)',
+'tog-usenewrc' => 'Změny po stronje w aktualnych změnach a wobkedźbowankach zeskupjeć',
 'tog-numberheadings' => 'Nadpisma awtomatisce čisłować',
-'tog-showtoolbar' => 'Gratowu lajstu pokazać (wužaduje sej JavaScript)',
-'tog-editondblclick' => 'Strony z dwójnym kliknjenjom wobdźěłować (wužaduje sej JavaScript)',
+'tog-showtoolbar' => 'Wobdźěłowansku lajstu pokazać',
+'tog-editondblclick' => 'Strony z dwójnym kliknjenjom wobdźěłować',
 'tog-editsection' => 'Wobdźěłowanje jednotliwych wotrězkow přez wotkazy [wobdźěłać] zmóžnić',
-'tog-editsectiononrightclick' => 'Wobdźěłowanje jednotliwych wotrězkow přez kliknjenje z prawej tastu na nadpisma wotrězkow zmóžnić (wužaduje sej JavaScript)',
+'tog-editsectiononrightclick' => 'Wobdźěłowanje wotrězkow přez kliknjenje z prawej tastu na nadpisma wotrězkow zmóžnić',
 'tog-showtoc' => 'Zapis wobsaha pokazać (za strony z wjace hač 3 nadpismami)',
 'tog-rememberpassword' => 'Přizjewjenje na tutym wobhladowaku sej spomjatkować (za maksimalnje $1 {{PLURAL:$1|dźeń|dnjej|dny|dnjow}})',
 'tog-watchcreations' => 'Strony, kotrež wutworjam a dataje, kotrež nahrawam, swojim wobkedźbowankam přidać',
@@ -185,7 +185,7 @@ $messages = array(
 'tog-shownumberswatching' => 'Ličbu wobkedźbowacych wužiwarjow pokazać',
 'tog-oldsig' => 'Eksistowaca signatura:',
 'tog-fancysig' => 'Ze signaturu kaž z wikitekstom wobchadźeć  (bjez awtomatiskeho wotkaza)',
-'tog-uselivepreview' => 'Live-přehlad wužiwać (wužaduje sej JavaScript) (eksperimentalny)',
+'tog-uselivepreview' => 'Live-přehlad wužiwać (eksperimentalny)',
 'tog-forceeditsummary' => 'Mje skedźbnić, jeli zabudu zjeće',
 'tog-watchlisthideown' => 'Moje změny we wobkedźbowankach schować',
 'tog-watchlisthidebots' => 'Změny awtomatiskich programow (botow) we wobkedźbowankach schować',
@@ -198,6 +198,7 @@ $messages = array(
 'tog-showhiddencats' => 'Schowane kategorije pokazać',
 'tog-norollbackdiff' => 'Rozdźěl po wróćostajenju zanjechać',
 'tog-useeditwarning' => 'Warnować, hdyž so wobdźěłowanska strona z njeskładowanymi změnami wopušća',
+'tog-prefershttps' => 'Po přizjewjenju přeco wěsty zwisk wužiwać',
 
 'underline-always' => 'Přeco',
 'underline-never' => 'Ženje',
@@ -298,7 +299,7 @@ $messages = array(
 'newwindow' => '(wočinja so w nowym woknje)',
 'cancel' => 'Přetorhnyć',
 'moredotdotdot' => 'Wjace…',
-'morenotlisted' => 'Dalše njepodate...',
+'morenotlisted' => 'Tuta lisćina dospołna njeje.',
 'mypage' => 'Strona',
 'mytalk' => 'Diskusija',
 'anontalk' => 'Diskusijna strona tuteje IP.adresy',
@@ -401,7 +402,7 @@ $1',
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
 'aboutsite' => 'Wo {{GRAMMAR:lokatiw|{{SITENAME}}}}',
 'aboutpage' => 'Project:Wo',
-'copyright' => 'Wobsah steji pod $1.',
+'copyright' => 'Wobsah pod $1 k dispoziciji steji, jeli njeje so hinak podało.',
 'copyrightpage' => '{{ns:project}}:Awtorske prawa',
 'currentevents' => 'Aktualne podawki',
 'currentevents-url' => 'Project:Aktualne podawki',
@@ -484,6 +485,9 @@ Płaćiwe specialne strony hodźa so pod [[Special:SpecialPages|lisćinu special
 # General errors
 'error' => 'Zmylk',
 'databaseerror' => 'Zmylk w datowej bance',
+'databaseerror-query' => 'Wotprašenje: $1',
+'databaseerror-function' => 'Funkcija: $1',
+'databaseerror-error' => 'Zmylk: $1',
 'laggedslavemode' => "'''Kedźbu:''' Je móžno, zo strona žane zaktualizowanja njewobsahuje.",
 'readonly' => 'Datowa banka je zawrjena',
 'enterlockreason' => 'Zapodaj přičinu za zawrjenje a přibližny čas, hdy budźe zawrjenje zběhnjene',
@@ -553,7 +557,8 @@ Administrator, kiž je jón zawrěł, je tule přičinu podał: "$3".',
 'invalidtitle-knownnamespace' => 'Njepłaćiwy titul z mjenowym rumom "$2" a tekstom "$3"',
 'invalidtitle-unknownnamespace' => 'Njepłaćiwy titul z njeznatym mjenowym rumom $1 a tekstom "$2"',
 'exception-nologin' => 'Njejsy přizjewjeny',
-'exception-nologin-text' => 'Tuta strona abo akcija sej wužaduje, zo sy na tutym wikiju přizjewjeny.',
+'exception-nologin-text' => 'Prošu [[Special:Userlogin|přizjew so]], zo by přistup na tutu stronu abo akciju měł.',
+'exception-nologin-text-manual' => 'Zo by přistup na tutu stronu abo akciju měł, dyrbiš so $1.',
 
 # Virus scanner
 'virus-badscanner' => "Špatna konfiguracija: Njeznaty wirusowy skener: ''$1''",
@@ -563,14 +568,14 @@ Administrator, kiž je jón zawrěł, je tule přičinu podał: "$3".',
 # Login and logout pages
 'logouttext' => "'''{{GENDER:|Sy|Sy}} nětko {{GENDER:|wotzjewjeny|wotzjewjena}}.'''
 
-Móžeš {{GRAMMAR:akuzatiw|{{SITENAME}}}} nětko anonymnje dale wužiwać abo so ze samsnym abo druhim wužiwarskim mjenom <span class='plainlinks'>[$1 zaso přizjewić]</span>.
-Wobkedźbuj, zo so někotre strony dale jewja, kaž by hišće přizjewjeny był, doniž pufrowak swojeho wobhladowaka njewuprózdnješ.",
+Kedźbu: Je móžno, zo někotre strony so snano takle pokazuja, kaž by ty hišće přizjewjeny był, doniž pufrowak twojeho wobhladowaka njewuprózdniš.",
 'welcomeuser' => 'Witaj $1',
 'welcomecreation-msg' => 'Twoje konto bu wutworjene.
 Njezabudź swoje [[Special:Preferences|nastajenja za {{GRAMMAR:akuzatiw|{{SITENAME}}}}]] změnić.',
 'yourname' => 'Wužiwarske mjeno:',
 'userlogin-yourname' => 'Wužiwarske mjeno',
 'userlogin-yourname-ph' => 'Zapodaj swoje wužiwarske mjeno',
+'createacct-another-username-ph' => 'Wužiwarske mjeno zapodać',
 'yourpassword' => 'Hesło:',
 'userlogin-yourpassword' => 'Hesło',
 'userlogin-yourpassword-ph' => 'Zapodaj swoje hesło',
@@ -600,14 +605,18 @@ Njezabudź swoje [[Special:Preferences|nastajenja za {{GRAMMAR:akuzatiw|{{SITENA
 'gotaccount' => 'Maš hižo wužiwarske konto? $1.',
 'gotaccountlink' => 'Přizjewić',
 'userlogin-resetlink' => 'Přizjewjenske daty zabył?',
-'userlogin-resetpassword-link' => 'Hesło anulować',
+'userlogin-resetpassword-link' => 'Sy swoje hesło zabył?',
 'helplogin-url' => 'Help:Přizjewić',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Pomoc za přizjewjenje]]',
+'userlogin-loggedin' => 'Sy hižo jako {{GENDER:$1|$1 přizjewjeny|$1 přizjewjena}}. Wužij slědowacy formular, zo by so jako druhi wužiwar přizjewił.',
+'userlogin-createanother' => 'Dalše konto załožić',
 'createacct-join' => 'Zapodaj deleka swoje informacije.',
+'createacct-another-join' => 'Zapodaj deleka informacije noweho konta.',
 'createacct-emailrequired' => 'E-mejlowa adresa',
 'createacct-emailoptional' => 'E-mejlowa adresa (opcionalny)',
 'createacct-email-ph' => 'Zapodaj swoju e-mejlowu adresu',
-'createaccountmail' => 'Nachwilne přidatne hesło wužiwać a jo na slědowacu e-mejlowu adresu pósłać',
+'createacct-another-email-ph' => 'E-mejlowu adresu zapodać',
+'createaccountmail' => 'Nachwilne připadne hesło wužiwać a jo na slědowacu e-mejlowu adresu pósłać',
 'createacct-realname' => 'Woprawdźite mjeno (opcionalny)',
 'createaccountreason' => 'Přičina:',
 'createacct-reason' => 'Přičina',
@@ -615,6 +624,7 @@ Njezabudź swoje [[Special:Preferences|nastajenja za {{GRAMMAR:akuzatiw|{{SITENA
 'createacct-captcha' => 'Wěstotna kontrola',
 'createacct-imgcaptcha-ph' => 'Zapodaj tekst, kotryž deleka widźiš',
 'createacct-submit' => 'Twoje konto załožić',
+'createacct-another-submit' => 'Dalše konto załožić',
 'createacct-benefit-heading' => '{{SITENAME}} je so wot ludźi kaž ty wutworił.',
 'createacct-benefit-body1' => '{{PLURAL:$1|změna|změnje|změny|změnow}}',
 'createacct-benefit-body2' => '{{PLURAL:$1|strona|stronje|strony|stronow}}',
@@ -655,12 +665,12 @@ Jeli něchtó druhi wo nowe hesło prosył abo ty sy so zaso na swoje hesło dop
 'passwordsent' => 'Nowe hesło bu na e-mejlowu adresu zregistrowanu za wužiwarja „$1” pósłane.
 Prošu přizjew so znowa, po tym zo sy je přijał.',
 'blocked-mailpassword' => 'Twoja IP-adresa je přećiwo wobdźěłowanju zablokowana, a tohodla njeje dowolene, funkciju za wobnowjenje hesłow wužiwać, zo by znjewužiwanju zadźěwało.',
-'eauthentsent' => 'Wobkrućenska e-mejlka bu na naspomnjenu e-mejlowu adresu pósłana.
-Prjedy hač so druha e-mejlka na konto pósćele, dyrbiš so po instrukcijach w e-mejlce měć, zo by wobkrućił, zo konto je woprawdźe twoje.',
+'eauthentsent' => 'Wobkrućenska e-mejlka je so na podatu e-mejlowu adresu pósłała.
+Prjedy hač so druha e-mejlka na konto pósćele, dyrbiš so po instrukcijach w e-mejlce měć, zo by wobkrućił, zo konto woprawdźe tebi słuša.',
 'throttled-mailpassword' => 'E-mejl za anulowanje hesło je so za {{PLURAL:$1|poslednju hodźinu|poslednjej $1 hodźinje|poslednje $1 hodźiny|poslednich $1 hodźin}} pósłała. Zo by znjewužiwanju zadźěwało, so jenož jedna e-mejl za anulowanje hesła na {{PLURAL:$1|hodźinu|$1 hodźinje|$1 hodźiny|$1 hodźin}} pósćele.',
 'mailerror' => 'Zmylk při słanju e-mejlki: $1',
 'acct_creation_throttle_hit' => 'Wopytowarjo tutoho wikija, kotřiž twoju IP-adresu wužiwaja, su {{PLURAL:$1|1 konto|$1 kontaj|$1 konty|$1 kontow}} posledni dźeń wutworił, štož je maksimalna ličba za tutu periodu. Wopytowarjo, kotřiž tutu IP-adresu wužiwaja, njemóža tuchwilu dalše konta wutworić.',
-'emailauthenticated' => 'Twoja e-mejlowa adresa bu $2 $3 hodź. wobkrućena.',
+'emailauthenticated' => 'Twoja e-mejlowa adresa je so $2 $3 hodź. wobkrućiła.',
 'emailnotauthenticated' => 'Twoja e-mejlowa adresa hišće wobkrućena njeje. Žana e-mejlka budźe so za slědowace funkcije słać.',
 'noemailprefs' => 'Podaj e-mejlowu adresu w swojich nastajenjach, zo bychu tute funkcije k dispoziciji stali.',
 'emailconfirmlink' => 'Swoju e-mejlowu wobkrućić',
@@ -674,7 +684,7 @@ Prjedy hač so druha e-mejlka na konto pósćele, dyrbiš so po instrukcijach w
 
 Móžeš tutu zdźělenku ignorować, jeli so wužiwarske konto zmylnje wutworiło.',
 'usernamehasherror' => 'Wužiwarske mjeno njesmě hašowe znamješka wpbsahować',
-'login-throttled' => 'Sy přehusto spytał so přizjewić. Počakaj prošu, prjedy hač znowa spytaš.',
+'login-throttled' => 'Sy přehusto spytał so přizjewić. Počakaj prošu $1, prjedy hač hišće raz spytaš.',
 'login-abort-generic' => 'Twoje přizjewjenje njebě wuspěšne - přetorhnjene',
 'loginlanguagelabel' => 'Rěč: $1',
 'suspicious-userlogout' => 'Twoje naprašowanje za wotzjewjenje bu wotpokazane, dokelž zda so, jako by so přez wobškodźeny wobhladowak abo pufrowacy proksy pósłało',
@@ -693,7 +703,7 @@ Móžeš tutu zdźělenku ignorować, jeli so wužiwarske konto zmylnje wutwori
 'newpassword' => 'Nowe hesło:',
 'retypenew' => 'Nowe hesło wospjetować:',
 'resetpass_submit' => 'Hesło posrědkować a so přizjewić',
-'changepassword-success' => 'Twoje hesło bu wuspěšnje změnjene! Nětko přizjewjenje běži...',
+'changepassword-success' => 'Twoje hesło je so wuspěšnje změniło!',
 'resetpass_forbidden' => 'Hesła njedadźa so změnić.',
 'resetpass-no-info' => 'Dyrbiš so přizjewić, zo by direktny přistup na tutu stronu měł.',
 'resetpass-submit-loggedin' => 'Hesło změnić',
@@ -706,7 +716,7 @@ Snano sy swoje hesło hižo wuspěšnje změnił abo nowe nachwilne hesło poža
 # Special:PasswordReset
 'passwordreset' => 'Hesło wróćo stajić',
 'passwordreset-text-one' => 'Wupjelń tutón formular, zo by swoje hesło anulował.',
-'passwordreset-text-many' => '{{PLURAL:$1|Zapodaj jedyn z datow, zo by swoje hesło anulował.}}',
+'passwordreset-text-many' => '{{PLURAL:$1|Zapodaj jedne z polow, zo by swoje hesło wróćo stajił.}}',
 'passwordreset-legend' => 'Hesło wróćo stajić',
 'passwordreset-disabled' => 'Wróćostajenje hesłow je so na  tutym wikiju znjemóžniło.',
 'passwordreset-emaildisabled' => 'E-mejlowe funkcije su so na tutym wikiju znjemóžnili.',
@@ -746,6 +756,9 @@ Nachwilne hesło: $2',
 'changeemail-submit' => 'E-mejlowu adresu změnić',
 'changeemail-cancel' => 'Přetorhnyć',
 
+# Special:ResetTokens
+'resettokens' => 'Tokeny wróćo stajić',
+
 # Edit page toolbar
 'bold_sample' => 'Tučny tekst',
 'bold_tip' => 'Tučny tekst',
@@ -821,9 +834,7 @@ Móžno, zo je so přesunył abo zhašał, mjeztym zo sej wobhladuješ stronu.',
 'loginreqlink' => 'přizjewić',
 'loginreqpagetext' => 'Dyrbiš so $1, zo by strony čitać móhł.',
 'accmailtitle' => 'Hesło bu pósłane.',
-'accmailtext' => "Připadnje spłodźene hesło za [[User talk:$1|$1]] bu do $2 pósłane.
-
-Hesło za tute nowe konto da so na stronje ''[[Special:ChangePassword|hesło změnić]]'' při přizjewjenju změnić.",
+'accmailtext' => "Připadnje spłodźene hesło za [[User talk:$1|$1]] bu na $2 pósłane. Daj so na stronje ''[[Special:ChangePassword|hesło změnić]]'' při přizjewjenju změnić.",
 'newarticle' => '(Nowy)',
 'newarticletext' => 'Sy wotkaz k stronje slědował, kotraž hišće njeeksistuje. Zo by stronu wutworił, wupjelń slědowace tekstowe polo (hlej [[{{MediaWiki:Helppage}}|stronu pomocy]] za dalše informacije). Jeli sy zmylnje tu, klikń prosće na tłóčatko <b>Wróćo</b> we swojim wobhladowaku.',
 'anontalkpagetext' => "---- ''To je diskusijna strona za anonymneho wužiwarja, kiž hišće konto wutworił njeje abo je njewužiwa. Dyrbimy tohodla numerisku IP-adresu wužiwać, zo bychmy jeho/ju identifikowali. Tajka IP-adresa hodźi so wot wjacorych wužiwarjow zhromadnje wužiwać. Jeli sy anonymny wužiwar a měniš, zo buchu irelewantne komentary k tebi pósłane, [[Special:UserLogin/signup|wutwor prošu konto]] abo [[Special:UserLogin|přizjew so]], zo by přichodnu šmjatańcu z anonymnymi wužiwarjemi wobešoł.''",
@@ -1062,15 +1073,15 @@ Druzy administratorojo na {{GRAMMAR:lokatiw|{{SITENAME}}}} móža hišće na sch
 * Njepřihódne wosobinske informacije
 *: ''bydlenske adresy a telefonowe čisła, čisła socialneho zawěsćenja atd.''",
 'revdelete-legend' => 'Wobmjezowanja za widźomnosć nastajić',
-'revdelete-hide-text' => 'Tekst tuteje wersije schować',
+'revdelete-hide-text' => 'Tekst wersije',
 'revdelete-hide-image' => 'Wobsah wobraza schować',
 'revdelete-hide-name' => 'Akciju a cil schować',
-'revdelete-hide-comment' => 'Zjeće schować',
-'revdelete-hide-user' => 'Wužiwarske mjeno/IP-adresu schować',
+'revdelete-hide-comment' => 'Zjeće změnow',
+'revdelete-hide-user' => 'Mjeno/IP-adresa wobdźěłarja',
 'revdelete-hide-restricted' => 'Daty wot administratorow kaž tež te druhich wužiwarjow potłóčić',
 'revdelete-radio-same' => '(njezměnić)',
-'revdelete-radio-set' => 'Haj',
-'revdelete-radio-unset' => '',
+'revdelete-radio-set' => 'Schowany',
+'revdelete-radio-unset' => 'Widźomny',
 'revdelete-suppress' => 'Přičinu wušmórnjenja tež za administratorow schować',
 'revdelete-unsuppress' => 'Wobmjezowanja za wobnowjene wersije zběhnyć',
 'revdelete-log' => 'Přičina:',
@@ -1150,6 +1161,7 @@ Zawěsć, zo tuta změna stawiznisku kontinuitu strony wobchowuje.',
 'compareselectedversions' => 'Wubranej wersiji přirunać',
 'showhideselectedversions' => 'Wubrane wersije pokazać/schować',
 'editundo' => 'cofnyć',
+'diff-empty' => '(Žadyn rozdźěl)',
 'diff-multi' => '({{PLURAL:$1|Jedna mjezywersija|$1 mjezywersiji|$1 mjezywersije|$1 mjezywersijow}} wot {{PLURAL:$2|jednoho wužiwarja|$2 wužiwarjow|$2 wužiwarjow|$2 wužiwarjow}} {{PLURAL:$1|njepokazana|njepokazanej|njepokazane|njepokazane}})',
 'diff-multi-manyusers' => '({{PLURAL:$1|Jedna mjezywersija|$1 mjezywersiji|$1 mjezywersije|$1 mjezywersijow}} wot wjace hač {{PLURAL:$2|jednoho wužiwarja|$2 wužiwarjow|$2 wužiwarjow|$2 wužiwarjow}} {{PLURAL:$1|njepokazana|njepokazanej|njepokazane|njepokazane}})',
 'difference-missing-revision' => '{{PLURAL:$2|Jedna wersija|$2 wersiji|$2 wersije|$2 wersijow}} tutoho rozdźěla ($1) {{PLURAL:$2|njeje so namakała|njejstej so namakałoj|njejsu namakali|njeje so namakało}}.
@@ -1225,7 +1237,6 @@ Spytaj swoje naprašowanje z prefiksom ''all:'' wužiwać, zo by wšón wobsah (
 'mypreferences' => 'Nastajenja',
 'prefs-edits' => 'Ličba změnow:',
 'prefsnologin' => 'Njepřizjewjeny',
-'prefsnologintext' => 'Dyrbiš <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} přizjewjeny]</span>  być, zo by móhł nastajenja postajić.',
 'changepassword' => 'Hesło změnić',
 'prefs-skin' => 'Drasta',
 'skin-preview' => 'Přehlad',
@@ -1250,7 +1261,7 @@ Spytaj swoje naprašowanje z prefiksom ''all:'' wužiwać, zo by wšón wobsah (
 'prefs-rendering' => 'Napohlad',
 'saveprefs' => 'Składować',
 'resetprefs' => 'Njeskładowane změny zaćisnyć',
-'restoreprefs' => 'Wšě standardne nastajenja wobnowić',
+'restoreprefs' => 'Wšě standardne nastajenja wobnowić (w druhich wotrězkach)',
 'prefs-editing' => 'Wobdźěłowanje',
 'rows' => 'Rjadki:',
 'columns' => 'Stołpiki:',
@@ -1306,10 +1317,10 @@ Móžeš tutu stronu wužiwać, zo by swoje nastajenja na standardne hódnoty sy
 'badsig' => 'Njepłaćiwa signatura, prošu HTML přepruwować.',
 'badsiglength' => 'Twoja signatura je předołha.
 Smě mjenje hač $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} dołha być.',
-'yourgender' => 'Splah:',
-'gender-unknown' => 'Njepodaty',
-'gender-male' => 'Muski',
-'gender-female' => 'Žónski',
+'yourgender' => 'Što chceš podać?',
+'gender-unknown' => 'Nochcu ničo wo tym podać',
+'gender-male' => 'Wón wobdźěłuje wikistrony',
+'gender-female' => 'Wona wobdźěłuje wikistrony',
 'prefs-help-gender' => 'Opcionalny: wužiwa so za po splahu specifiske narěčenje přez softwaru. Tuta informacija budźe zjawna.',
 'email' => 'E-mejl',
 'prefs-help-realname' => '* Woprawdźite mjeno (opcionalne): jeli so rozsudźiš to zapodać, budźe to so wužiwać, zo by tebi woprawnjenje za twoje dźěło dało.',
@@ -1321,7 +1332,7 @@ Smě mjenje hač $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} d
 'prefs-signature' => 'Podpis',
 'prefs-dateformat' => 'Datumowy format',
 'prefs-timeoffset' => 'Časowe wotchilenje',
-'prefs-advancedediting' => 'Powšitkowny',
+'prefs-advancedediting' => 'Powšitkowne nastajenja',
 'prefs-editor' => 'Editor',
 'prefs-preview' => 'Přehlad',
 'prefs-advancedrc' => 'Rozšěrjene opcije',
@@ -1332,6 +1343,7 @@ Smě mjenje hač $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} d
 'prefs-displaysearchoptions' => 'Zwobraznjenske opcije',
 'prefs-displaywatchlist' => 'Zwobraznjenske opcije',
 'prefs-diffs' => 'Rozdźěle',
+'prefs-help-prefershttps' => 'Tute nastajenje so po twojim přichodnym přizjewjenju wuskutkuje.',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'Zda so, zo e-mejlowa adresa je płaćiwa',
@@ -1355,10 +1367,10 @@ Smě mjenje hač $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} d
 'userrights-no-interwiki' => 'Nimaš prawo wužiwarske prawa w druhich wikijach změnić.',
 'userrights-nodatabase' => 'Datowa banka $1 njeeksistuje abo lokalna njeje.',
 'userrights-nologin' => 'Dyrbiš so z admininstratorowym kontom [[Special:UserLogin|přizjewić]], zo by wužiwarske prawa změnił.',
-'userrights-notallowed' => 'Twoje konto nima trěbne prawa, zo by wužiwarske prawa přidźěliło abo zebrało.',
+'userrights-notallowed' => 'Nimaš trěbne prawa, zo by wužiwarske prawa přidźěliło abo zebrało.',
 'userrights-changeable-col' => 'Skupiny, kotrež móžeš změnić',
 'userrights-unchangeable-col' => 'Skupiny, kotrež njemóžeš změnić',
-'userrights-conflict' => 'Konflikt wužiwarskich prawow! Prošu čiń swoje změny hišće raz.',
+'userrights-conflict' => 'Konflikt změnow wužiwarskich prawow! Prošu přepruwuj a wobkruć swoje změny.',
 'userrights-removed-self' => 'Sy swoje prawa wuspěšnje wotstronił. Tohodla nimaš hižo přistup na tutu stronu měć.',
 
 # Groups
@@ -1489,8 +1501,8 @@ Smě mjenje hač $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} d
 'action-block' => 'Wobdźěłanju přez wužiwarja zadźěwać',
 'action-protect' => 'škitowe runiny za tutu stronu změnić',
 'action-rollback' => 'Změny poslednjeho wužiwarja, kiž je wěstu stronu wobdźěłał, spěšnje wróćo stajić',
-'action-import' => 'Tutu stronu z druheho wikija importować',
-'action-importupload' => 'Tutu stronu z datajoweho nahraća importować',
+'action-import' => 'Strony z druheho wikija importować',
+'action-importupload' => 'Strony z datajoweho nahraća importować',
 'action-patrol' => 'Změny druhich wužiwarjiw jako dohladowane markować',
 'action-autopatrol' => 'twoju změnu jako dohladowanu markować dać',
 'action-unwatchedpages' => 'lisćinu njewobkedźbowanych stronow zwobraznić',
@@ -1506,6 +1518,8 @@ Smě mjenje hač $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} d
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|změna|změnje|změny|změnow}}',
+'enhancedrc-since-last-visit' => '$1 {{PLURAL:$1|wot poslednjeho wopyta}}',
+'enhancedrc-history' => 'historija',
 'recentchanges' => 'Aktualne změny',
 'recentchanges-legend' => 'Opcije aktualnych změnow',
 'recentchanges-summary' => 'Na tutej stronje móžeš najaktualniše změny w {{GRAMMAR:lokatiw|{{SITENAME}}}} wobkedźbować.',
@@ -1538,7 +1552,7 @@ Smě mjenje hač $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} d
 'rc-change-size' => '$1 {{PLURAL:$1|bajt|bajtaj|bajty|bajtow}}',
 'rc-change-size-new' => '$1 {{PLURAL:$1|bajt|bajtaj|bajty|bajtow}} po změnje',
 'newsectionsummary' => 'Nowy wotrězk: /* $1 */',
-'rc-enhanced-expand' => 'Podrobnosće pokazać (wužaduje sej JavaScript)',
+'rc-enhanced-expand' => 'Podrobnosće pokazać',
 'rc-enhanced-hide' => 'Podrobnosće schować',
 'rc-old-title' => 'prěnjotnje wutworjeny jako "$1"',
 
@@ -1799,8 +1813,7 @@ Za optimalnu wěstotu je img_auth.php znjemóžnjeny.',
 'upload_source_file' => ' (dataja na twojim ličaku)',
 
 # Special:ListFiles
-'listfiles-summary' => 'Tuta specialna strona pokazuje wšě nahrate dataje.
-Jeli so po wužiwarju filtruje, pokazuja so jenož dataje, při kotrychž tón wužiwar je najnowšu wersiju nahrał.',
+'listfiles-summary' => 'Tuta specialna strona pokazuje wšě nahrate dataje.',
 'listfiles_search_for' => 'Za mjenom wobraza pytać:',
 'imgfile' => 'dataja',
 'listfiles' => 'Lisćina datajow',
@@ -1811,6 +1824,10 @@ Jeli so po wužiwarju filtruje, pokazuja so jenož dataje, při kotrychž tón w
 'listfiles_size' => 'wulkosć (byte)',
 'listfiles_description' => 'wopisanje',
 'listfiles_count' => 'Wersije',
+'listfiles-show-all' => 'Stare wersije wobrazow zapřijeć',
+'listfiles-latestversion' => 'Aktualna wersija',
+'listfiles-latestversion-yes' => 'Haj',
+'listfiles-latestversion-no' => 'Ně',
 
 # File description page
 'file-anchor-link' => 'Dataja',
@@ -1903,6 +1920,12 @@ Snano chceš wopisanje na jeje [$2 stronje datajoweho wopisanja] wobdźěłać.'
 'randompage' => 'Připadny nastawk',
 'randompage-nopages' => 'W {{PLURAL:$2|slědowacym mjenowym rumje|slědowacymaj mjenowymaj rumomaj|slědowacych mjenowych rumach|slědowacych mjenowych rumach}} žane strony njejsu: $1',
 
+# Random page in category
+'randomincategory' => 'Připadna strona w kategoriji',
+'randomincategory-invalidcategory' => '"$1" płaćiwe kategorijowe mjeno njeje.',
+'randomincategory-nopages' => 'W kategoriji [[:Category:$1|$1]] žane strony njejsu.',
+'randomincategory-selectcategory-submit' => 'Wotesłać',
+
 # Random redirect
 'randomredirect' => 'Připadne daleposrědkowanje',
 'randomredirect-nopages' => 'Žane daleposrědkowanja w mjenowym rumje "$1".',
@@ -2004,6 +2027,7 @@ Kóžda rjadka wobsahuje wotkazy k prěnjemu a druhemu daleposrědkowanju kaž t
 'listusers' => 'Lisćina wužiwarjow',
 'listusers-editsonly' => 'Jenož wužiwarjow ze změnami pokazać',
 'listusers-creationsort' => 'Po datumje wutworjenja sortěrować',
+'listusers-desc' => 'Po spadowacym porjedźe sortěrować',
 'usereditcount' => '$1 {{PLURAL:$1|změna|změnje|změny|změnow}}',
 'usercreated' => 'je so $1 $2 hodź. {{GENDER:$3|wutworił|wutworiła}}',
 'newpages' => 'Nowe strony',
@@ -2106,7 +2130,8 @@ Znajmjeńša hłowna domena je trěbna, na přikład "*.org".<br />
 # Special:ListGroupRights
 'listgrouprights' => 'Prawa wužiwarskeje skupiny',
 'listgrouprights-summary' => 'Slěduje lisćina wužiwarskich skupinow na tutej wikiju z jich wotpowědnymi přistupnymi prawami. Tu móžeš [[{{MediaWiki:Listgrouprights-helppage}}|dalše informacije]] wo jednotliwych prawach namakać.',
-'listgrouprights-key' => '* <span class="listgrouprights-granted">Garantowane prawo</span>
+'listgrouprights-key' => 'Legenda:
+* <span class="listgrouprights-granted">Garantowane prawo</span>
 * <span class="listgrouprights-revoked">Wotwołane prawo</span>',
 'listgrouprights-group' => 'Skupina',
 'listgrouprights-rights' => 'Prawa',
@@ -2263,10 +2288,12 @@ Prošu potwjerdź, zo maš wotpohlad to činić, zo rozumiš sćěwki a zo to wo
 'deletecomment' => 'Přičina:',
 'deleteotherreason' => 'Druha/přidatna přičina:',
 'deletereasonotherlist' => 'Druha přičina',
-'deletereason-dropdown' => '*Zwučene přičiny za wušmórnjenje
+'deletereason-dropdown' => '* Zwučene přičiny za wušmórnjenje
+** Spam
+** Wandalizm
+** Přeńdźenje awtorskeho prawa
 ** Požadanje awtora
-** Zranjenje copyrighta
-** Wandalizm',
+** Defektne dalesposrědkowanje',
 'delete-edit-reasonlist' => 'Přičiny za wušmórnjenje wobdźěłać',
 'delete-toobig' => 'Tuta strona ma z wjace hač $1 {{PLURAL:$1|wersiju|wersijomaj|wersijemi|wersijemi}} wulke wobdźěłanske stawizny. Wušmórnjenje tajkich stronow bu wobmjezowane, zo by připadne přetorhnjenje {{SITENAME}} wobešło.',
 'delete-warning-toobig' => 'Tuta strona ma z wjace hač $1 {{PLURAL:$1|wersiju|wersijomaj|wersijemi|wersijemi}} wulke wobdźěłanske stawizny. Wušmórnjenje móže operacije datoweje banki {{SITENAME}} přetorhnyć; pokročuj z kedźbliwosću.',
@@ -2418,7 +2445,7 @@ $1',
 'contributions' => 'Přinoški {{GENDER:$1|wužiwarja|wužiwarki}}',
 'contributions-title' => 'Wužiwarske přinoški wot „$1“',
 'mycontris' => 'Přinoški',
-'contribsub2' => 'za wužiwarja $1 ($2)',
+'contribsub2' => 'Za {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'Žane změny, kotrež podatym kriterijam wotpowěduja.',
 'uctop' => '(aktualny)',
 'month' => 'wot měsaca (a do toho):',
@@ -2710,7 +2737,7 @@ W poslednim padźe móžeš tež wotkaz wužiwać, na př. „[[{{#Special:Expor
 'allmessagesname' => 'Mjeno',
 'allmessagesdefault' => 'Standardny tekst',
 'allmessagescurrent' => 'Aktualny tekst',
-'allmessagestext' => 'To je lisćina systemowych zdźělenkow, kotrež w mjenowym rumje MediaWiki k dispoziciji steja. Prošu wopytaj [//www.mediawiki.org/wiki/Localisation lokalizaciju MediaWiki] a [//translatewiki.net translatewiki.net], jeli chceš k powšitkownej lokalizaciji MediaWiki přinošować.',
+'allmessagestext' => 'To je lisćina systemowych zdźělenkow, kotrež w mjenowym rumje MediaWiki k dispoziciji steja. Prošu wopytaj [https://www.mediawiki.org/wiki/Localisation lokalizaciju MediaWiki] a [//translatewiki.net translatewiki.net], jeli chceš k powšitkownej lokalizaciji MediaWiki přinošować.',
 'allmessagesnotsupportedDB' => "Tuta strona njeda so wužiwać, dokelž '''\$wgUseDatabaseMessages''' bu znjemóžnjeny.",
 'allmessages-filter-legend' => 'Filter',
 'allmessages-filter' => 'Po přiměrjenskim stawje filtrować:',
@@ -2902,7 +2929,7 @@ $2',
 'spam_blanking' => 'Wšě wersije z wotkazami do $1 so porjedźeja',
 'spam_deleting' => 'Wšě wersije z wotkazami do $1 so zhašeja',
 'simpleantispam-label' => "Kontrola přećiwo spamej.
-Tu '''ničo''' njezapisać!",
+Tu '''NIČO''' njezapisać!",
 
 # Info page
 'pageinfo-title' => 'Informacije za stronu "$1"',
@@ -2916,13 +2943,14 @@ Tu '''ničo''' njezapisać!",
 'pageinfo-length' => 'Dołhosć strony (w bajtach)',
 'pageinfo-article-id' => 'ID strony',
 'pageinfo-language' => 'Rěč wobsaha strony',
-'pageinfo-robot-policy' => 'Status pytawy',
-'pageinfo-robot-index' => 'Indeksujomny',
-'pageinfo-robot-noindex' => 'Njeindeksujomny',
+'pageinfo-content-model' => 'Model wobsaha strony',
+'pageinfo-robot-policy' => 'Indicěrowanje přez roboty',
+'pageinfo-robot-index' => 'Dowoleny',
+'pageinfo-robot-noindex' => 'Zakazany',
 'pageinfo-views' => 'Ličba zwobraznjenjow',
 'pageinfo-watchers' => 'Ličba wobkedźbowarjow strony',
 'pageinfo-few-watchers' => 'Mjenje hač $1 {{PLURAL:$1|wobkedźbowar|wobkedźbowarjej|wobkedźbowarje|wobkedźbowarjow}}',
-'pageinfo-redirects-name' => 'Dalesposrědkowanja k tutej stronje',
+'pageinfo-redirects-name' => 'Ličba dalesposrědkowanjow k tutej stronje',
 'pageinfo-redirects-value' => '$1',
 'pageinfo-subpages-name' => 'Podstrony tuteje strony',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|dalesposrědkowanje|dalesposrědkowani|dalesposrědkowanja|dalesposrědkowanjow}}; $3 {{PLURAL:$3|njedalesposrědkowanje|njedalesposrědkowani|njedalesposrědkowanja|njedalesposrědkowanjow}})',
@@ -3002,7 +3030,7 @@ $1',
 'svg-long-desc' => 'SVG-dataja, zakładna wulkosć: $1 × $2 pikselow, datajowa wulkosć: $3',
 'svg-long-desc-animated' => 'Animěrowana SVG-dataja, zakładnej wotměraj $1 × $2 pikselow, datajowa wulkosć: $3',
 'svg-long-error' => 'Njepłaćiwa SVG-dataja: $1',
-'show-big-image' => 'Wersija z wyšim rozeznaćom',
+'show-big-image' => 'Originalna dataja',
 'show-big-image-preview' => 'Wulkosć tutoho přehlada: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Druhe rozeznaće|Druhej rozeznaći|Druhe rozeznaća|Druhe rozeznaća}}: $1.',
 'show-big-image-size' => '$1 × $2 pikselow',
@@ -3261,7 +3289,7 @@ Nasledne wotkazy na samsnej lince definuja wuwzaća, hdźež so wobraz smě naje
 'exif-compression-4' => 'CCITT skupina 4 faksowe kodowanje',
 
 'exif-copyrighted-true' => 'Přez awtorske prawo škitany',
-'exif-copyrighted-false' => 'Zjawnosći přistupny',
+'exif-copyrighted-false' => 'Status awtorskeho prawa njepostajeny',
 
 'exif-unknowndate' => 'Njeznaty datum',
 
@@ -3467,7 +3495,7 @@ Nasledne wotkazy na samsnej lince definuja wuwzaća, hdźež so wobraz smě naje
 
 # External editor support
 'edit-externally' => 'Dataju z eksternym programom wobdźěłać',
-'edit-externally-help' => '(Hlej [//www.mediawiki.org/wiki/Manual:External_editors pokiwy za instalaciju] za dalše informacije)',
+'edit-externally-help' => '(Hlej [https://www.mediawiki.org/wiki/Manual:External_editors pokiwy za instalaciju] za dalše informacije)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'wšě',
@@ -3555,6 +3583,9 @@ Prošu potwjerdź, zo chceš tutu stronu woprawdźe znowa wutworić.",
 'confirm-unwatch-button' => 'W porjadku',
 'confirm-unwatch-top' => 'Tutu stronu z wobkedźbowankow wotstronić?',
 
+# Separators for various lists, etc.
+'quotation-marks' => '"$1"',
+
 # Multipage image navigation
 'imgmultipageprev' => '← předchadna strona',
 'imgmultipagenext' => 'přichodna strona →',
@@ -3646,8 +3677,9 @@ Móžeš tež [[Special:EditWatchlist|standardnu wobdźěłowansku stronu]] wuž
 'version-hook-subscribedby' => 'Abonowany wot',
 'version-version' => '(Wersija $1)',
 'version-license' => 'Licenca',
-'version-poweredby-credits' => "Tutón wiki so wot  '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2 podpěruje.",
+'version-poweredby-credits' => "Tutón wiki so wot  '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2 podpěruje.",
 'version-poweredby-others' => 'druzy',
+'version-poweredby-translators' => 'Přełožowarjo na translatewiki.net',
 'version-credits-summary' => 'Dźakujemy so slědowacym wosobam za jich přinoški k [[Special:Version|MediaWiki]]',
 'version-license-info' => 'MediaWiki je swobodna softwara: móžeš ju pod wuměnjenjemi licency GNU General Public License, wozjewjeneje wot załožby Free Software Foundation, rozdźělić a/abo změnić: pak pod wersiju 2 licency pak pod někajkej pozdźišej wersiju.
 
@@ -3664,7 +3696,8 @@ Ty měł [{{SERVER}}{{SCRIPTPATH}}/COPYING kopiju licency GNU General Public Lic
 # Special:Redirect
 'redirect' => 'Po datajowym mjenje, wužiwarju abo wersijowym ID dale sposrědkować',
 'redirect-legend' => 'Do dataje abo strony dale sposrědkować',
-'redirect-summary' => 'Tuta specialna strona so do dataje (datajowe mjeno je podate), strony (wersijowy ID je podaty) abo wužiwarskeje strony (numeriski wužiwarski ID je podaty) dale sposrědkuje.',
+'redirect-summary' => 'Tuta specialna strona so do dataje (datajowe mjeno je podate), strony (wersijowy ID je podaty) abo wužiwarskeje strony (numeriski wužiwarski ID je podaty) dale sposrědkuje. Wužiće:
+[[{{#Special:Redirect}}/file/Přikład.jpg]], [[{{#Special:Redirect}}/revision/328429]] abo [[{{#Special:Redirect}}/user/101]].',
 'redirect-submit' => 'Los',
 'redirect-lookup' => 'Pytać:',
 'redirect-value' => 'Hódnota:',
@@ -3686,10 +3719,9 @@ Ty měł [{{SERVER}}{{SCRIPTPATH}}/COPYING kopiju licency GNU General Public Lic
 
 # Special:SpecialPages
 'specialpages' => 'Specialne strony',
-'specialpages-note' => '----
-* Normalne specialne strony.
-* <span class="mw-specialpagerestricted">Specialne strony z wobmjezowanym přistupom.</span>
-* <span class="mw-specialpagecached">Specialne strony z pufrowaka (móža zestarjene być).</span>',
+'specialpages-note-top' => 'Legenda',
+'specialpages-note' => '* Normalne specialne strony.
+* <span class="mw-specialpagerestricted">Specialne strony z wobmjezowanym přistupom.</span>',
 'specialpages-group-maintenance' => 'Hladanske lisćiny',
 'specialpages-group-other' => 'Druhe specialne strony',
 'specialpages-group-login' => 'Přizjewić/Konto załožić',
@@ -3721,12 +3753,16 @@ Ty měł [{{SERVER}}{{SCRIPTPATH}}/COPYING kopiju licency GNU General Public Lic
 'tags' => 'Płaćiwe taflički změnow',
 'tag-filter' => 'Filter [[Special:Tags|tafličkow]]:',
 'tag-filter-submit' => 'Filter',
+'tag-list-wrapper' => '([[Special:Tags|{{PLURAL:$1|Značka|Značce|Znački}]]: $2)',
 'tags-title' => 'Taflički',
 'tags-intro' => 'Tuta strona nalistuje taflički, z kotrymiž softwara móže změnu markěrować a jich woznam.',
 'tags-tag' => 'Mjeno taflički',
 'tags-display-header' => 'Napohlad na lisćinach změnow',
 'tags-description-header' => 'Dospołne wopisanje woznama',
+'tags-active-header' => 'Aktiwny?',
 'tags-hitcount-header' => 'Změny z tafličkami',
+'tags-active-yes' => 'Haj',
+'tags-active-no' => 'Ně',
 'tags-edit' => 'změnić',
 'tags-hitcount' => '$1 {{PLURAL:$1|změna|změnje|změny|změnow}}',
 
@@ -3747,6 +3783,7 @@ Ty měł [{{SERVER}}{{SCRIPTPATH}}/COPYING kopiju licency GNU General Public Lic
 'dberr-problems' => 'Wodaj! Tute sydło ma techniske ćežkosće.',
 'dberr-again' => 'Počakń někotre mjeńšiny a zaktualizuj stronu.',
 'dberr-info' => '(Njeje móžno ze serwerom datoweje banki zwjazać: $1)',
+'dberr-info-hidden' => '(Kontakt z datobankowym serwerom móžno njeje)',
 'dberr-usegoogle' => 'Mjeztym móžeš z pomocu Google pytać.',
 'dberr-outofdate' => 'Wobkedźbuj, zo jich indeksy našeho wobsaha móhli zestarjene być.',
 'dberr-cachederror' => 'Slědowaca je pufrowana kopija požadaneje strony a móhła zestarjena być.',
@@ -3882,4 +3919,17 @@ Hewak móžeš slědowacy jednory formular wužiwać. Twój komentar přida so s
 # Image rotation
 'rotate-comment' => 'Wobraz wo $1 {{PLURAL:$1|stopjeń|stopnjej|stopnje|stopnjow}} w směrje časnika wjerćany',
 
+# Limit report
+'limitreport-cputime' => 'Časowe wužiwanje CPU',
+'limitreport-cputime-value' => '$1 {{PLURAL:$1|sekunda|sekundźe|sekundy|sekundow}}',
+'limitreport-walltime' => 'Wužiwanje woprawdźiteho časa',
+'limitreport-walltime-value' => '$1 {{PLURAL:$1|sekunda|sekundźe|sekundy|sekundow}}',
+'limitreport-ppvisitednodes' => 'Ličba wopytanych sukow preprocesora',
+'limitreport-ppgeneratednodes' => 'Spłodźena ličba sukow preprocesora',
+'limitreport-postexpandincludesize' => 'Wulkosć zapřijimanja po ekspandowanju',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|bajt|bajtaj|bajty|bajtow}}',
+'limitreport-templateargumentsize' => 'Wulkosć předłohoweho argumenta',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|bajt|bajtaj|bajty|bajtow}}',
+'limitreport-expansiondepth' => 'Najwyša ekspansijowa hłubokosć',
+
 );
index c07491d..0360773 100644 (file)
@@ -1340,7 +1340,7 @@ Nenpòt lòt lyen nan menm liy nan konsidere kòm yon eksèpsyon, i.e. paj kote
 
 # External editor support
 'edit-externally' => 'Modifye fichye sa a nan aplikasyon pa ou (ki pa nan sistèm an, sou machin ou pa egzanp).',
-'edit-externally-help' => '(Gade [//www.mediawiki.org/wiki/Manual:External_editors komand ak enstriksyon yo] pou plis enfòmasyon oubyen pou konnen plis)',
+'edit-externally-help' => '(Gade [https://www.mediawiki.org/wiki/Manual:External_editors komand ak enstriksyon yo] pou plis enfòmasyon oubyen pou konnen plis)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tout',
index 0795f8f..eeff46e 100644 (file)
@@ -1406,7 +1406,6 @@ Ezt általában egy elavult, törölt oldalra mutató laptörténeti hivatkozás
 'mypreferences' => 'Beállítások',
 'prefs-edits' => 'Szerkesztéseid száma:',
 'prefsnologin' => 'Nem jelentkeztél be',
-'prefsnologintext' => 'Saját beállításaid elmentéséhez <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} be kell jelentkezned.] </span>',
 'changepassword' => 'Jelszócsere',
 'prefs-skin' => 'Felület',
 'skin-preview' => 'előnézet',
@@ -2264,7 +2263,7 @@ Támogatott {{PLURAL:$2|protokoll|protokollok}}: <code>$1</code> (http:// az ala
 
 # Special:ActiveUsers
 'activeusers' => 'Aktív szerkesztők listája',
-'activeusers-intro' => 'Ez a lap azon felhasználók listáját tartalmazza, akik csináltak valamilyen tevékenységet az elmúlt {{PLURAL:$1|egy|$1}} napban.',
+'activeusers-intro' => 'Ez a lap azon felhasználók listáját tartalmazza, akik végeztek valamilyen tevékenységet az elmúlt {{PLURAL:$1|egy|$1}} napban.',
 'activeusers-count' => '$1 szerkesztés az utolsó $3 napban',
 'activeusers-from' => 'Szerkesztők listázása a következő névtől kezdve:',
 'activeusers-hidebots' => 'Botok elrejtése',
@@ -2297,7 +2296,7 @@ Az egyes csoportokról további információt [[{{MediaWiki:Listgrouprights-help
 'emailuser-title-target' => 'E-mail küldése ennek a felhasználónak: $1',
 'emailuser-title-notarget' => 'E-mail küldése a felhasználónak',
 'emailpage' => 'E-mail küldése',
-'emailpagetext' => '{{GENDER:$1|user}} nevű szerkesztő e-mail-címére ezen űrlap kitöltésével üzenetet tudsz küldeni.
+'emailpagetext' => '{{GENDER:$1|felhasználó}}nevű szerkesztő e-mail-címére ezen űrlap kitöltésével üzenetet tudsz küldeni.
 Feladóként a [[Special:Preferences|beállításaid]]nál megadott e-mail-címed fog szerepelni, így a címzett közvetlenül tud majd válaszolni neked.',
 'usermailererror' => 'A levélküldő objektum hibával tért vissza:',
 'defemailsubject' => '{{SITENAME}} e-mail a következő felhasználótól: „$1”',
@@ -2317,10 +2316,10 @@ Feladóként a [[Special:Preferences|beállításaid]]nál megadott e-mail-címe
 'emailsubject' => 'Tárgy:',
 'emailmessage' => 'Üzenet:',
 'emailsend' => 'Küldés',
-'emailccme' => 'Az üzenet másolatát küldje el nekem is e-mailben.',
+'emailccme' => 'Az üzenet másolatát küldje el nekem is e-mailben',
 'emailccsubject' => '$1 szerkesztőnek küldött $2 tárgyú üzenet másolata',
 'emailsent' => 'E-mail elküldve',
-'emailsenttext' => 'Az e-mail üzenetedet elküldtem.',
+'emailsenttext' => 'E-mail üzenetedet elküldtük.',
 'emailuserfooter' => 'Ezt az e-mailt $1 küldte $2 számára, az „E-mail küldése ezen szerkesztőnek” funkció használatával a(z) {{SITENAME}} wikin.',
 
 # User Messenger
@@ -2905,7 +2904,7 @@ Az utóbbi esetben közvetlen hivatkozást is használhatsz, például a [[{{#Sp
 'allmessagesdefault' => 'Alapértelmezett szöveg',
 'allmessagescurrent' => 'Jelenlegi szöveg',
 'allmessagestext' => 'Ezen a lapon a MediaWiki-névtérben elérhető rendszerüzenetek listája látható.
-Ha részt szeretnél venni a MediaWiki fordításában, látogass el a [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation], valamint a [//translatewiki.net translatewiki.net] oldalra.',
+Ha részt szeretnél venni a MediaWiki fordításában, látogass el a [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation], valamint a [//translatewiki.net translatewiki.net] oldalra.',
 'allmessagesnotsupportedDB' => "A '''''{{ns:special}}:Allmessages''''' lap nem használható, mert a '''\$wgUseDatabaseMessages''' ki van kapcsolva.",
 'allmessages-filter-legend' => 'Elemek szűrése',
 'allmessages-filter' => 'Módosítás állapota:',
@@ -3665,7 +3664,7 @@ míg a többi elem a táblázat összecsukása után alapértelmezett esetben re
 
 # External editor support
 'edit-externally' => 'A fájl szerkesztése külső alkalmazással',
-'edit-externally-help' => '(Lásd a [//www.mediawiki.org/wiki/Manual:External_editors használati utasítást] (angolul) a beállításához.)',
+'edit-externally-help' => '(Lásd a [https://www.mediawiki.org/wiki/Manual:External_editors használati utasítást] (angolul) a beállításához.)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'bármikor',
@@ -3848,7 +3847,7 @@ minden egyes sor egy figyelt lap címe. Ha kész vagy, kattints a lista alatt ta
 'version-hook-subscribedby' => 'Használja',
 'version-version' => '(verzió: $1)',
 'version-license' => 'Licenc',
-'version-poweredby-credits' => "Ez a wiki '''[//www.mediawiki.org/ MediaWiki]''' szoftverrel működik, copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Ez a wiki '''[https://www.mediawiki.org/ MediaWiki]''' szoftverrel működik, copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'mások',
 'version-poweredby-translators' => 'translatewiki.net fordítók',
 'version-credits-summary' => 'Szeretnénk elismerni a következő személyek hozzájárulását a [[Special:Version|MediaWiki]] szoftverhez.',
@@ -3877,8 +3876,7 @@ A MediaWikit abban a reményben terjesztjük, hogy hasznos lesz, de GARANCIA NÉ
 
 # Special:SpecialPages
 'specialpages' => 'Speciális lapok',
-'specialpages-note' => '----
-* Mindenki számára elérhető speciális lapok.
+'specialpages-note' => '* Mindenki számára elérhető speciális lapok.
 * <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',
index aa7b289..cd294b5 100644 (file)
@@ -1218,7 +1218,6 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'mypreferences' => 'Նախընտրություններ',
 'prefs-edits' => 'Խմբագրումների քանակը.',
 'prefsnologin' => 'Դուք չեք մտել համակարգ',
-'prefsnologintext' => 'Մասնակցային նախընտրությունները փոփոխելու համար անհրաժեշտ է <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} մտնել համակարգ]</span>։',
 'changepassword' => 'Փոխել գաղտնաբառը',
 'prefs-skin' => 'Տեսք',
 'skin-preview' => 'նախադիտել',
@@ -1371,6 +1370,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'right-upload' => 'Նիշքերի բեռնում',
 'right-upload_by_url' => 'Բեռնել նիշքեր ինտերնետային հասցեից',
 'right-delete' => 'Էջերի ջնջում',
+'right-rollback' => 'Արագ հետ գլորել տվյալ էջը վերջին անգամ խմբագրած մասնակցի խմբագրումները',
 
 # Special:Log/newusers
 'newuserlogpage' => 'Մասնակիցների գրանցման տեղեկամատյան',
@@ -1390,6 +1390,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'action-delete' => 'Ջնջել այս էջը',
 'action-deleterevision' => 'Ջնջել այս փոփոխությունը',
 'action-deletedhistory' => 'Դիտել այս էջի ջնջված պատմությունը',
+'action-rollback' => 'արագ հետ գլորել էջը վերջին անգամ խմբագրած մասնակցի կատարած փոփոխությունները',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|փոփոխություն|փոփոխություն}}',
@@ -1905,11 +1906,12 @@ $NEWPAGE
 'rollback' => 'Հետ գլորել խմբագրումները',
 'rollback_short' => 'Հետ գլորել',
 'rollbacklink' => 'հետ գլորել',
+'rollbacklinkcount' => 'հետ գլորել $1 {{PLURAL:$1|խմբագրում}}',
 'rollbackfailed' => 'Հետ գլորումը ձախողվեց',
 'cantrollback' => 'Չհաջողվեց հետ շրջել խմբագրումը։ Վերջին ներդրումը կատարվել է էջի միակ հեղինակի կողմից։',
-'alreadyrolled' => 'Õ\89Õ°Õ¡Õ»Õ¸Õ²Õ¾Õ¥Ö\81 Õ°Õ¥Õ¿ Õ£Õ¬Õ¸Ö\80Õ¥Õ¬ [[:$1]] Õ§Õ»Õ« Õ¾Õ¥Ö\80Õ»Õ«Õ¶ Õ­Õ´Õ¢Õ¡Õ£Ö\80Õ¸Ö\82Õ´Õ¶Õ¥Ö\80Õ¨Õ\9d Õ¯Õ¡Õ¿Õ¡Ö\80Õ¾Õ¡Õ® [[User:$2|$2]] ([[User talk:$2|Õ\94Õ¶Õ¶Õ¡Ö\80Õ¯Õ¸Ö\82Õ´]]) Õ´Õ¡Õ½Õ¶Õ¡Õ¯Ö\81Õ« Õ¯Õ¸Õ²Õ´Õ«Ö\81Ö\89 Õ\84Õ¥Õ¯ Õ¸Ö\82Ö\80Õ«Õ·Õ¨ Õ¡Ö\80Õ¤Õ¥Õ¶ Õ­Õ´Õ¢Õ¡Õ£Ö\80Õ¥Õ¬ Õ§ Õ¯Õ¡Õ´ Õ°Õ¥Õ¿ Õ§ Õ£Õ¬Õ¸Ö\80Õ¥Õ¬ էջը։
+'alreadyrolled' => 'Õ\89Õ°Õ¡Õ»Õ¸Õ²Õ¾Õ¥Ö\81 Õ°Õ¥Õ¿ Õ£Õ¬Õ¸Ö\80Õ¥Õ¬ [[:$1]] Õ§Õ»Õ¸Ö\82Õ´ [[User:$2|$2]] ([[User talk:$2|Õ\94Õ¶Õ¶Õ¡Ö\80Õ¯Õ¸Ö\82Õ´]]) Õ´Õ¡Õ½Õ¶Õ¡Õ¯Ö\81Õ« Õ¾Õ¥Ö\80Õ»Õ«Õ¶ Õ­Õ´Õ¢Õ¡Õ£Ö\80Õ¸Ö\82Õ´Õ¶Õ¥Ö\80Õ¨â\80¤ Õ´Õ¥Õ¯ Õ¸Ö\82Ö\80Õ«Õ·Õ¶ Õ¡Ö\80Õ¤Õ¥Õ¶ Õ°Õ¥Õ¿ Õ§ Õ£Õ¬Õ¸Ö\80Õ¥Õ¬ Õ¯Õ¡Õ´ Õ­Õ´Õ¢Õ¡Õ£Ö\80Õ¥Õ¬ Õ§ էջը։
 
\8eÕ¥Ö\80Õ»Õ«Õ¶ Õ­Õ´Õ¢Õ¡Õ£Ö\80Õ¸Ö\82Õ´Õ¨ Õ¯Õ¡Õ¿Õ¡Ö\80Õ¾Õ¥Õ¬ Õ§ [[User:$3|$3]] ([[User talk:$3|Õ\94Õ¶Õ¶Õ¡Ö\80Õ¯Õ¸Ö\82Õ´]]) Õ´Õ¡Õ½Õ¶Õ¡Õ¯Ö\81Õ« Õ¯Õ¸Õ²Õ´Õ«Ö\81։',
\8eÕ¥Ö\80Õ»Õ«Õ¶ Õ­Õ´Õ¢Õ¡Õ£Ö\80Õ¸Ö\82Õ´Õ¨ Õ¯Õ¡Õ¿Õ¡Ö\80Õ¥Õ¬ Õ§ [[User:$3|$3]] ([[User talk:$3|Õ\94Õ¶Õ¶Õ¡Ö\80Õ¯Õ¸Ö\82Õ´]]) Õ´Õ¡Õ½Õ¶Õ¡Õ¯Õ«Ö\81Õ¨։',
 'editcomment' => "Խմբագրման մեկնաբանումն էր. «''$1''»։",
 'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|քննարկում]]) մասնակցի խմբագրումները հետ են շրջվել [[User:$1|$1]] մասնակցի վերջին տարբերակին։',
 'revertpage-nouser' => 'Հետ շրջվեց (անունը ջնջված է) մասնակցի խմբագրումը՝ [[User:$1|$1]] մասնակցի տարբերակին',
@@ -2269,7 +2271,7 @@ $1',
 'allmessagesdefault' => 'Ուղերձի լռելյայն տեքստ',
 'allmessagescurrent' => 'Ընթացիկ տեքստ',
 'allmessagestext' => 'Ստորև բերված է «MediaWiki» անվանատարածքի բոլոր համակարգային ուղերձների ցանկը։
-Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
+Please visit [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
 'allmessagesnotsupportedDB' => "Այս էջը չի գործում, քանի որ '''\$wgUseDatabaseMessages''' հատկանիշը անջատված է։",
 'allmessages-filter-all' => 'Բոլորը',
 'allmessages-language' => 'Լեզու',
@@ -2563,7 +2565,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'Խմբագրել այս նիշքը արտաքին խմբագրիչով',
-'edit-externally-help' => '(Մանրամասնությունների համար տես [//www.mediawiki.org/wiki/Manual:External_editors տեղակայման հրահանգները])',
+'edit-externally-help' => '(Մանրամասնությունների համար տես [https://www.mediawiki.org/wiki/Manual:External_editors տեղակայման հրահանգները])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'բոլոր',
@@ -2703,8 +2705,7 @@ $3
 
 # Special:SpecialPages
 'specialpages' => 'Սպասարկող էջեր',
-'specialpages-note' => '----
-* Հասարակ հատուկ էջեր։
+'specialpages-note' => '* Հասարակ հատուկ էջեր։
 * <strong class="mw-specialpagerestricted">Սահմանափակված հատուկ էջեր։</strong>',
 'specialpages-group-maintenance' => 'Տեխնիկական սպասարկման տեղեկատուներ',
 'specialpages-group-other' => 'Այլ հատուկ էջեր',
index 54d9372..c364eb6 100644 (file)
@@ -14,6 +14,7 @@
  * @author McDutchie
  * @author Nemo bis
  * @author Reedy
+ * @author Shirayuki
  * @author Yfdyh000
  * @author לערי ריינהארט
  */
@@ -555,7 +556,8 @@ Le administrator qui lo blocava offereva iste explication: "$3".',
 'invalidtitle-knownnamespace' => 'Titulo invalide con spatio de nomines "$2" e texto "$3"',
 'invalidtitle-unknownnamespace' => 'Titulo invalide con spatio de nomines incognite $1 e texto "$2"',
 'exception-nologin' => 'Non identificate',
-'exception-nologin-text' => 'Iste pagina o action necessita que tu aperi session in iste wiki.',
+'exception-nologin-text' => '[[Special:Userlogin|Aperi session]] pro poter acceder a iste pagina o action.',
+'exception-nologin-text-manual' => 'Es necessari $1 pro poter acceder a iste pagina o action.',
 
 # Virus scanner
 'virus-badscanner' => "Configuration incorrecte: programma antivirus non cognoscite: ''$1''",
@@ -602,7 +604,7 @@ Non oblida personalisar tu [[Special:Preferences|preferentias in {{SITENAME}}]].
 'gotaccount' => "Tu jam ha un conto? '''$1'''.",
 'gotaccountlink' => 'Aperir session',
 'userlogin-resetlink' => 'Datos de authentication oblidate?',
-'userlogin-resetpassword-link' => 'Reinitialisar contrasigno',
+'userlogin-resetpassword-link' => 'Contrasigno oblidate?',
 'helplogin-url' => 'Help:Aperir session',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Adjuta a aperir session]]',
 'userlogin-loggedin' => 'Tu ha jam aperite session como {{GENDER:$1|$1}}.
@@ -874,7 +876,7 @@ Per favor entra e valida tu adresse de e-mail per medio de tu [[Special:Preferen
 'nosuchsectiontext' => 'Tu ha tentate modificar un section que non existe.
 Illo pote haber essite displaciate o delite durante que tu legeva le pagina.',
 'loginreqtitle' => 'Identification necessari',
-'loginreqlink' => 'aperir un session',
+'loginreqlink' => 'aperir session',
 'loginreqpagetext' => 'Tu debe $1 pro poter vider altere paginas.',
 'accmailtitle' => 'Contrasigno inviate.',
 'accmailtext' => "Un contrasigno generate aleatorimente pro [[User talk:$1|$1]] ha essite inviate a $2. Illo pote esser cambiate in le pagina ''[[Special:ChangePassword|Cambiar contrasigno]]'' post que tu ha aperite un session.",
@@ -1136,7 +1138,8 @@ function, o le version specificate non existe, o tu essaya celar le version actu
 Altere administratores in {{SITENAME}} continuara a poter acceder al contento celate e pote restaurar lo per medio de iste mesme interfacie, si non se ha definite restrictiones additional.",
 'revdelete-confirm' => 'Per favor confirma que tu ha le intention de facer isto, que tu comprende le consequentias, e que tu face isto in accordo con [[{{MediaWiki:Policy-url}}|le politica]].',
 'revdelete-suppress-text' => "Le suppression debe '''solmente''' esser usate pro le sequente casos:
-* Informationes personal inappropriate
+* Information potentialmente diffamatori
+* Information personal inappropriate
 *: ''adresses de domicilio e numeros de telephono, numeros de securitate social, etc.''",
 'revdelete-legend' => 'Definir restrictiones de visibilitate',
 'revdelete-hide-text' => 'Texto del version',
@@ -1146,8 +1149,8 @@ Altere administratores in {{SITENAME}} continuara a poter acceder al contento ce
 'revdelete-hide-user' => 'Nomine de usator o adresse IP del modificator',
 'revdelete-hide-restricted' => 'Supprimer le datos a administratores assi como a alteres',
 'revdelete-radio-same' => '(non cambiar)',
-'revdelete-radio-set' => 'Visibile',
-'revdelete-radio-unset' => 'Celate',
+'revdelete-radio-set' => 'Celate',
+'revdelete-radio-unset' => 'Visibile',
 'revdelete-suppress' => 'Supprimer le datos a administratores assi como a alteres',
 'revdelete-unsuppress' => 'Eliminar restrictiones super versiones restaurate',
 'revdelete-log' => 'Motivo:',
@@ -1307,7 +1310,7 @@ Nota que lor indices del contento de {{SITENAME}} pote esser obsolete.',
 'mypreferences' => 'Preferentias',
 'prefs-edits' => 'Numero de modificationes:',
 'prefsnologin' => 'Tu non ha aperite un session',
-'prefsnologintext' => 'Tu debe <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} aperir session]</span> pro configurar preferentias de usator.',
+'prefsnologintext2' => 'Es necessari $1 pro definir le preferentias de usator.',
 'changepassword' => 'Cambiar contrasigno',
 'prefs-skin' => 'Apparentia',
 'skin-preview' => 'Previsualisation',
@@ -1568,7 +1571,7 @@ Si tu opta pro dar lo, isto essera usate pro dar te attribution pro tu contribut
 'action-reupload' => 'superscriber iste file existente',
 'action-reupload-shared' => 'supplantar iste file in un repositorio commun',
 'action-upload_by_url' => 'incargar iste file ab un adresse URL',
-'action-writeapi' => 'usar le API de scriptura',
+'action-writeapi' => 'usar le API pro modificar le wiki',
 'action-delete' => 'deler iste pagina',
 'action-deleterevision' => 'deler iste version',
 'action-deletedhistory' => 'vider le historia delite de iste pagina',
@@ -2349,7 +2352,7 @@ Pro contactar le redactor:
 mail: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Tu non recipera altere notificationes de activitate si tu non visita iste pagina. Tu pote anque reinitialisar le optiones de notification pro tote le paginas in tu observatorio.
+Tu non recipera altere notificationes de activitate si tu non visita iste pagina con session aperte. Tu pote anque reinitialisar le optiones de notification pro tote le paginas in tu observatorio.
 
 Le systema de notification de {{SITENAME}}, a tu servicio
 
@@ -2887,7 +2890,7 @@ In le secunde caso tu pote etiam usar un ligamine, p.ex. [[{{#Special:Export}}/{
 'allmessagesdefault' => 'Texto predefinite',
 'allmessagescurrent' => 'Texto actual',
 'allmessagestext' => 'Isto es un lista de messages de systema disponibile in le spatio de nomines MediaWiki.
-Per favor visita [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] si tu desira contribuer al localisation general de MediaWiki.',
+Per favor visita [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] si tu desira contribuer al localisation general de MediaWiki.',
 'allmessagesnotsupportedDB' => "Iste pagina non pote esser usate proque '''\$wgUseDatabaseMessages''' ha essite disactivate.",
 'allmessages-filter-legend' => 'Filtro',
 'allmessages-filter' => 'Filtrar per stato de personalisation:',
@@ -3106,6 +3109,7 @@ Le causa es probabilemente un ligamine verso un sito externe que es presente in
 'pageinfo-length' => 'Dimension del pagina (in bytes)',
 'pageinfo-article-id' => 'ID del pagina',
 'pageinfo-language' => 'Lingua del contento del pagina',
+'pageinfo-content-model' => 'Modello de contento de pagina',
 'pageinfo-robot-policy' => 'Indexation per robots',
 'pageinfo-robot-index' => 'Permittite',
 'pageinfo-robot-noindex' => 'Non permittite',
@@ -3191,7 +3195,7 @@ Le execution de illo pote compromitter le securitate de tu systema.",
 'svg-long-desc' => 'File SVG, dimensiones nominal: $1 × $2 pixels, grandor del file: $3',
 'svg-long-desc-animated' => 'File SVG animate, dimensiones nominal: $1 × $2 pixels, grandor del file: $3',
 'svg-long-error' => 'File SVG invalide: $1',
-'show-big-image' => 'Plen resolution',
+'show-big-image' => 'File original',
 'show-big-image-preview' => ' Dimension de iste previsualisation: $1.',
 'show-big-image-other' => 'Altere {{PLURAL:$2|resolution|resolutiones}}: $1.',
 'show-big-image-size' => '$1 × $2 pixels',
@@ -3659,7 +3663,7 @@ Le alteres essera initialmente celate.
 
 # External editor support
 'edit-externally' => 'Modificar iste file con un programma externe',
-'edit-externally-help' => '(Vide le [//www.mediawiki.org/wiki/Manual:External_editors instructiones de configuration] pro ulterior informationes)',
+'edit-externally-help' => '(Vide le [https://www.mediawiki.org/wiki/Manual:External_editors instructiones de configuration] pro ulterior informationes)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'totes',
@@ -3762,6 +3766,9 @@ Per favor confirma que tu realmente vole recrear iste pagina.",
 'confirm-unwatch-button' => 'OK',
 'confirm-unwatch-top' => 'Remover iste pagina de tu observatorio?',
 
+# Separators for various lists, etc.
+'quotation-marks' => '“$1”',
+
 # Multipage image navigation
 'imgmultipageprev' => '← precedente pagina',
 'imgmultipagenext' => 'sequente pagina →',
@@ -3847,7 +3854,7 @@ Tu pote etiam [[Special:EditWatchlist|usar le editor standard]].',
 'version-hook-subscribedby' => 'Subscribite per',
 'version-version' => '(Version $1)',
 'version-license' => 'Licentia',
-'version-poweredby-credits' => "Iste wiki es actionate per '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Iste wiki es actionate per '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'alteres',
 'version-poweredby-translators' => 'Traductores de translatewiki.net',
 'version-credits-summary' => 'Nos vole recognoscer le sequente personas pro lor contribution a [[Special:Version|MediaWiki]].',
@@ -3890,10 +3897,9 @@ Vos deberea haber recipite [{{SERVER}}{{SCRIPTPATH}}/COPYING un exemplar del Lic
 
 # Special:SpecialPages
 'specialpages' => 'Paginas special',
-'specialpages-note' => '----
-* Paginas special normal.
-* <span class="mw-specialpagerestricted">Paginas special restringite.</span>
-* <span class="mw-specialpagecached">Paginas special del cache (poterea esser obsolete).</span>',
+'specialpages-note-top' => 'Legenda',
+'specialpages-note' => '* Paginas special normal.
+* <span class="mw-specialpagerestricted">Paginas special restringite.</span>',
 'specialpages-group-maintenance' => 'Reportos de mantenentia',
 'specialpages-group-other' => 'Altere paginas special',
 'specialpages-group-login' => 'Aperir session / crear conto',
index dd1a209..063d09e 100644 (file)
@@ -1464,7 +1464,6 @@ Perlu diingat bahwa indeks Google untuk konten {{SITENAME}} mungkin belum mencak
 'mypreferences' => 'Preferensi',
 'prefs-edits' => 'Jumlah suntingan:',
 'prefsnologin' => 'Belum masuk log',
-'prefsnologintext' => 'Anda harus <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} masuk log]</span> untuk mengeset preferensi Anda.',
 'changepassword' => 'Ganti kata sandi',
 'prefs-skin' => 'Kulit',
 'skin-preview' => 'Pratayang',
@@ -3005,7 +3004,7 @@ Jika Anda hanya ingin mengimpor versi terbaru, Anda melakukannya lebih cepat den
 'allmessagesdefault' => 'Teks baku',
 'allmessagescurrent' => 'Teks sekarang',
 'allmessagestext' => 'Ini adalah daftar semua pesan sistem yang tersedia dalam ruang nama MediaWiki.
-Silakan kunjungi [//www.mediawiki.org/wiki/Localisation Pelokalan MediaWiki] dan [//translatewiki.net translatewiki.net] jika Anda ingin berkontribusi untuk pelokalan generik MediaWiki.',
+Silakan kunjungi [https://www.mediawiki.org/wiki/Localisation Pelokalan MediaWiki] dan [//translatewiki.net translatewiki.net] jika Anda ingin berkontribusi untuk pelokalan generik MediaWiki.',
 'allmessagesnotsupportedDB' => "Halaman ini tidak dapat digunakan karena '''\$wgUseDatabaseMessages''' telah dimatikan.",
 'allmessages-filter-legend' => 'Penyaring',
 'allmessages-filter' => 'Saring dengan keadaan kustomisasi:',
@@ -3863,7 +3862,7 @@ $8',
 
 # External editor support
 'edit-externally' => 'Sunting berkas ini dengan aplikasi luar',
-'edit-externally-help' => '(Lihat [//www.mediawiki.org/wiki/Manual:External_editors instruksi pengaturan] untuk informasi lebih lanjut)',
+'edit-externally-help' => '(Lihat [https://www.mediawiki.org/wiki/Manual:External_editors instruksi pengaturan] untuk informasi lebih lanjut)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'semua',
@@ -4100,7 +4099,7 @@ Anda juga dapat [[Special:EditWatchlist|menggunakan penyunting standar Anda]].',
 'version-version' => '(Versi $1)',
 'version-svn-revision' => '(r$2)',
 'version-license' => 'Lisensi',
-'version-poweredby-credits' => "Wiki ini didukung oleh '''[//www.mediawiki.org/ MediaWiki]''', hak cipta © 2001-$1 $2.",
+'version-poweredby-credits' => "Wiki ini didukung oleh '''[https://www.mediawiki.org/ MediaWiki]''', hak cipta © 2001-$1 $2.",
 'version-poweredby-others' => 'lainnya',
 'version-poweredby-translators' => 'penerjemah translatewiki.net',
 'version-credits-summary' => 'Kami ingin mengakui orang-orang berikut atas kontribusinya terhadap [[Special:Version|MediaWiki]].',
@@ -4143,8 +4142,7 @@ Anda seharusnya telah menerima [{{SERVER}}{{SCRIPTPATH}}/COPYING salinan Lisensi
 
 # Special:SpecialPages
 'specialpages' => 'Halaman istimewa',
-'specialpages-note' => '----
-* Halaman istimewa normal.
+'specialpages-note' => '* Halaman istimewa normal.
 * <span class="mw-specialpagerestricted">Halaman istimewa terlarang.</span>
 * <span class="mw-specialpagecached">Halaman istimewa tersinggah (mungkin usang).</span>',
 'specialpages-group-maintenance' => 'Laporan pemeliharaan',
index 0112545..ced2e20 100644 (file)
@@ -1287,7 +1287,7 @@ Altri va esser ocultat per contumacie.
 
 # External editor support
 'edit-externally' => 'Redacter ti file usant un aplication extern',
-'edit-externally-help' => '(Vider li [//www.mediawiki.org/wiki/Manual:External_editors instructiones de installation] por plu information)',
+'edit-externally-help' => '(Vider li [https://www.mediawiki.org/wiki/Manual:External_editors instructiones de installation] por plu information)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'omni',
index d80520c..bd009a8 100644 (file)
@@ -1607,7 +1607,7 @@ Nke ozor gí zonari na áká onwe ha.
 
 # External editor support
 'edit-externally' => 'Rüo na élú usòrò nke na ngwa ọrụ nsónùsòrò nke ọzȯ',
-'edit-externally-help' => '(Lé nà [//www.mediawiki.org/wiki/Manual:External_editors nkụzí mbídó] màkà nkúzí ozor)',
+'edit-externally-help' => '(Lé nà [https://www.mediawiki.org/wiki/Manual:External_editors nkụzí mbídó] màkà nkúzí ozor)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'nke níle',
index 1d502cb..10100b8 100644 (file)
@@ -495,7 +495,7 @@ Dimo liplipatan a sukatan dagiti kakaykayatam idiay [[Special:Preferences|{{SITE
 'gotaccount' => 'Addaanka kadin ti pakabilangam? $1.',
 'gotaccountlink' => 'Sumrek',
 'userlogin-resetlink' => 'Nalipatam dagiti salaysay ti pagserrekmo?',
-'userlogin-resetpassword-link' => 'Iyasentar manen ti kontrasenias',
+'userlogin-resetpassword-link' => 'Nalipatam ti kontraseniasmo?',
 'helplogin-url' => 'Help:Panagserrek',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Tulong iti panagserrek]]',
 'userlogin-loggedin' => 'Nakastrekkan a kas ni {{GENDER:$1|$1}}.
@@ -568,16 +568,16 @@ No sabali ti nagkiddaw, wenno no malagipmo pay ti kontrasenias mo ket dimon kaya
 'passwordsent' => 'Naipatuloden ti baro a kontrasenias iti esurat a pagtaengan a nairehistro kenni "$1".
 Pangngaasi a sumrekka manen kalpasan ti pannakaawatmo.',
 'blocked-mailpassword' => 'Ti IP a pagtaengam ket naserraan manipud ti panag-urnos, isunga saan a mapalubosan nga agusar ti annong ti panagipulang ti kontrasenias tapno mapawilan ti panag-abuso.',
-'eauthentsent' => 'Naipatuloden ti pammasingked nga esurat iti naited nga esurat a pagtaengan.
-Sakbay ti ania man nga esurat ti maipatulod iti pakabilangan, masapul a surotem dagiti maibagbaga iti esurat, tapno mapasingkedan a ti pakabilangan ket agpayso a kukuam.',
+'eauthentsent' => 'Naipatuloden ti pammatalged nga esurat iti naikeddeng nga esurat a pagtaengan.
+Sakbay a maipatulod ti aniaman nga esurat iti pakabilangan, masapul a surotem dagiti maibagbaga iti esurat, tapno mapatalgedan ti pakabilangan ket agpayso a kukuam.',
 'throttled-mailpassword' => 'Ti panangiyasentar manen ti kontrasenias ket naipatuloden, iti kaunegan ti napalabas a {{PLURAL:$1|nga oras|$1 nga or-oras}}.
 Tapno maipawilan ti panag-abuso, maysa laeng a panangiyasentar manen ti kontrasenias ti maipatulod iti kada {{PLURAL:$1|nga oras|$1 nga or-oras}}.',
 'mailerror' => 'Biddut iti panangipatulod ti surat: $1',
 'acct_creation_throttle_hit' => 'Dagiti sumarungkar ti daytoy a wiki nga agus-usar ti IP a pagtaengan ket nakaaramid {{PLURAL:$1|iti 1 a pakabilangan|kadagiti $1 a pakabilangan}} iti nasakbayan nga aldaw, nga isu laeng ti kaadu a maipalubos iti daytoy a paset ti panawen.
 A kas ti nagbanagan, dagiti agsarsarungkar nga agus-usar ti IP a pagtaengan ket agdama a saanda a mabalin a makaaramid kadagiti pakabilangan.',
-'emailauthenticated' => 'Napasingkedan ti esurat a pagtaengan idi $2 idi $3.',
-'emailnotauthenticated' => 'Saan pay a napasingkedan ti esuratmo.
-Awan ti esurat a naipatulod para kadagiti sumaganad a langa.',
+'emailauthenticated' => 'Ti esurat a pagtaengam ket napatalgedan idi $2 idi $3.',
+'emailnotauthenticated' => 'Saan pay a napatalgedan ti esuratmo a pagtaengan.
+Awanto ti esurat a maipatulod para kadagiti sumaganad a langa.',
 'noemailprefs' => 'Ipanaganan ti esurat a pagtaengan tapno agbalin dagitoy a langa.',
 'emailconfirmlink' => 'Pasingkedam ti esurat a pagtaengam',
 'invalidemailaddress' => 'Ti esurat a pagtaengan ket saan a maawat ngamin ket kasla adda ti saan a napudno a porma.
@@ -1030,15 +1030,15 @@ Dagiti sabsabali nga administrador idiay {{SITENAME}} ket mabalinda a serrekan t
 * Di maiparbeng a  kabukbukodan a pakaammo
 * : ''dagiti pagtaengan ken numero ti telepono, numero ti sosial a seguridad, ken dadduma pay.''",
 'revdelete-legend' => 'Ikabil dagiti panagiparit ti panagkita',
-'revdelete-hide-text' => 'Ilemmeng ti testo ti binaliwan',
+'revdelete-hide-text' => 'Testo ti binaliwan',
 'revdelete-hide-image' => 'Ilemmeng ti linaon ti papeles',
 'revdelete-hide-name' => 'Ilemmeng ti aramid ken puntaan',
-'revdelete-hide-comment' => 'Ilemmeng ti pakabuklan ti inurnos',
-'revdelete-hide-user' => 'Ilemmeng ti nagan ti agar-amat/ti IP a pagtaengan',
+'revdelete-hide-comment' => 'Pakabuklan ti inurnos',
+'revdelete-hide-user' => 'Nagan ti agar-amat/ti IP a pagtaengan',
 'revdelete-hide-restricted' => 'Depdepen ti datos a naggapu kadagiti administrador ken dagiti sabsabali',
 'revdelete-radio-same' => '(saan a sukatan)',
-'revdelete-radio-set' => 'Wen',
-'revdelete-radio-unset' => 'Saan',
+'revdelete-radio-set' => 'Makita',
+'revdelete-radio-unset' => 'Nailemmeng',
 'revdelete-suppress' => 'Depdepen ti datos manipud kadagiti administrador ken dagiti sabsabali',
 'revdelete-unsuppress' => 'Ikkaten dagiti pannakaiparit kadagiti naisubli a binaliwan',
 'revdelete-log' => 'Rason:',
@@ -1197,7 +1197,6 @@ Laglagipem laeng a dagiti pagsurotan nagyan ti {{SITENAME}} ket baka baak.',
 'mypreferences' => 'Kakaykayatan',
 'prefs-edits' => 'Bilang dagiti inurnos:',
 'prefsnologin' => 'Saan a nakastrek',
-'prefsnologintext' => 'Masapul a <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} nakastrekka]</span> tapno makapili kadagiti kakaykayatam.',
 'changepassword' => 'Baliwan ti kontrasenias',
 'prefs-skin' => 'Kudil',
 'skin-preview' => 'Ipadas',
@@ -2759,7 +2758,7 @@ No iti kinaudi a kaso mabalinmo nga usaren ti silpo, a kas pagarigan [[{{#Specia
 'allmessagesdefault' => 'Kasisigud a testo ti mensahe',
 'allmessagescurrent' => 'Agdama a testo ti mensahe',
 'allmessagestext' => 'Daytoy ti listaan dagiti mensahe ti sistema a magun-od idiay MediaWiki a nagan ti espasio.
-Pangngaasi a bisitaen ti [//www.mediawiki.org/wiki/Localisation Lokalisasion ti MediaWiki] ken [//translatewiki.net translatewiki.net] no kayatmo ti agparawad kadagiti sapasap a panagipatarus ti MediaWiki.',
+Pangngaasi a bisitaen ti [https://www.mediawiki.org/wiki/Localisation Lokalisasion ti MediaWiki] ken [//translatewiki.net translatewiki.net] no kayatmo ti agparawad kadagiti sapasap a panagipatarus ti MediaWiki.',
 'allmessagesnotsupportedDB' => "Saan a mausar daytoy a panid ngamin ket ti '''\$wgUseDatabaseMessages''' ket nabaldado.",
 'allmessages-filter-legend' => 'Sagat',
 'allmessages-filter' => 'Sagaten babaen ti naipaduma a kasasaad:',
@@ -2951,7 +2950,7 @@ Daytoy ket mabalin a gapuanan babaen ti silpo a naiparit ti akin ruar a pagsaada
 'spam_blanking' => 'Dagiti amin a panagbaliw ket aglaon kadagiti silpo idiay $1, iblanko',
 'spam_deleting' => 'Dagiti amin a panagbaliw ket naglaon kadagiti silpo idiay $1, ik-ikkaten',
 'simpleantispam-label' => "Kontra-spam a panagkita.
- '''Saan''' mo a suratan daytoy!",
+ '''Saan''' a suratan daytoy!",
 
 # Info page
 'pageinfo-title' => 'Pakaammo para iti "$1"',
@@ -2965,6 +2964,7 @@ Daytoy ket mabalin a gapuanan babaen ti silpo a naiparit ti akin ruar a pagsaada
 'pageinfo-length' => 'Kaatiddog ti panid (kadagiti byte)',
 'pageinfo-article-id' => 'ID ti panid',
 'pageinfo-language' => 'Pagsasao ti naglaon a panid',
+'pageinfo-content-model' => 'Modelo ti linaon ti panid',
 'pageinfo-robot-policy' => 'Panagpasurot babaen dagiti robot',
 'pageinfo-robot-index' => 'Maipalubos',
 'pageinfo-robot-noindex' => 'Saan a maipalubos',
@@ -2985,7 +2985,7 @@ Daytoy ket mabalin a gapuanan babaen ti silpo a naiparit ti akin ruar a pagsaada
 'pageinfo-magic-words' => 'Salamangka  {{PLURAL:$1|a balikas|a balbalikas}} ($1)',
 'pageinfo-hidden-categories' => 'Nailemmeng {{PLURAL:$1|a kategoria|a katkategoria}} ($1)',
 'pageinfo-templates' => 'Nailak-am {{PLURAL:$1|a plantilia|a planplantilia}} ($1)',
-'pageinfo-transclusions' => '{{PLURAL:$1|A panid|A pampanid}} ti nailak-am idiay ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Panid|Pampanid}} a nakailak-aman ($1)',
 'pageinfo-toolboxlink' => 'Pakaammo ti panid',
 'pageinfo-redirectsto' => 'Maibaw-ing idiay',
 'pageinfo-redirectsto-info' => 'pakaammo',
@@ -3507,7 +3507,7 @@ Dagiti dadduma ket mailemmeng a kinasigud.
 
 # External editor support
 'edit-externally' => 'Baliwan daytoy a papeles babaen ti akinruar nga aplikasion',
-'edit-externally-help' => '(Kitaen ti [//www.mediawiki.org/wiki/Manual:External_editors instruksion iti panangikabil] para iti ad-adu pay a pakaammo).',
+'edit-externally-help' => '(Kitaen ti [https://www.mediawiki.org/wiki/Manual:External_editors instruksion iti panangikabil] para iti ad-adu pay a pakaammo).',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'amin',
@@ -3696,7 +3696,7 @@ Mabalinmo pay nga [[Special:EditWatchlist|usaren ti dati a panagurnos]].',
 'version-hook-subscribedby' => 'Umanamong babaen ti',
 'version-version' => '(Bersion $1)',
 'version-license' => 'Lisensia',
-'version-poweredby-credits' => "Daytoy a wiki ket pinaandar ti '''[//www.mediawiki.org/ MediaWiki]''', karbengan a kopia © 2001-$1 $2.",
+'version-poweredby-credits' => "Daytoy a wiki ket pinaandar ti '''[https://www.mediawiki.org/ MediaWiki]''', karbengan a kopia © 2001-$1 $2.",
 'version-poweredby-others' => 'dadduma pay',
 'version-poweredby-translators' => 'agipatpatarus ti translatewiki.net',
 'version-credits-summary' => 'Kayatmi koma a pammadayawan dagiti sumaganad a tao para kadagiti inparawadda iti [[Special:Version|MediaWiki]].',
@@ -3715,7 +3715,10 @@ Naka-awatka koman ti [{{SERVER}}{{SCRIPTPATH}}/COPYING kopia iti GNU Sapasap a
 # Special:Redirect
 'redirect' => 'Ibaw-ing babaen ti papeles, agar-aramat, wenno ID ti panagbaliw',
 'redirect-legend' => 'Ibaw-ing iti papeles wenno panid',
-'redirect-summary' => 'Daytoy nga espesial a panid ket maibaw-ing iti papeles (iti nagan ti papeles), ti panid (iti ID ti panagbaliw), wenno ti panid ti agar-aramat (iti numeriko nga ID ti agar-aramat).',
+'redirect-summary' => 'Daytoy nga espesial a panid ket maibaw-ing iti papeles (iti nagan ti papeles), ti panid (iti ID ti panagbaliw), wenno ti panid ti agar-aramat (iti numeriko nga ID ti agar-aramat). Panag-usar:
+[[{{#Special:Redirect}}/file/Example.jpg]], 
+[[{{#Special:Redirect}}/revision/328429]], wenno
+[[{{#Special:Redirect}}/user/101]].',
 'redirect-submit' => 'Inkan',
 'redirect-lookup' => 'Kitaen:',
 'redirect-value' => 'Pateg:',
@@ -3737,8 +3740,7 @@ Naka-awatka koman ti [{{SERVER}}{{SCRIPTPATH}}/COPYING kopia iti GNU Sapasap a
 
 # Special:SpecialPages
 'specialpages' => 'Espesial a pampanid',
-'specialpages-note' => '----
-* Kadawyan nga espesial a pampanid.
+'specialpages-note' => '* Kadawyan nga espesial a pampanid.
 * <span class="mw-specialpagerestricted">Nagawidan nga espesial a pampanid.</span>',
 'specialpages-group-maintenance' => 'Dagiti padamag ti panagtaripato',
 'specialpages-group-other' => 'Sabsabali pay nga espesial a pampanid',
index 0626ea7..282416e 100644 (file)
@@ -1088,7 +1088,7 @@ $messages = array(
 
 # External editor support
 'edit-externally' => 'Йола болхоагIувца паьла гIалатах мукъаяьккха',
-'edit-externally-help' => '(ма даррачунга хьажа [//www.mediawiki.org/wiki/Manual:External_editors хьаоттама кулгалхо])',
+'edit-externally-help' => '(ма даррачунга хьажа [https://www.mediawiki.org/wiki/Manual:External_editors хьаоттама кулгалхо])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'деррига',
index 599890c..257c0bc 100644 (file)
@@ -692,7 +692,6 @@ Probez prefixizar vua demando kun ''all:'' por serchar omna kontenajo (inkluzant
 'mypreferences' => 'Preferaji',
 'prefs-edits' => 'Nombro di redaktaji:',
 'prefsnologin' => 'Vu ne eniris',
-'prefsnologintext' => 'Vu mustas <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} enirir]</span> por establisar la preferaji.',
 'changepassword' => 'Chanjar pasovorto',
 'prefs-skin' => 'Pelo',
 'skin-preview' => 'Pre-videz',
@@ -1304,7 +1303,7 @@ Voluntez selektar altra nomo.',
 'allmessages' => 'Omna sistemo-mesaji',
 'allmessagesname' => 'Nomo',
 'allmessagestext' => 'Ico esas listo di omna sistemo-mesaji disponebla en la MediaWiki nomaro.
-Voluntez vizitar [//www.mediawiki.org/wiki/Localisation MediaWiki Lokizado] e [//translatewiki.net translatewiki.net] se vu volus kontributar ad generala MediaWiki lokizado.',
+Voluntez vizitar [https://www.mediawiki.org/wiki/Localisation MediaWiki Lokizado] e [//translatewiki.net translatewiki.net] se vu volus kontributar ad generala MediaWiki lokizado.',
 'allmessages-language' => 'Linguo:',
 
 # Thumbnails
index 54f931c..84e90f8 100644 (file)
@@ -1357,7 +1357,6 @@ Athugaðu að skrár þeirra yfir {{SITENAME}}-efni kunna að vera úreltar.',
 'mypreferences' => 'Mínar stillingar',
 'prefs-edits' => 'Fjöldi breytinga:',
 'prefsnologin' => 'Ekki innskráður',
-'prefsnologintext' => 'Þú verður að vera <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} skráð(ur) inn]</span> til að breyta notandastillingum.',
 'changepassword' => 'Breyta lykilorði',
 'prefs-skin' => 'Þema',
 'skin-preview' => 'Forskoða',
@@ -2895,7 +2894,7 @@ Ef síðari möguleikinn á við getur þú einnig notað tengil, til dæmis
 'allmessagesdefault' => 'Sjálfgefinn skilaboða texti',
 'allmessagescurrent' => 'Núverandi texti',
 'allmessagestext' => 'Þetta er listi yfir kerfismeldingar í Melding-nafnrýminu.
-Vinsamlegast heimsæktu [//www.mediawiki.org/wiki/Localisation MediaWiki-staðfæringuna] og [//translatewiki.net translatewiki.net] ef þú vilt taka þátt í almennri MediaWiki-staðfæringu.',
+Vinsamlegast heimsæktu [https://www.mediawiki.org/wiki/Localisation MediaWiki-staðfæringuna] og [//translatewiki.net translatewiki.net] ef þú vilt taka þátt í almennri MediaWiki-staðfæringu.',
 'allmessagesnotsupportedDB' => "Það er ekki hægt að nota '''{{ns:special}}:Allmessages''' því '''\$wgUseDatabaseMessages''' hefur verið gerð óvirk.",
 'allmessages-filter-legend' => 'Sía',
 'allmessages-filter' => 'Sía með breytingarstöðu:',
@@ -3623,7 +3622,7 @@ Ef skránni hefur verið breytt, kann að vera að einhverjar upplýsingar eigi
 
 # External editor support
 'edit-externally' => 'Breyta þessari skrá með utanaðkomandi hugbúnaði',
-'edit-externally-help' => '(Sjá [//www.mediawiki.org/wiki/Manual:External_editors leiðbeiningar] fyrir meiri upplýsingar)',
+'edit-externally-help' => '(Sjá [https://www.mediawiki.org/wiki/Manual:External_editors leiðbeiningar] fyrir meiri upplýsingar)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'allt',
@@ -3790,7 +3789,7 @@ einn titil í hverri línu.
 'version-hook-subscribedby' => 'Í áskrift af',
 'version-version' => '(Útgáfa $1)',
 'version-license' => 'Leyfi',
-'version-poweredby-credits' => "Þessi wiki er knúin af '''[//www.mediawiki.org/ MediaWiki]''', höfundaréttur © 2001-$1 $2.",
+'version-poweredby-credits' => "Þessi wiki er knúin af '''[https://www.mediawiki.org/ MediaWiki]''', höfundaréttur © 2001-$1 $2.",
 'version-poweredby-others' => 'aðrir',
 'version-license-info' => 'MediaWiki er frjáls hugbúnaður; þú mátt endurútgefa hann og/eða breyta honum undir GNU General Public leyfi eins og það er gefið út af Free Software stofnuninni, annaðhvort útgáfu 2 eða (að þínu mati) hvaða nýrri útgáfa sem er.
 
@@ -3823,8 +3822,7 @@ MediaWiki er útgefin í þeirri von að hann sé gagnlegur, en ÁN ALLRAR ÁBYR
 
 # Special:SpecialPages
 'specialpages' => 'Kerfissíður',
-'specialpages-note' => '----
-* Venjulegar kerfisíður.
+'specialpages-note' => '* Venjulegar kerfisíður.
 * <span class="mw-specialpagerestricted">Kerfisíður með takmörkuðum aðgangi.</span>',
 'specialpages-group-maintenance' => 'Viðhaldsskýrslur',
 'specialpages-group-other' => 'Aðrar kerfissíður',
index b633869..06ef669 100644 (file)
@@ -699,7 +699,8 @@ L\'amministratore che lo ha bloccato ha fornito questa motivazione: "$3".',
 'invalidtitle-knownnamespace' => 'Titolo non valido con namespace "$2" e testo "$3"',
 'invalidtitle-unknownnamespace' => 'Titolo non valido con namespace sconosciuto "$1" e testo "$2"',
 'exception-nologin' => 'Accesso non effettuato',
-'exception-nologin-text' => "Questa pagina o azione richiede che tu abbia effettuato l'accesso su questa wiki.",
+'exception-nologin-text' => "Si prega di [[Special:Userlogin|eseguire l'accesso]] per poter accedere a questa pagina o azione.",
+'exception-nologin-text-manual' => 'Si prega di $1 per poter accedere a questa pagina o azione.',
 
 # Virus scanner
 'virus-badscanner' => "Errore di configurazione: antivirus sconosciuto: ''$1''",
@@ -1233,8 +1234,9 @@ In quanto amministratore puoi visualizzare questo confronto di versioni; potrebb
 'revdelete-text' => "'''Le versioni cancellate restano visibili nella cronologia della pagina, mentre il testo contenuto non è accessibile al pubblico.'''
 Gli altri amministratori di {{SITENAME}} potranno accedere comunque ai contenuti nascosti e ripristinarli attraverso questa stessa interfaccia, se non sono state impostate altre limitazioni in fase di installazione del sito.",
 'revdelete-confirm' => 'Per favore conferma che questo è quanto intendi fare, che sei consapevole delle conseguenze, e che stai facendo questo nel rispetto delle [[{{MediaWiki:Policy-url}}|linee guida]].',
-'revdelete-suppress-text' => "La rimozione deve essere utilizzata '''unicamente''' nei seguenti casi:
-* Dati personali inopportuni
+'revdelete-suppress-text' => "La rimozione dovrebbe essere utilizzata '''unicamente''' nei seguenti casi:
+* informazioni potenzialmente diffamatorie
+* dati personali inopportuni
 *: ''indirizzi, numeri di telefono, codici fiscali, ecc.''",
 'revdelete-legend' => 'Imposta le seguenti limitazioni sulle versioni cancellate:',
 'revdelete-hide-text' => 'Testo della versione',
@@ -1244,8 +1246,8 @@ Gli altri amministratori di {{SITENAME}} potranno accedere comunque ai contenuti
 'revdelete-hide-user' => "Nome o indirizzo IP dell'autore",
 'revdelete-hide-restricted' => 'Nascondi le informazioni indicate anche agli amministratori',
 'revdelete-radio-same' => '(non cambiare)',
-'revdelete-radio-set' => 'Visibile',
-'revdelete-radio-unset' => 'Nascosto',
+'revdelete-radio-set' => 'Nascondi',
+'revdelete-radio-unset' => 'Mostra',
 'revdelete-suppress' => 'Nascondi le informazioni anche agli amministratori',
 'revdelete-unsuppress' => 'Elimina le limitazioni sulle revisioni ripristinate',
 'revdelete-log' => 'Motivo:',
@@ -1396,7 +1398,7 @@ I dettagli possono essere trovati nel [{{fullurl:{{#Special:Log}}/delete|page={{
 'mypreferences' => 'preferenze',
 'prefs-edits' => 'Modifiche effettuate:',
 'prefsnologin' => 'Accesso non effettuato',
-'prefsnologintext' => 'Per poter personalizzare le preferenze è necessario effettuare l\'<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} accesso]</span>.',
+'prefsnologintext2' => "Si prega di $1 per impostare le preferenze dell'utente.",
 'changepassword' => 'Cambia password',
 'prefs-skin' => 'Aspetto grafico (skin)',
 'skin-preview' => 'Anteprima',
@@ -2410,9 +2412,9 @@ Contatta l\'autore:
 via posta elettronica: $PAGEEDITOR_EMAIL
 sul sito: $PAGEEDITOR_WIKI
 
-Non verranno inviate altre notifiche in caso di ulteriori attività, se non visiti la pagina. Inoltre, è possibile modificare le impostazioni di notifica per tutte le pagine nella lista degli osservati speciali.
+Non verranno inviate altre notifiche in caso di ulteriori attività, se non visiti la pagina dopo aver effettuato l\'accesso. Inoltre, è possibile modificare le impostazioni di notifica per tutte le pagine nella lista degli osservati speciali.
 
-             Il sistema di notifica di {{SITENAME}}, al tuo servizio
+Il sistema di notifica di {{SITENAME}}, al tuo servizio
 
 --
 Per modificare le impostazioni delle notifiche via posta elettronica, visita 
@@ -2906,7 +2908,7 @@ In quest'ultimo caso si può anche utilizzare un collegamento, ad esempio [[{{#S
 'allmessagesdefault' => 'Testo predefinito',
 'allmessagescurrent' => 'Testo attuale',
 'allmessagestext' => 'Questa è la lista di tutti i messaggi di sistema disponibili nel namespace MediaWiki.
-Visitare [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] se si desidera contribuire alla localizzazione generica di MediaWiki.',
+Visitare [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] se si desidera contribuire alla localizzazione generica di MediaWiki.',
 'allmessagesnotsupportedDB' => "Non è possibile utilizzare questa pagina perché il flag '''\$wgUseDatabaseMessages''' non è attivo.",
 'allmessages-filter-legend' => 'Filtro',
 'allmessages-filter' => 'Filtra per stato di modifica:',
@@ -3130,6 +3132,7 @@ Tutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log
 'pageinfo-length' => 'Lunghezza della pagina (in byte)',
 'pageinfo-article-id' => 'ID della pagina',
 'pageinfo-language' => 'Lingua del contenuto della pagina',
+'pageinfo-content-model' => 'Modello del contenuto della pagina',
 'pageinfo-robot-policy' => 'Indicizzazione per i robot',
 'pageinfo-robot-index' => 'Consentito',
 'pageinfo-robot-noindex' => 'Non consentito',
@@ -3209,7 +3212,7 @@ $1',
 'svg-long-desc' => 'file in formato SVG, dimensioni nominali $1 × $2 pixel, dimensione del file: $3',
 'svg-long-desc-animated' => 'file in formato SVG animato, dimensioni nominali $1 × $2 pixel, dimensione del file: $3',
 'svg-long-error' => 'File SVG non valido: $1',
-'show-big-image' => 'Versione ad alta risoluzione',
+'show-big-image' => 'File originale',
 'show-big-image-preview' => 'Dimensioni di questa anteprima: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Altra risoluzione|Altre risoluzioni}}: $1.',
 'show-big-image-size' => '$1 × $2 pixel',
@@ -3686,7 +3689,7 @@ I collegamenti successivi, sulla stessa riga, sono considerati come eccezioni (o
 
 # External editor support
 'edit-externally' => 'Modifica questo file usando un programma esterno',
-'edit-externally-help' => '(Per maggiori informazioni consultare le [//www.mediawiki.org/wiki/Manual:External_editors istruzioni])',
+'edit-externally-help' => '(Per maggiori informazioni consultare le [https://www.mediawiki.org/wiki/Manual:External_editors istruzioni])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tutte',
@@ -3785,6 +3788,7 @@ Per favore, conferma che vuoi veramente ricreare questa pagina.",
 
 # Separators for various lists, etc.
 'percent' => '$1&#160;%',
+'quotation-marks' => '«$1»',
 
 # Multipage image navigation
 'imgmultipageprev' => '← pagina precedente',
@@ -3879,7 +3883,7 @@ Si noti che è anche possibile [[Special:EditWatchlist|modificare la lista con l
 'version-hook-subscribedby' => 'Sottoscrizioni',
 'version-version' => '(Versione $1)',
 'version-license' => 'Licenza',
-'version-poweredby-credits' => "Questo wiki è realizzato con '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Questo wiki è realizzato con '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'altri',
 'version-poweredby-translators' => 'traduttori di translatewiki.net',
 'version-credits-summary' => 'Siamo lieti di riconoscere le seguenti persone per aver contribuito a [[Special:Version|MediaWiki]].',
@@ -3923,10 +3927,9 @@ Esempi: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revi
 
 # Special:SpecialPages
 'specialpages' => 'Pagine speciali',
-'specialpages-note' => '----
-* Pagine speciali non riservate.
-* <span class="mw-specialpagerestricted">Pagine speciali riservate ad alcune categorie di utenti.</span>
-* <span class="mw-specialpagecached">Pagine speciali disponibili in versione cache (potrebbero essere obsolete).</span>',
+'specialpages-note-top' => 'Legenda',
+'specialpages-note' => '* Pagine speciali non riservate.
+* <span class="mw-specialpagerestricted">Pagine speciali riservate ad alcune categorie di utenti.</span>',
 'specialpages-group-maintenance' => 'Resoconti di manutenzione',
 'specialpages-group-other' => 'Altre pagine speciali',
 'specialpages-group-login' => 'Accesso / creazione utenze',
index 364e212..ccb6d97 100644 (file)
@@ -782,7 +782,8 @@ $2',
 'invalidtitle-knownnamespace' => '名前空間名「$2」と名前「$3」の組み合わせはページ名として無効です',
 'invalidtitle-unknownnamespace' => '不明な名前空間番号 $1 と名前「$2」の組み合わせはページ名として無効です',
 'exception-nologin' => 'ログインしていません',
-'exception-nologin-text' => 'このページまたは操作には、このウィキへのログインが必要です。',
+'exception-nologin-text' => 'このページまたは操作にアクセスできるようにするには[[Special:Userlogin|ログイン]]してください。',
+'exception-nologin-text-manual' => 'このページまたは操作にアクセスできるようにするには$1してください。',
 
 # Virus scanner
 'virus-badscanner' => "環境設定が不適合です: 不明なウイルス対策ソフトウェア: ''$1''",
@@ -795,7 +796,7 @@ $2',
 ページによっては、ブラウザーのキャッシュをクリアするまで、ログインしているかのように表示され続ける場合があるためご注意ください。",
 'welcomeuser' => 'ようこそ、$1さん!',
 'welcomecreation-msg' => 'アカウントが作成されました。
-[[Special:Preferences|{{SITENAME}}の個人設定]]の変更も忘れないようにしてください。',
+お好みで[[Special:Preferences|{{SITENAME}}の個人設定]]を変更できます。',
 'yourname' => '利用者名:',
 'userlogin-yourname' => '利用者名',
 'userlogin-yourname-ph' => '利用者名を入力',
@@ -1365,7 +1366,7 @@ $3が示した理由: ''$2''",
 'revdelete-suppress-text' => "秘匿は、'''以下の場合に限って'''使用すべきです:
 * 名誉毀損のおそれがある記述
 * 非公開個人情報
-*: ''自宅の住所、電話番号、社会保障番号など''",
+*: ''自宅の住所、電話番号、個人を識別できる公的な番号など''",
 'revdelete-legend' => '閲覧レベル制限を設定',
 'revdelete-hide-text' => '版の本文',
 'revdelete-hide-image' => 'ファイル内容を隠す',
@@ -1374,8 +1375,8 @@ $3が示した理由: ''$2''",
 'revdelete-hide-user' => '投稿者の利用者名/IPアドレス',
 'revdelete-hide-restricted' => '他の利用者と同様に管理者からもデータを隠す',
 'revdelete-radio-same' => '(変更しない)',
-'revdelete-radio-set' => '表示',
-'revdelete-radio-unset' => 'é\9d\9e表示',
+'revdelete-radio-set' => '非公開',
+'revdelete-radio-unset' => 'é\96²è¦§å\8f¯è\83½',
 'revdelete-suppress' => '他の利用者と同様に管理者からもデータを隠す',
 'revdelete-unsuppress' => '復元版に対する制限を除去',
 'revdelete-log' => '理由:',
@@ -1535,7 +1536,7 @@ $1",
 'mypreferences' => '個人設定',
 'prefs-edits' => '編集回数:',
 'prefsnologin' => 'ログインしていません',
-'prefsnologintext' => '個人設定を変更するためには<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ログイン]</span>する必要があります。',
+'prefsnologintext2' => '個人設定を変更するには$1してください。',
 'changepassword' => 'パスワードの変更',
 'prefs-skin' => '外装',
 'skin-preview' => 'プレビュー',
@@ -2593,9 +2594,9 @@ $PAGEINTRO $NEWPAGE
 メール: $PAGEEDITOR_EMAIL
 ウィキ: $PAGEEDITOR_WIKI
 
-このページを訪れない限り、これ以上の活動に対する通知は送信されません。ウォッチリスト内のすべてのページについて、通知を再設定することもできます。
\83­ã\82°ã\82¤ã\83³ã\81\97ã\81\9fç\8a¶æ\85\8bã\81§ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92訪ã\82\8cã\81ªã\81\84é\99\90ã\82\8aã\80\81ã\81\93ã\82\8c以ä¸\8aã\81®æ´»å\8b\95ã\81«å¯¾ã\81\99ã\82\8bé\80\9aç\9f¥ã\81¯é\80\81ä¿¡ã\81\95ã\82\8cã\81¾ã\81\9bã\82\93ã\80\82ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88å\86\85ã\81®ã\81\99ã\81¹ã\81¦ã\81®ã\83\9aã\83¼ã\82¸ã\81«ã\81¤ã\81\84ã\81¦ã\80\81é\80\9aç\9f¥ã\82\92å\86\8d設å®\9aã\81\99ã\82\8bã\81\93ã\81¨ã\82\82ã\81§ã\81\8dã\81¾ã\81\99ã\80\82
 
-                         {{SITENAME}}通知システム
+{{SITENAME}}通知システム
 
 --
 メール通知の設定は、以下のページで変更してください:
@@ -3128,7 +3129,7 @@ $1 のブロックの理由は「''$2''」です。",
 'allmessagesdefault' => '既定のメッセージ文',
 'allmessagescurrent' => '現在のメッセージ文',
 'allmessagestext' => 'これは MediaWiki 名前空間で利用できるシステム メッセージの一覧です。
-MediaWiki 全般のローカライズ (地域化) に貢献したい場合は、[//www.mediawiki.org/wiki/Localisation/ja MediaWiki のローカライズ]や [//translatewiki.net?setlang=ja translatewiki.net] をご覧ください。',
+MediaWiki 全般のローカライズ (地域化) に貢献したい場合は、[https://www.mediawiki.org/wiki/Localisation/ja MediaWiki のローカライズ]や [//translatewiki.net?setlang=ja translatewiki.net] をご覧ください。',
 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages'''が無効のため、このページを使用できません。",
 'allmessages-filter-legend' => '絞り込み',
 'allmessages-filter' => '変更状態により絞り込む:',
@@ -3295,6 +3296,7 @@ $2',
 'tooltip-undo' => '「取り消し」はこの編集を差し戻し、編集画面をプレビュー付きで開きます。要約欄に理由を追加できます。',
 'tooltip-preferences-save' => '設定を保存する',
 'tooltip-summary' => '短い要約を入力してください',
+'interlanguage-link-title' => '$1 – $2',
 
 # Stylesheets
 'common.css' => '/* ここに記述したCSSはすべての外装に反映されます */',
@@ -3359,6 +3361,7 @@ $2',
 'pageinfo-length' => 'ページの長さ (バイト単位)',
 'pageinfo-article-id' => 'ページ ID',
 'pageinfo-language' => 'ページ本文の言語',
+'pageinfo-content-model' => 'ページのコンテンツ モデル',
 'pageinfo-robot-policy' => 'ロボットによるインデックス作成',
 'pageinfo-robot-index' => '許可',
 'pageinfo-robot-noindex' => '不許可',
@@ -3447,7 +3450,7 @@ $1',
 'svg-long-desc' => 'SVG ファイル、$1 × $2 ピクセル、ファイルサイズ: $3',
 'svg-long-desc-animated' => 'アニメーション SVG ファイル、$1 × $2 ピクセル、ファイルサイズ: $3',
 'svg-long-error' => '無効な SVG ファイル: $1',
-'show-big-image' => '高解像度での画像',
+'show-big-image' => '元のファイル',
 'show-big-image-preview' => 'このプレビューのサイズ: $1。',
 'show-big-image-other' => 'その他の{{PLURAL:$2|解像度}}: $1。',
 'show-big-image-size' => '$1 × $2 ピクセル',
@@ -3974,7 +3977,7 @@ Variants for Chinese language
 
 # External editor support
 'edit-externally' => '外部アプリケーションを使用してこのファイルを編集',
-'edit-externally-help' => '(詳しくは[//www.mediawiki.org/wiki/Manual:External_editors 設定手順]をご覧ください)',
+'edit-externally-help' => '(詳しくは[https://www.mediawiki.org/wiki/Manual:External_editors 設定手順]をご覧ください)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'すべて',
@@ -4084,6 +4087,7 @@ $5
 'pipe-separator' => '&#32;|&#32;',
 'word-separator' => '&#32;',
 'parentheses' => '($1)',
+'quotation-marks' => '「$1」',
 
 # Multipage image navigation
 'imgmultipageprev' => '&larr;前ページ',
@@ -4241,7 +4245,7 @@ $5
 'version-hook-subscribedby' => '使用個所',
 'version-version' => '(バージョン $1)',
 'version-license' => 'ライセンス',
-'version-poweredby-credits' => "このウィキは、'''[//www.mediawiki.org/ MediaWiki]''' (copyright © 2001-$1 $2) で動作しています。",
+'version-poweredby-credits' => "このウィキは、'''[https://www.mediawiki.org/ MediaWiki]''' (copyright © 2001-$1 $2) で動作しています。",
 'version-poweredby-others' => 'その他',
 'version-poweredby-translators' => 'translatewiki.net の翻訳者たち',
 'version-credits-summary' => '[[Special:Version|MediaWiki]] に貢献した以下の人たちに感謝します。',
@@ -4284,8 +4288,8 @@ MediaWikiは、有用であることを期待して配布されていますが
 
 # Special:SpecialPages
 'specialpages' => '特別ページ',
-'specialpages-note' => '----
-* 通常の特別ページ
+'specialpages-note-top' => '凡例',
+'specialpages-note' => '* 通常の特別ページ
 * <span class="mw-specialpagerestricted">制限されている特別ページ</span>',
 'specialpages-group-maintenance' => 'メンテナンス報告',
 'specialpages-group-other' => 'その他の特別ページ',
index a5f8339..8e7a041 100644 (file)
@@ -1067,7 +1067,7 @@ Ada wandem wi aid bai difaalt.
 
 # External editor support
 'edit-externally' => 'Yuuz extoernal aplikieshan fi edit dis fail',
-'edit-externally-help' => '(Si di [//www.mediawiki.org/wiki/Manual:External_editors setop inschrokshan] fi muo infamieshan)',
+'edit-externally-help' => '(Si di [https://www.mediawiki.org/wiki/Manual:External_editors setop inschrokshan] fi muo infamieshan)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'aal',
index 82b4075..818acc5 100644 (file)
@@ -1065,7 +1065,6 @@ Rinciané bisa ditemokaké nèng [{{fullurl:{{#Special:Log}}/delete|page={{FULLP
 'mypreferences' => 'Préferènsi',
 'prefs-edits' => 'Gunggungé suntingan:',
 'prefsnologin' => 'Durung mlebu log',
-'prefsnologintext' => 'Panjenengan kudu <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}}| mlebu log]</span> kanggo ngowahin préferènsi njenengan.',
 'changepassword' => 'Ganti tembung sandi',
 'prefs-skin' => 'Kulit',
 'skin-preview' => 'Pratilik',
@@ -2543,7 +2542,7 @@ Yèn panjenengan namun péngin ngimpor vèrsi pungkasan, panjenengan uga bisa ng
 'allmessagesdefault' => 'Tèks baku',
 'allmessagescurrent' => 'Tèks saiki',
 'allmessagestext' => 'Iki dhaptar kabèh pesen saka sistem sing ana ing bilik jeneng MediaWiki.
-Mangga pirsani [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] lan [//translatewiki.net translatewiki.net] yèn panjenengan arep kontribusi ing lokalisasi generik MediaWiki.',
+Mangga pirsani [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] lan [//translatewiki.net translatewiki.net] yèn panjenengan arep kontribusi ing lokalisasi generik MediaWiki.',
 'allmessagesnotsupportedDB' => "Kaca iki ora bisa dienggo amerga '''\$wgUseDatabaseMessages''' dipatèni.",
 'allmessages-filter-legend' => 'Penyaring',
 'allmessages-filter' => 'Saring nganggo kahanan kustomisasi:',
@@ -3274,7 +3273,7 @@ Pranala-pranala sabanjuré ing baris sing padha dianggep minangka ''pengecualian
 
 # External editor support
 'edit-externally' => 'Sunting berkas iki mawa aplikasi jaba',
-'edit-externally-help' => '(Deleng [//www.mediawiki.org/wiki/Manual:External_editors instruksi pangaturan] kanggo informasi sabanjuré)',
+'edit-externally-help' => '(Deleng [https://www.mediawiki.org/wiki/Manual:External_editors instruksi pangaturan] kanggo informasi sabanjuré)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'kabèh',
@@ -3445,7 +3444,7 @@ Panjenengan uga bisa [[Special:EditWatchlist|nganggo éditor standar panjenengan
 'version-hook-subscribedby' => 'Dilanggani déning',
 'version-version' => '(Vèrsi $1)',
 'version-license' => 'Lisènsi',
-'version-poweredby-credits' => "Wiki iki disengkuyung déning '''[//www.mediawiki.org/ MediaWiki]''', hak cipta © 2001-$1 $2.",
+'version-poweredby-credits' => "Wiki iki disengkuyung déning '''[https://www.mediawiki.org/ MediaWiki]''', hak cipta © 2001-$1 $2.",
 'version-poweredby-others' => 'liyané',
 'version-credits-summary' => 'Kami ingin mengakui orang-orang berikut atas kontribusinya terhadap [[Special:Version|MediaWiki]].',
 'version-license-info' => 'MediaWiki adalah perangkat lunak bebas; Anda diperbolehkan untuk mendistribusikan dan/atau memodfikasinya dengan persyaratan Lisensi Publik Umum GNU yang diterbitkan oleh Free Software Foundation; versi 2 atau terbaru.
@@ -3473,8 +3472,7 @@ Anda seharusnya telah menerima [{{SERVER}}{{SCRIPTPATH}}/COPYING salinan Lisensi
 
 # Special:SpecialPages
 'specialpages' => 'Kaca istiméwa',
-'specialpages-note' => '----
-* Kaca astamiwa biasa.
+'specialpages-note' => '* Kaca astamiwa biasa.
 * <span class="mw-specialpagerestricted">Kaca astamiwa kawatesan.</span>',
 'specialpages-group-maintenance' => 'Lapuran pangopènan',
 'specialpages-group-other' => 'Kaca-kaca astaméwa liyané',
index dfcdb94..b8bd501 100644 (file)
@@ -625,9 +625,10 @@ $2',
 'gotaccount' => "უკვე რეგისტრირებული ხართ? '''$1'''",
 'gotaccountlink' => 'შესვლა',
 'userlogin-resetlink' => 'ავტორიზაციის მონაცემები დაგავიწყდათ?',
-'userlogin-resetpassword-link' => 'á\83\9eá\83\90á\83 á\83\9dá\83\9aá\83\98á\83¡ á\83\9bá\83\9dá\83ªá\83\98á\83\9aá\83\94á\83\91á\83\90',
+'userlogin-resetpassword-link' => 'á\83\93á\83\90á\83\92á\83\90á\83\95á\83\98á\83¬á\83§á\83\93á\83\90á\83\97 á\83\9eá\83\90á\83 á\83\9dá\83\9aá\83\98?',
 'helplogin-url' => 'Help:შესვლა',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|დახმარება სისტემაში შესასვლელად]]',
+'userlogin-createanother' => 'სხვა ანგარიშის შექმნა',
 'createacct-join' => 'ქვემოთ მიუთითეთ ინფორმაცია თქვენ შესახებ.',
 'createacct-emailrequired' => 'ელ. ფოსტის მისამართი',
 'createacct-emailoptional' => 'ელ. ფოსტის მისამართი (არასავალდებულო)',
@@ -688,16 +689,16 @@ $2',
 'passwordsent' => 'ახალი პაროლი გაიგზავნა ელ-ფოსტით მომხმარებელს "$1".
 გთხოვთ შეხვიდეთ სისტემაში მისი მიღების შემდეგ.',
 'blocked-mailpassword' => 'თქვენი IP მისამართი რედაქტირებისთვის დაბლოკილია, ამიტომ არ შეგიძლიათ პაროლის აღდგენის გამოყენება კონფლიქტის გამო.',
-'eauthentsent' => 'დამადასტურებელი შეტყობინება გაიგზავნა თქვენს მიერ მითითებულ ელ. ფოსტის მისამართზე.
-სანამ ნებისმიერი სხვა შეტყობინება გაიგზავნებოდეს თქვენს ანგარიშზე, გთხოვთ მიჰყვეთ ელ.
-ფოსტაში მითითებულ ინსტრუქციებს, რათა დაადასტუროთ რომ ანგარიში ნამდვილად თქვენია.',
+'eauthentsent' => 'A confirmation email has been sent to the specified email address.
+Before any other email is sent to the account, you will have to follow the instructions in the email, to confirm that the account is actually yours.',
 'throttled-mailpassword' => 'პაროლის შეხსენება უკვე გაგზავნილია ბოლო {{PLURAL:$1|საათის|$1 საათის}} განმავლობაში.
 ბოროტად გამოყენების თავიდან აცილებისთვის, მხოლოდ ერთი შეხსენება იგზავნება ყოველ {{PLURAL:$1|საათში|$1 საათში}}.',
 'mailerror' => 'შეცდომა ფოსტის გაგზავნაში: $1',
 'acct_creation_throttle_hit' => '24 საათის განმავლობაში თქვენი IP-მისამართითან {{PLURAL:$1|შეიქმნა $1 ანგარიში|შეიქმნა $1 ანგარიშები|შეიქმნა $1 ანგარიშის}}, რაც არის აკრძალული დროის ამ მონაკვეთისთის.
 აქედან გამომდინარე თქვენი IP-მისამართის მქონე მომხმარებლები ვეღარ შექმნიან ანგარიშები.',
-'emailauthenticated' => 'თქვენი ელ. ფოსტის მისამართი გადამოწმებულია $2 $3-ზე.',
-'emailnotauthenticated' => 'თქვენი ელ. ფოსტის მისამართი ჯერ არ არის გადამოწმებული. შემდეგი ფუნქციები გამორთულია.',
+'emailauthenticated' => 'თქვენი ელ.ფოსტის მისამართი დადასტურებულია $2 $3-ზე.',
+'emailnotauthenticated' => 'თქვენი ელ.ფოსტის მისამართი ჯერ არ არის დადასტურებული. 
+არცერთი შემდეგი ფუნქციისათვის წერილები არ გამოიგზავნება.',
 'noemailprefs' => 'თქვენ არ გაქვთ ელ. ფოსტის მისამართი მითითებული,აღნიშნული ფუნქციები ამის გამო არ დროისთვის შეუძლებელია.',
 'emailconfirmlink' => 'დაადასტურეთ თქვენი ელ. ფოსტის მისამართი',
 'invalidemailaddress' => 'ელ. ფოსტის მისამართი არ იქნა მიღებული, ვინაიდან იგი არასწორი ფორმატითაა წარმოდგენილი.
@@ -711,8 +712,8 @@ $2',
 
 შეგიძლიათ ყურადღება არ მიაქციოთ ამ შეტყობინებას, თუ ანგარიში შეცდომით შეიქმნა.',
 'usernamehasherror' => 'მომხმარებლის სახელი არ უნდა შეიცავდეს დიეზის სიმბოლოს.',
-'login-throttled' => 'თქვენ განახორციელეთ ძალიან ბევრი პაროლის შეყვანა ამ ანგარიშისთვის.
-გამორებით შეყვანამდე გთხოვთ დაელოდოთ.',
+'login-throttled' => 'You have made too many recent login attempts.
+Please wait $1 before trying again.',
 'login-abort-generic' => 'თქვენი ავტორიზაცია წარუმატებელია – გაუქმდა',
 'loginlanguagelabel' => 'ენა: $1',
 'suspicious-userlogout' => 'თქვენი მოთხოვნა გასვლის შესახებ გაუქმებულია, რადგანაც იგი გავს ქეშირებადი პროქსის ან არაკორექტული ბრაუზერის მოთხოვნას.',
@@ -731,7 +732,7 @@ $2',
 'newpassword' => 'ახალი პაროლი:',
 'retypenew' => 'ახალი პაროლი განმეორებით:',
 'resetpass_submit' => 'მიუთითეთ პაროლი და დარეგისტრირდით',
-'changepassword-success' => 'თქვენი პაროლი წარმატებით შეიცვალა! ამჟამად რეგისტრირდებით...',
+'changepassword-success' => 'თქვენი პაროლი წარმატებით შეიცვალა!',
 'resetpass_forbidden' => 'პაროლის შეცვლა შეუძლებელია',
 'resetpass-no-info' => 'კონკრეტულად ამ გვერდთან სამუშაოდ თქვენ უნდა წარადგინოთ თავი სისტემისადმი.',
 'resetpass-submit-loggedin' => 'პაროლის შეცვლა',
@@ -744,7 +745,7 @@ $2',
 # Special:PasswordReset
 'passwordreset' => 'პაროლის აღდგენა',
 'passwordreset-text-one' => 'შეავსეთ ეს ფორმა, რათა კვლავ დააყენოთ თქვენი პაროლი.',
-'passwordreset-text-many' => '{{PLURAL:$1|á\83\9eá\83\90á\83 á\83\9dá\83\9aá\83\98á\83¡ á\83\97á\83\90á\83\95á\83\98á\83\93á\83\90á\83\9c á\83\93á\83\90á\83¡á\83\90á\83§á\83\94á\83\9cá\83\94á\83\91á\83\9aá\83\90á\83\93 á\83¨á\83\94á\83\98á\83§á\83\95á\83\90á\83\9cá\83\94á\83\97 á\83\9bá\83\9dá\83\9cá\83\90á\83ªá\83\94á\83\9bá\83\97á\83\90 á\83\94á\83 á\83\97\83\94á\83 á\83\97á\83\98 á\83\9cá\83\90á\83¬á\83\98ლი.}}',
+'passwordreset-text-many' => '{{PLURAL:$1|á\83\9eá\83\90á\83 á\83\9dá\83\9aá\83\98á\83¡ á\83\97á\83\90á\83\95á\83\98á\83\93á\83\90á\83\9c á\83\93á\83\90á\83¡á\83\90á\83§á\83\94á\83\9cá\83\94á\83\91á\83\9aá\83\90á\83\93 á\83¨á\83\94á\83\90á\83\95á\83¡á\83\94á\83\97 á\83\94á\83 á\83\97\83\94á\83 á\83\97á\83\98 á\83\95á\83\94ლი.}}',
 'passwordreset-legend' => 'პაროლის აღდგენა',
 'passwordreset-disabled' => 'ამ ვიკიში პაროლის კვლავ დაყენების ფუნქცია გამორთულია.',
 'passwordreset-emaildisabled' => 'ამ ვიკიში ელ.ფოსტის ფუნქციები გამორთულია.',
@@ -1009,7 +1010,7 @@ $2
 
 # Content models
 'content-model-wikitext' => 'ვიკიტექსტი',
-'content-model-text' => 'á\83£á\83\91á\83 á\83\90á\83\9aá\83\9d ტექსტი',
+'content-model-text' => 'á\83©á\83\95á\83\94á\83£á\83\9aá\83\94á\83\91á\83 á\83\98á\83\95á\83\98 ტექსტი',
 'content-model-javascript' => 'ჯავასკრიპტი',
 'content-model-css' => 'CSS',
 
@@ -1133,15 +1134,15 @@ $3 -ემ ამგვარი ახსნა : ''$2''",
 * მიუსადეგი პირადი ინფორმაცია
 *: ''სახლის მისამართი, ტელეფონისა და პასპორტის ნომერი და მისთ. ''",
 'revdelete-legend' => 'შეზღუდვის დაყენება',
-'revdelete-hide-text' => 'შეცვლილი ტექსტის დამალვა',
+'revdelete-hide-text' => 'შეცვლილი ტექსტი',
 'revdelete-hide-image' => 'ფაილის შინაარსის დამალვა',
 'revdelete-hide-name' => 'დამალეთ მოქმედება და მისი ობიექტი',
-'revdelete-hide-comment' => 'რედაქტირების კომენტარის დამალვა',
-'revdelete-hide-user' => 'რედაქტორის მომხ. სახელის/IP-ს დამალვა',
+'revdelete-hide-comment' => 'რედაქტირების კომენტარი',
+'revdelete-hide-user' => 'რედაქტორის მომხმარებლის სახელი/IP-მისამართი',
 'revdelete-hide-restricted' => 'დამალეთ მონაცემები ადმინისტრატორთაგან',
 'revdelete-radio-same' => '(არ შეცვალოთ)',
-'revdelete-radio-set' => 'á\83\93á\83\98á\83\90á\83®',
-'revdelete-radio-unset' => 'á\83\90á\83 á\83\90',
+'revdelete-radio-set' => 'á\83®á\83\98á\83\9aá\83£á\83\9aá\83\98',
+'revdelete-radio-unset' => 'á\83\93á\83\90á\83\9bá\83\90á\83\9aá\83£á\83\9aá\83\98',
 'revdelete-suppress' => 'დამალეთ მონაცემები ადმინისტრატორთაგან',
 'revdelete-unsuppress' => 'მოხსენით შეზღუდვა ვერსიების აღდგენისგან',
 'revdelete-log' => 'მიზეზი:',
@@ -1295,7 +1296,6 @@ $1",
 'mypreferences' => 'კონფიგურაცია',
 'prefs-edits' => 'რედაქციების რაოდენობა:',
 'prefsnologin' => 'შესული არ ხართ',
-'prefsnologintext' => 'თქვენ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} რეგისტრირებული უნდა იყოთ]</span> მომხმარებლის კონფიგურაციის შესაცვლელად.',
 'changepassword' => 'პაროლის შეცვლა',
 'prefs-skin' => 'გარეკანი',
 'skin-preview' => 'წინასწარი გადახედვა',
@@ -1715,7 +1715,7 @@ $1",
 'savefile' => 'ფაილის შენახვა',
 'uploadedimage' => 'აიტვირთა „[[$1]]“',
 'overwroteimage' => 'ატვირთულია „[[$1]]-ის“ ახალი ვერსია',
-'uploaddisabled' => 'á\83\90á\83¢á\83\95á\83\98á\83 á\83\97á\83\95á\83\90 á\83¨á\83\94á\83£á\83«á\83\9aá\83\94á\83\91á\83\94á\83\9aá\83\98á\83\90',
+'uploaddisabled' => 'á\83\90á\83¢á\83\95á\83\98á\83 á\83\97á\83\95á\83\90 á\83\92á\83\90á\83\9bá\83\9dá\83 á\83\97á\83£á\83\9aá\83\98á\83\90.',
 'copyuploaddisabled' => 'URL ატვირთვა გაღიშულია',
 'uploadfromurl-queued' => 'თქვენი ატვირთვა რიგში ჩადგა.',
 'uploaddisabledtext' => 'ფაილების ატვირთვა შეუძლებელია.',
@@ -1975,6 +1975,7 @@ $1',
 'randompage-nopages' => '{{PLURAL:$2|სახელთა შემდეგი სივრცე|სახელთა შემდეგ სივრცეში}} "$1" არ არის გვერდები.',
 
 # Random page in category
+'randomincategory' => 'კატეგორიის შემთხვევითი გვერდი',
 'randomincategory-invalidcategory' => 'კატეგორია „$1“ არ არსებობს.',
 'randomincategory-selectcategory-submit' => 'მიდი',
 
@@ -2512,7 +2513,7 @@ $1',
 'blanknamespace' => '(მთავარი)',
 
 # Contributions
-'contributions' => '{{GENDER:$1|á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\94á\83\9aá\83\98}} წვლილი',
+'contributions' => '{{GENDER:$1|á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\9aá\83\98á\83¡}} წვლილი',
 'contributions-title' => 'მომხმარებლის წვლილი $1',
 'mycontris' => 'წვლილი',
 'contribsub2' => 'მომხმარებელი {{GENDER:$3|$1}} წვლილი ($2)',
@@ -2822,7 +2823,7 @@ $1',
 'allmessagesdefault' => 'სტანდარტული ტექსტი',
 'allmessagescurrent' => 'მიმდინარე ტექსტი',
 'allmessagestext' => 'ეს არის სისემურ შეტყობინებათა სია «MediaWiki» სახელთა სივრცეში.
-გთხოვთ ეწვიოთ  [//www.mediawiki.org/wiki/Localisation ლოკალიზაციის აღმწერ] გვერდს [//translatewiki.net translatewiki.net] პროექტს, თუ გსურთ MediaWiki ლოკალიზაციაში წვლილის შეტანა.',
+გთხოვთ ეწვიოთ  [https://www.mediawiki.org/wiki/Localisation ლოკალიზაციის აღმწერ] გვერდს [//translatewiki.net translatewiki.net] პროექტს, თუ გსურთ MediaWiki ლოკალიზაციაში წვლილის შეტანა.',
 'allmessagesnotsupportedDB' => '{{ns:special}}:AllMessages-ის უზრუნველყოფა არ ხდება, ვინაიდან wgUseDatabaseMessages გამორთულია.',
 'allmessages-filter-legend' => 'ფილტრი',
 'allmessages-filter' => 'ფილტრი ცვლილებების სტატუსით:',
@@ -2983,7 +2984,7 @@ $2',
 'tooltip-undo' => 'შეტანილი ცვლილებების გაუქმება და წინასწარ გადახედვის ჩვენება, გაუქმების მიზეზის სქოლიოში ჩაწერასთან ერთად.',
 'tooltip-preferences-save' => 'შეინახეთ კონფიგურაცია',
 'tooltip-summary' => 'შეიყვანეთ მოკლე სქოლიო',
-'tooltip-iwiki' => '$1 — $2',
+'interlanguage-link-title' => '$1 — $2',
 
 # Stylesheets
 'common.css' => '/** აქ ჩასმული CSS გამოყენებული იქნება გაფორმების ყველა გარეკანზე */',
@@ -3632,7 +3633,7 @@ $8',
 
 # External editor support
 'edit-externally' => 'ამ ფაილის რედაქტირებისას გამოიყენეთ გარე პროგრამა',
-'edit-externally-help' => '(დაწვრილებითი ინფორმაციისთვის იხილეთ [//www.mediawiki.org/wiki/Manual:External_editors ჩადგმის ინსტრუქციები])',
+'edit-externally-help' => '(დაწვრილებითი ინფორმაციისთვის იხილეთ [https://www.mediawiki.org/wiki/Manual:External_editors ჩადგმის ინსტრუქციები])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ყველა',
@@ -3693,20 +3694,18 @@ $5
 
 წერილი მოძველდება $4.',
 'confirmemail_body_set' => 'ვიღაცამ, შესაძლოა თქვენ, IP მისამართით $1,
\83¨á\83\94á\83ªá\83\95á\83\90á\83\9aá\83\90 á\83\90á\83\9cá\83\90á\83 á\83\98á\83¨á\83\98á\83¡ á\83\98á\83\9bá\83\94á\83\98á\83\9aá\83\98 "$2" á\83\90á\83\9b á\83\94á\83\9a\83¤á\83\9dá\83¡á\83¢á\83\98á\83¡ á\83\9bá\83\98á\83¡á\83\90á\83\9bá\83\90á\83 á\83\97á\83\98á\83\97 {{SITENAME}}-á\83\96á\83\94.
\83\9eá\83 á\83\9dá\83\94á\83¥á\83¢á\83¨á\83\98 {{SITENAME}} á\83¨á\83\94á\83ªá\83\95á\83\90á\83\9aá\83\90 á\83\94á\83\9a\83¤á\83\9dá\83¡á\83¢á\83\98á\83¡ á\83\9bá\83\98á\83¡á\83\90á\83\9bá\83\90á\83 á\83\97á\83\98 á\83\90á\83\9cá\83\92á\83\90á\83 á\83\98á\83¨á\83\98á\83¡á\83\90á\83\97á\83\95á\83\98á\83¡ "$2" á\83\90á\83\9b á\83\9bá\83\98á\83¡á\83\90á\83\9bá\83\90á\83 á\83\97á\83\98á\83\97.
 
 იმის დასადასტურებლად, რომ ეს ანგარიში ნამდვილად თქვენ გეკუთვნით
-და ელ-ფოსტის შესაძლებლობების  გადააქტიურებლად {{SITENAME}} გვერდზე,
-
-გახსენით ეს ბმული თქვენს ბრაუზერში:
+და ელ.ფოსტის შესაძლებლობების  გასააქტიურებლად საიტზე {{SITENAME}}, გახსენით ეს ბმული თქვენს ბრაუზერში:
 
 $3
 
\83\97á\83£ á\83\94á\83¡ á\83\97á\83¥á\83\95á\83\94á\83\9c *á\83\90á\83 * á\83\98á\83§á\83\90á\83\95á\83\98á\83\97, á\83\9bá\83\90á\83¨á\83\98á\83\9c á\83\9cá\83£ á\83¨á\83\94á\83®á\83\95á\83\90á\83\9aá\83\97 á\83\9bá\83\98á\83§á\83\94á\83\95á\83\98á\83\97 á\83\90á\83\9b á\83\91á\83\9bá\83£á\83\9aá\83¡ á\83\98á\83\9bá\83\94á\83\98á\83\9aá\83\98á\83¡ á\83¨á\83\94á\83\9bá\83\9dá\83¬á\83\9bá\83\94á\83\91á\83\98á\83¡ á\83\92á\83\90á\83¡á\83\90á\83\97á\83\98á\83¨á\83\90á\83\93.
\83\97á\83£ á\83\94á\83¡ á\83\97á\83¥á\83\95á\83\94á\83\9c *á\83\90á\83 * á\83\98á\83§á\83\90á\83\95á\83\98á\83\97, á\83\9bá\83\90á\83¨á\83\98á\83\9c á\83\94á\83\9a\83¤á\83\9dá\83¡á\83¢á\83\98á\83¡ á\83\9bá\83\98á\83¡á\83\90á\83\9bá\83\90á\83 á\83\97á\83\98á\83¡ á\83\93á\83\90á\83¡á\83¢á\83£á\83 á\83\94á\83\91á\83\98á\83¡ á\83\92á\83\90á\83¡á\83\90á\83£á\83¥á\83\9bá\83\94á\83\91á\83\9aá\83\90á\83\93, á\83\92á\83\90á\83\93á\83\90á\83\93á\83\98á\83\97 á\83\90á\83\9b á\83\91á\83\9bá\83£á\83\9aá\83\96á\83\94:
 
 $5
 
-წერილი მოძველდება $4.',
+წერილის ვადის გასვლის თარიღია $4.',
 'confirmemail_invalidated' => 'ელ-ფოსტის დადასტურება გაუქმდა',
 'invalidateemail' => 'ელ-ფოსტის დადასტურების გაუქმება',
 
@@ -3858,7 +3857,7 @@ $5
 'version-version' => '(ვერსია $1)',
 'version-svn-revision' => '(r$2)',
 'version-license' => 'ლიცენზია',
-'version-poweredby-credits' => "ეს ვიკი მუშაობს '''[//www.mediawiki.org/ MediaWiki]'''-ს ძრავზე, copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "ეს ვიკი მუშაობს '''[https://www.mediawiki.org/ MediaWiki]'''-ს ძრავზე, copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'სხვები',
 'version-poweredby-translators' => 'translatewiki.net-ის მთარგმნელები',
 'version-credits-summary' => 'გვინდა მადლობა გადავუხადოთ შემდეგ მომხმარებლებს მათი წვლილისათვის [[Special:Version|მედიავიკის]] განვითარებაში.',
@@ -3900,8 +3899,7 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 
 # Special:SpecialPages
 'specialpages' => 'სპეციალური გვერდები',
-'specialpages-note' => '----
-* ჩვეულებრივი სპეცგვერდები.
+'specialpages-note' => '* ჩვეულებრივი სპეცგვერდები.
 * <span class="mw-specialpagerestricted">სპეცგვერდები შეზღუდული მისაწვდომობით.</span>',
 'specialpages-group-maintenance' => 'ტექნიკური მომსახურების ანგარიშები',
 'specialpages-group-other' => 'სხვა სპეციალური გვერდები',
@@ -4099,6 +4097,7 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 
 # Limit report
 'limitreport-cputime-value' => '$1 {{PLURAL:$1|წამი}}',
+'limitreport-walltime' => 'რეალურ დროში გამოყენება',
 'limitreport-walltime-value' => '$1 {{PLURAL:$1|წამი}}',
 'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|ბაიტი}}',
 'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|ბაიტი}}',
index b1314d1..67a0e57 100644 (file)
@@ -850,7 +850,6 @@ Barlıq mag'lıwmat tu'rin (sonın' ishinde sa'wbet betlerdi, shablonlardı h.t.
 'mypreferences' => "Menin' sazlawlarım",
 'prefs-edits' => "O'zgertiwler sanı:",
 'prefsnologin' => 'Kirilmegen',
-'prefsnologintext' => 'Sazlawların\'ızdı ornatıw ushın <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} kiriwin\'iz]</span> sha\'rt.',
 'changepassword' => "Paroldi o'zgertiw",
 'prefs-skin' => "Sırtqı ko'rinis",
 'skin-preview' => 'Korip al',
@@ -1644,7 +1643,7 @@ Basqa atama saylan'",
 'allmessagesdefault' => 'Defolt tekst',
 'allmessagescurrent' => "Ha'zirgi tekst",
 'allmessagestext' => "Bul {{ns:mediawiki}} isimler ko'pligindegi bar bolg'an sistema xabarları dizimi.
-Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.",
+Please visit [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.",
 
 # Thumbnails
 'thumbnail-more' => "U'lkeytiw",
@@ -1804,7 +1803,7 @@ Eger fayl jaratılg'anınan keyin o'zgertilgen bolsa, geybir parametrleri o'zger
 
 # External editor support
 'edit-externally' => "Bul fayldı sırtqı bag'darlama arqalı o'zgertiw",
-'edit-externally-help' => "(Ko'birek mag'lıwmat ushın [//www.mediawiki.org/wiki/Manual:External_editors ornatıw jolların] qaran')",
+'edit-externally-help' => "(Ko'birek mag'lıwmat ushın [https://www.mediawiki.org/wiki/Manual:External_editors ornatıw jolların] qaran')",
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => "ha'mmesin",
index 27bff4d..c0defe4 100644 (file)
@@ -1046,7 +1046,6 @@ Tzemreḍ ad affeḍ tilɣa deg [{{fullurl:{{#Special:Log}}/delete|page={{FULLPA
 'mypreferences' => 'Isemyifiyen inu',
 'prefs-edits' => 'Amḍan n ibeddlilen :',
 'prefsnologin' => 'Ur tekcimeḍ ara',
-'prefsnologintext' => 'Ilaq ad iliḍ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} qqeneḍ]</span> iwakken ad beddeleḍ iɣewwaren ik/im n useqdac.',
 'changepassword' => 'Beddel awal n tbaḍnit',
 'prefs-skin' => 'Aglim',
 'skin-preview' => 'Pre-timeẓriwt',
@@ -2302,7 +2301,7 @@ Anda tebɣiḍ tesmimeḍ "[[:$1]]" yella yagi. tebɣiḍ ad temḥuḍ iwakken
 'allmessagesdefault' => 'Aḍris ameslugen',
 'allmessagescurrent' => 'Aḍris n tura',
 'allmessagestext' => 'Wagi d-umuɣ n inzan yestufan deg tallunt MediaWiki.
-Ẓeṛ [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] dɣa [//translatewiki.net translatewiki.net] ma tebɣiḍ ad ɛiweneḍ i usideg imcettel n MediaWiki.',
+Ẓeṛ [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] dɣa [//translatewiki.net translatewiki.net] ma tebɣiḍ ad ɛiweneḍ i usideg imcettel n MediaWiki.',
 'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' ut yezmir ara ad yettuseqdac axaṭer '''\$wgUseDatabaseMessages''' yettwakkes.",
 'allmessages-filter-legend' => 'Tastayt',
 'allmessages-filter-unmodified' => 'Ur yebeqqeḍ ara',
@@ -2811,7 +2810,7 @@ Izdayen nniḍen ɣef yiwen ajerriḍ llan d tisuraf, am isebtar ɣef anta tugna
 
 # External editor support
 'edit-externally' => 'Beddel afaylu-yagi s usnas aberrani.',
-'edit-externally-help' => 'Ẓer [//www.mediawiki.org/wiki/Manual:External_editors taknut] iwakken ad tessneḍ kter.',
+'edit-externally-help' => 'Ẓer [https://www.mediawiki.org/wiki/Manual:External_editors taknut] iwakken ad tessneḍ kter.',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'akk',
index 05dddd7..f60e227 100644 (file)
@@ -971,7 +971,6 @@ $1",
 'mypreferences' => 'Си зэгъэзэхуэгъуэхэр',
 'prefs-edits' => 'Гъэтэрэзыгъуэхэм я бжыгъэр:',
 'prefsnologin' => 'Системэм зыкъебгъэцӀыхуакъым',
-'prefsnologintext' => 'ЦӀыхухэтым и зэгъэзэхуэгъуэхэм уелэжьын щхьэкӀэ системэм <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} зыкъебгъэцӀыхун хуэй]</span>',
 'prefs-skin' => 'ЗэфӀэгъувэным и теухуапхъэ',
 'prefs-datetime' => 'Махуэмрэ зэманымрэ',
 'prefs-personal' => 'Ныбжыгъуэ къэӀохугъуэ',
@@ -1338,7 +1337,7 @@ $1",
 
 # External editor support
 'edit-externally' => 'Файлыр гъэтэрэзын, нэгъуэщӀ программэ и сэбэпкӀэ',
-'edit-externally-help' => '(нэхъыбу еплъ [//www.mediawiki.org/wiki/Manual:External_editors илъхьэным и тепсэлъыхьыгъуэ])',
+'edit-externally-help' => '(нэхъыбу еплъ [https://www.mediawiki.org/wiki/Manual:External_editors илъхьэным и тепсэлъыхьыгъуэ])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'псори',
index b9c6760..8277cb3 100644 (file)
@@ -1074,8 +1074,8 @@ HTML tags لوڑے.',",
 
 # External editor support
 'edit-externally' => 'ھیہ مسلو ایڈیٹ کورے',
-'edit-externally-help' => '(See the [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] for more information)
-(مزید معلوماتو بچے ھیہ لنکہ بوغے [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] )',
+'edit-externally-help' => '(See the [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] for more information)
+(مزید معلوماتو بچے ھیہ لنکہ بوغے [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] )',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'سف',
index 36c0437..9f5ee67 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author Erdemaslancan
+ * @author Gorizon
  * @author Mirzali
  */
 
@@ -280,7 +281,7 @@ $1',
 'pool-errorunknown' => 'Xeta nêzanıtiye',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
-'aboutsite' => 'Heqa {{SITENAME}} de',
+'aboutsite' => 'Heqdé {{SITENAME}}',
 'aboutpage' => 'Project:Heqa',
 'copyright' => 'Zerrek bınê $1 dero.',
 'copyrightpage' => '{{ns:project}}:Telifheqiye',
@@ -765,7 +766,6 @@ Diqet kerê, beno ke tedeestê {{SITENAME}} uza endi rozane niyê.",
 'mypreferences' => 'Tercihê mı',
 'prefs-edits' => 'Numra vurnaisun:',
 'prefsnologin' => 'Cı nêkota',
-'prefsnologintext' => 'Sıma gunê <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} cı kuyê]</span> ke dıma tercihunê karberi bınusnê.',
 'changepassword' => 'Parola bıvurne',
 'prefs-skin' => 'Çerme',
 'skin-preview' => 'Verqayt',
@@ -1501,7 +1501,7 @@ Eke dosya de peydêna vuriyais biyo ki, beno ke taê melumati gorê vurnaisê ne
 
 # External editor support
 'edit-externally' => 'Na dosya be mırecaetê de teberi bıvurne',
-'edit-externally-help' => '(Serba daêna melumati qaytê pelga [//www.mediawiki.org/wiki/Manual:External_editors ayarê gurenaena teberi] be)',
+'edit-externally-help' => '(Serba daêna melumati qaytê pelga [https://www.mediawiki.org/wiki/Manual:External_editors ayarê gurenaena teberi] be)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'pêro',
@@ -1528,8 +1528,7 @@ Eke dosya de peydêna vuriyais biyo ki, beno ke taê melumati gorê vurnaisê ne
 
 # Special:SpecialPages
 'specialpages' => 'Pelê xaşi',
-'specialpages-note' => '----
-* Pelê xususiyê normali.
+'specialpages-note' => '* Pelê xususiyê normali.
 * <span class="mw-specialpagerestricted">Pelê xususiyê mehcuri.</span>',
 'specialpages-group-maintenance' => 'Tebliğê baxımi',
 'specialpages-group-other' => 'Pelê xususiyê bini',
index 0e98531..774da5e 100644 (file)
@@ -1128,7 +1128,6 @@ $3 كەلتىرىلگەن سەبەبى: ''$2''",
 'mypreferences' => 'باپتالىمدارىم',
 'prefs-edits' => 'وڭدەمە سانى:',
 'prefsnologin' => 'كىرمەگەنسىز',
-'prefsnologintext' => 'باپتاۋىڭىزدى قويۋ ٴۇشىن [[Special:UserLogin|كىرۋىڭىز]] ٴتىيىستى.',
 'changepassword' => 'قۇپىييا ٴسوزدى وزگەرتۋ',
 'prefs-skin' => 'مانەرلەر',
 'skin-preview' => 'قاراپ شىعۋ',
@@ -2121,7 +2120,7 @@ MediaWiki جۇيەسىنىڭ [[{{#special:Import}}|سىرتتان الۋ بەت
 'allmessagesdefault' => 'ادەپكى ٴماتىنى',
 'allmessagescurrent' => 'اعىمدىق ٴماتىنى',
 'allmessagestext' => 'مىندا {{ns:mediawiki}} ەسىم اياسىندا جەتىمدى جۇيە حابار ٴتىزىمى بەرىلەدى.
-ەگەر امبەباپ MediaWiki جەرسىندىرۋگە ۇلەس قوسقىڭىز كەلسە [//www.mediawiki.org/wiki/Localisation MediaWiki جەرسىندىرۋ بەتىنە] جانە [//translatewiki.net translatewiki.net جوباسىنا] بارىپ شىعىڭىز.',
+ەگەر امبەباپ MediaWiki جەرسىندىرۋگە ۇلەس قوسقىڭىز كەلسە [https://www.mediawiki.org/wiki/Localisation MediaWiki جەرسىندىرۋ بەتىنە] جانە [//translatewiki.net translatewiki.net جوباسىنا] بارىپ شىعىڭىز.',
 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' وشىرىلگەن سەبەبىنەن '''{{ns:special}}:AllMessages''' بەتى قولدانىلمايدى.",
 
 # Thumbnails
@@ -2606,7 +2605,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'بۇل فايلدى شەتتىك قوندىرما ارقىلى وڭدەۋ',
-'edit-externally-help' => 'كوبىرەك اقپارات ٴۇشىن [//www.mediawiki.org/wiki/Manual:External_editors ورناتۋ نۇسقامالارىن] قاراڭىز.',
+'edit-externally-help' => 'كوبىرەك اقپارات ٴۇشىن [https://www.mediawiki.org/wiki/Manual:External_editors ورناتۋ نۇسقامالارىن] قاراڭىز.',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'بارلىق',
@@ -2818,8 +2817,7 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'ارنايى بەتتەر',
-'specialpages-note' => '----
-* كادىمگى ارنايى بەتتەر.
+'specialpages-note' => '* كادىمگى ارنايى بەتتەر.
 * <strong class="mw-specialpagerestricted">شەكتەلگەن ارنايى بەتتەر.</strong>',
 'specialpages-group-maintenance' => 'باپتاۋ باياناتتارى',
 'specialpages-group-other' => 'تاعى باسقا ارنايى بەتتەر',
index 8163914..90cbddc 100644 (file)
@@ -1027,7 +1027,7 @@ IP-мекенжайыңыз бұл беттің түзету тарихында
 'blockednoreason' => 'еш себебі келтірілмеген',
 'whitelistedittext' => 'Беттерді өңдеу үшін сізде $1 болуы керек.',
 'confirmedittext' => 'Беттерді өңдеу үшін алдын ала Е-пошта мекенжайыңызды құптауыңыз жөн.
-Е-пошта мекенжайыңызды [Special:Preferences}}|қатысушы бапталымдарыңыз]] арқылы қойыңыз да жарамдылығын тексеріп шығыңыз.',
+Е-пошта мекенжайыңызды [[Special:Preferences|қатысушы бапталымдарыңыз]] арқылы қойыңыз да жарамдылығын тексеріп шығыңыз.',
 'nosuchsectiontitle' => 'Бұл бөлімді табу мүмкін емес',
 'nosuchsectiontext' => 'Сіз бұрын болмаған бөлімді өзгертпекшісіз.
 Мүмкін бұл бетті қарап жатқаныңызда ол бөлім жойылған немесе басқа орынға көшірілген.',
@@ -1383,7 +1383,6 @@ $1",
 'mypreferences' => 'Баптаулар',
 'prefs-edits' => 'Өңдеме саны:',
 'prefsnologin' => 'Кірмегенсіз',
-'prefsnologintext' => 'Қатысушы бапталымдарыңызды жөндеу үшін <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} кіруіңіз]</span> жөн.',
 'changepassword' => 'Құпия сөзді өзгерту',
 'prefs-skin' => 'Мәнерлер',
 'skin-preview' => 'Қарап шығу',
@@ -2470,7 +2469,7 @@ $1',
 # Contributions
 'contributions' => '{{GENDER:$1|Қатысушы}} үлестері',
 'contributions-title' => '$1 есімді қатысушының үлесі',
-'mycontris' => 'ҮлеÑ\81Ñ\82еÑ\80',
+'mycontris' => 'ҮлеÑ\81Ñ\96м',
 'contribsub2' => '$1 ($2) үлесі',
 'nocontribs' => 'Осы іздеу шартына сәйкес өзгерістер табылған жоқ.',
 'uctop' => '(ағымдағы)',
@@ -2751,7 +2750,7 @@ MediaWiki жүйесінің [[{{#special:Import}}|сырттан алу бет
 'allmessagesdefault' => 'Әдепкі мәтіні',
 'allmessagescurrent' => 'Ағымдық мәтіні',
 'allmessagestext' => 'Мында {{ns:mediawiki}} есім аясында жетімді жүйе хабар тізімі беріледі.
-Егер әмбебап MediaWiki жерсіндіруге үлес қосқыңыз келсе [//www.mediawiki.org/wiki/Localisation MediaWiki жерсіндіру бетіне] және [//translatewiki.net translatewiki.net жобасына] барып шығыңыз.',
+Егер әмбебап MediaWiki жерсіндіруге үлес қосқыңыз келсе [https://www.mediawiki.org/wiki/Localisation MediaWiki жерсіндіру бетіне] және [//translatewiki.net translatewiki.net жобасына] барып шығыңыз.',
 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' өшірілген себебінен '''{{#special:AllMessages}}''' беті қолданылмайды.",
 'allmessages-filter-legend' => 'Сүзгі',
 'allmessages-filter-unmodified' => 'Өзгертілмегендер',
@@ -3403,7 +3402,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'Бұл файлды шеттік қондырма арқылы өңдеу',
-'edit-externally-help' => '(көбірек ақпарат үшін [//www.mediawiki.org/wiki/Manual:External_editors орнату нұсқауларын] қараңыз)',
+'edit-externally-help' => '(көбірек ақпарат үшін [https://www.mediawiki.org/wiki/Manual:External_editors орнату нұсқауларын] қараңыз)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'барлық',
@@ -3641,8 +3640,7 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'Арнайы беттер',
-'specialpages-note' => '----
-* Кәдімгі арнайы беттер.
+'specialpages-note' => '* Кәдімгі арнайы беттер.
 * <span class=="mw-specialpagerestricted">Шектелген арнайы беттер.</span>',
 'specialpages-group-maintenance' => 'Техникалық талқылау есептері',
 'specialpages-group-other' => 'Тағы басқа арнайы беттер',
index 67e7cf7..0d1114c 100644 (file)
@@ -1091,7 +1091,6 @@ Añğartpa: {{SITENAME}} torabınıñ mağlumat tizbeleri eskirgen bolwı mümki
 'mypreferences' => 'Baptalımdarım',
 'prefs-edits' => 'Öñdeme sanı:',
 'prefsnologin' => 'Kirmegensiz',
-'prefsnologintext' => 'Baptawıñızdı qoyw üşin [[Special:UserLogin|kirwiñiz]] tïisti.',
 'changepassword' => 'Qupïya sözdi özgertw',
 'prefs-skin' => 'Mänerler',
 'skin-preview' => 'Qarap şığw',
@@ -2085,7 +2084,7 @@ Soñğı jağdaýda siltemeni de, mısalı «{{{{ns:mediawiki}}:Mainpage}}» bet
 'allmessagesdefault' => 'Ädepki mätini',
 'allmessagescurrent' => 'Ağımdıq mätini',
 'allmessagestext' => 'Mında {{ns:mediawiki}} esim ayasında jetimdi jüýe xabar tizimi beriledi.
-Eger ämbebap MediaWiki jersindirwge üles qosqıñız kelse [//www.mediawiki.org/wiki/Localisation MediaWiki jersindirw betine] jäne [//translatewiki.net translatewiki.net jobasına] barıp şığıñız.',
+Eger ämbebap MediaWiki jersindirwge üles qosqıñız kelse [https://www.mediawiki.org/wiki/Localisation MediaWiki jersindirw betine] jäne [//translatewiki.net translatewiki.net jobasına] barıp şığıñız.',
 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' öşirilgen sebebinen '''{{ns:special}}:AllMessages''' beti qoldanılmaýdı.",
 
 # Thumbnails
@@ -2569,7 +2568,7 @@ Basqaları ädepkiden jasırıladı.
 
 # External editor support
 'edit-externally' => 'Bul faýldı şettik qondırma arqılı öñdew',
-'edit-externally-help' => 'Köbirek aqparat üşin [//www.mediawiki.org/wiki/Manual:External_editors ornatw nusqamaların] qarañız.',
+'edit-externally-help' => 'Köbirek aqparat üşin [https://www.mediawiki.org/wiki/Manual:External_editors ornatw nusqamaların] qarañız.',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'barlıq',
@@ -2777,8 +2776,7 @@ Tağı da [[Special:EditWatchlist|qalıpalğan öñdewişti paýdalana]] alasız
 
 # Special:SpecialPages
 'specialpages' => 'Arnaýı better',
-'specialpages-note' => '----
-* Kädimgi arnaýı better.
+'specialpages-note' => '* Kädimgi arnaýı better.
 * <strong class="mw-specialpagerestricted">Şektelgen arnaýı better.</strong>',
 'specialpages-group-maintenance' => 'Baptaw bayanattarı',
 'specialpages-group-other' => 'Tağı basqa arnaýı better',
index 41360e7..61682ad 100644 (file)
@@ -510,7 +510,7 @@ $1',
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
 'aboutsite' => 'អំពី{{SITENAME}}',
 'aboutpage' => 'Project:អំពី',
-'copyright' => 'á\9e\9aá\9e\80á\9f\92á\9e\9fá\9e¶á\9e\9fá\9e·á\9e\91á\9f\92á\9e\92á\9e·á\9e\82á\9f\92á\9e\9aá\9e\94á\9f\8bá\9e\99á\9f\89á\9e¶á\9e\84á\9e\8aá\9f\84á\9e\99$1។',
+'copyright' => 'á\9e\81á\9f\92á\9e\9bá\9e¹á\9e\98á\9e\9fá\9e¶á\9e\9aá\9e¢á\9e\8fá\9f\92á\9e\90á\9e\94á\9e\91á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bá\9e\94á\9e¶á\9e\93á\9e\80á\9f\92á\9e\9aá\9f\84á\9e\98á\9e¢á\9e¶á\9e\87á\9f\92á\9e\89á\9e¶á\9e\94á\9e\8eá\9f\92á\9e\8c$1 á\9e\9bá\9e¾á\9e\80á\9e\9bá\9f\82á\9e\84á\9e\8fá\9f\82á\9e\98á\9e¶á\9e\93á\9e\94á\9e\89á\9f\92á\9e\87á\9e¶á\9e\80á\9f\8bá\9e\95á\9f\92á\9e\9fá\9f\81á\9e\84á\9e\96á\9e¸á\9e\93á\9f\84á\9f\87។',
 'copyrightpage' => '{{ns:project}}:រក្សាសិទ្ធិ​',
 'currentevents' => 'ព្រឹត្តិការណ៍​ថ្មីៗ',
 'currentevents-url' => 'Project:ព្រឹត្តិការណ៍​ថ្មីៗ',
@@ -672,7 +672,7 @@ $2',
 'invalidtitle-knownnamespace' => 'ចំណងជើងមិនត្រឹមត្រូវដែលមានលំហឈ្មោះ "$2" និងអត្ថបទ "$3"',
 'invalidtitle-unknownnamespace' => 'ចំណងជើងមិនត្រឹមត្រូវដែលមានលំហឈ្មោះមិនស្គាល់លេខ $1 និងអត្ថបទ "$2"',
 'exception-nologin' => 'មិនទាន់កត់ឈ្មោះចូលទេ',
-'exception-nologin-text' => 'á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e¬á\9e\9fá\9e\80á\9e\98á\9f\92á\9e\98á\9e\97á\9e¶á\9e\96á\9e\93á\9f\81á\9f\87á\9e\8fá\9e\98á\9f\92á\9e\9aá\9e¼á\9e\9cá\9e¢á\9f\84á\9e\99á\9e¢á\9f\92á\9e\93á\9e\80á\9e\92á\9f\92á\9e\9cá\9e¾á\9e\80á\9e¶á\9e\9aá\9e\80á\9e\8fá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\85á\9e¼á\9e\9bá\9e\91á\9f\85á\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\9cá\9e·á\9e\82á\9e¸នេះ។',
+'exception-nologin-text' => 'á\9e\9fá\9e¼á\9e\98[[Special:Userlogin|lá\9e\80á\9e\8fá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\85á\9e¼á\9e\9b]]á\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸á\9e\85á\9e¼á\9e\9bá\9e¢á\9e¶á\9e\93á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e¬á\9e\92á\9f\92á\9e\9cá\9e¾á\9e\9fá\9e\80á\9e\98á\9f\92á\9e\98á\9e\97á\9e¶á\9e\96នេះ។',
 
 # Virus scanner
 'virus-badscanner' => "ការ​កំណត់​រចនា​សម្ព័ន្ធ​មិន​ល្អ​៖ កម្មវិធី​ស្កេន​មេរោគមិន​ស្គាល់​៖ ''$1''",
@@ -720,7 +720,7 @@ $2',
 'gotaccount' => "បើលោកអ្នកមានគណនីសម្រាប់ប្រើហើយ  សូម'''$1'''។",
 'gotaccountlink' => 'កត់ឈ្មោះចូល',
 'userlogin-resetlink' => 'តើអ្នកភ្លេចព័ត៌មានលម្អិតសម្រាប់កត់ឈ្មោះចូលហើយ?',
-'userlogin-resetpassword-link' => 'á\9e\9fá\9f\92á\9e\8aá\9e¶á\9e\9aá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80',
+'userlogin-resetpassword-link' => 'á\9e¢á\9f\92á\9e\93á\9e\80á\9e\97á\9f\92á\9e\9bá\9f\81á\9e\85á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e á\9e¾á\9e\99?',
 'helplogin-url' => 'Help:ការកត់ឈ្មោះចូល',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|ជំនួយក្នុងការកត់ឈ្មោះចូល]]',
 'userlogin-createanother' => 'បង្កើតគណនីមួយទៀត',
@@ -795,7 +795,7 @@ $2',
 
 សូម​កត់ឈ្មោះចូល​ម្តងទៀត​បន្ទាប់ពី​អ្នក​បាន​ទទួល​ពាក្យសម្ងាត់ថ្មីនោះ។',
 'blocked-mailpassword' => 'អាសយដ្ឋានIPត្រូវបានហាមឃាត់មិនអោយធ្វើការកែប្រែ និងមិនអនុញ្ញាតឱ្យប្រើប្រាស់មុខងារសង្គ្រោះពាក្យសម្ងាត់ដើម្បីបង្ការការបំពានទេ។',
-'eauthentsent' => 'á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bâ\80\8bá\9e\95á\9f\92á\9e\91á\9f\80á\9e\84á\9e\95á\9f\92á\9e\91á\9e¶á\9e\8fá\9f\8bâ\80\8bá\9e\94á\9e\89á\9f\92á\9e\87á\9e¶á\9e\80á\9f\8bá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\95á\9f\92á\9e\89á\9e¾á\9e\91á\9f\85â\80\8bá\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\8aá\9f\82á\9e\9bá\9e\94á\9e¶á\9e\93á\9e\85á\9e»á\9f\87á\9e\8fá\9f\92á\9e\9aá\9eហើយ។
+'eauthentsent' => 'á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bâ\80\8bá\9e\95á\9f\92á\9e\91á\9f\80á\9e\84á\9e\95á\9f\92á\9e\91á\9e¶á\9e\8fá\9f\8bâ\80\8bá\9e\94á\9e\89á\9f\92á\9e\87á\9e¶á\9e\80á\9f\8bá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\95á\9f\92á\9e\89á\9e¾á\9e\91á\9f\85â\80\8bá\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\8aá\9f\82á\9e\9bá\9e\94á\9e¶á\9e\93á\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e\87á\9e¼á\9e\93ហើយ។
 
 មុននឹងមាន​អ៊ីមែលផ្សេងមួយទៀត​ត្រូវផ្ញើទៅ​គណនីនេះ អ្នកត្រូវតែ​ធ្វើតាមសេចក្តីណែនាំ​ក្នុងអ៊ីមែល​នោះ ដើម្បីបញ្ជាក់ថា​គណនីបច្ចុប្បន្ន​ពិតជា​របស់អ្នកពិតប្រាកដមែន។',
 'throttled-mailpassword' => 'អ៊ីមែលប្ដូរពាក្យសម្ងាត់ត្រូវបានផ្ញើទៅឱ្យអ្នកតាំងពី{{PLURAL:$1|មួយម៉ោង|$1ម៉ោង}}មុននេះហើយ។
@@ -1236,15 +1236,15 @@ $2
 * ព័ត៌មាន​ផ្ទាល់​ខ្លួន​ ឯកជន​មិន​សមរម្យ​
 *: ''អាសយដ្ឋាននៃ​គេហដ្ឋាន​​ ​លេខ​ទូរស័ព្ទ និងលេខ​សន្តិសុខ​សង្គម​ជាដើម​''",
 'revdelete-legend' => 'ដាក់កំហិតគំហើញ',
-'revdelete-hide-text' => 'á\9e\94á\9e·á\9e\91á\9e\94á\9e¶á\9f\86á\9e\84á\9e\83á\9f\92á\9e\9bá\9e¶á\9e\93á\9f\83កំណែប្រែ',
+'revdelete-hide-text' => 'á\9e\94á\9e·á\9e\91á\9e\94á\9e¶á\9f\86á\9e\84á\9e¢á\9e\8fá\9f\92á\9e\90á\9e\94á\9e\91កំណែប្រែ',
 'revdelete-hide-image' => 'បិទបាំងខ្លឹមសារនៃឯកសារ',
 'revdelete-hide-name' => 'បិទបាំងសកម្មភាពនិងគោលដៅ',
-'revdelete-hide-comment' => 'á\9e\94á\9e·á\9e\91á\9e\94á\9e¶á\9f\86á\9e\84á\9e\80á\9f\86á\9e\8eá\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\9cá\9e·á\9e\85á\9e¶á\9e\9a',
-'revdelete-hide-user' => 'á\9e\94á\9e·á\9e\91á\9e\94á\9e¶á\9f\86á\9e\84á\9e¢á\9e\8fá\9f\92á\9e\8fá\9e\93á\9e¶á\9e\98â\80\8bá\9e¬á\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93IP របស់អ្នកកែប្រែ',
+'revdelete-hide-comment' => 'á\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\85á\9f\86á\9e\8eá\9e¶á\9e\9aá\9e\96á\9e\93á\9f\92á\9e\99á\9e\9bá\9f\8b',
+'revdelete-hide-user' => 'á\9e¢á\9e\8fá\9f\92á\9e\8fá\9e\93á\9e¶á\9e\98â\80\8bá\9e¬á\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93IPរបស់អ្នកកែប្រែ',
 'revdelete-hide-restricted' => 'ដាក់កំហិត​ទិន្នន័យ​ពី​អ្នកអភិបាល ក៏​ដូចជា​អ្នក​ដទៃ​ទៀត',
 'revdelete-radio-same' => '(មិនផ្លាស់ប្ដូរ)',
-'revdelete-radio-set' => 'á\9e\94á\9e¶á\9e\91\9e\85á\9e¶á\9e\9f',
-'revdelete-radio-unset' => 'á\9e\91á\9f\81',
+'revdelete-radio-set' => 'á\9e\9bá\9e¶á\9e\80á\9f\8b',
+'revdelete-radio-unset' => 'á\9e\98á\9e¾á\9e\9bá\9e\83á\9e¾á\9e\89',
 'revdelete-suppress' => 'លាក់ទិន្នន័យពីអ្នកថែទាំប្រព័ន្ធ ព្រមទាំងពីសមាជិកដទៃទៀតផងដែរ',
 'revdelete-unsuppress' => 'ដកចេញការដាក់កំហិតលើកំណែដែលបានស្តារឡើងវិញ',
 'revdelete-log' => 'មូលហេតុ៖',
@@ -1400,7 +1400,6 @@ $1",
 'mypreferences' => 'ចំណង់ចំណូលចិត្ត​',
 'prefs-edits' => 'ចំនួនកំណែប្រែ៖',
 'prefsnologin' => 'មិនទាន់កត់ឈ្មោះចូលទេ',
-'prefsnologintext' => 'អ្នកចាំបាច់ត្រូវតែ<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} កត់ឈ្មោះចូល]</span> ដើម្បីកំណត់ចំណង់ចំណូលចិត្តរបស់អ្នក។',
 'changepassword' => 'ប្តូរពាក្យសម្ងាត់',
 'prefs-skin' => 'សំបក',
 'skin-preview' => 'មើលជាមុន',
@@ -1667,8 +1666,8 @@ $1",
 'action-block' => 'ហាមឃាត់អ្នកប្រើប្រាស់នេះមិនឱ្យធ្វើការកែប្រែ',
 'action-protect' => 'ប្ដូរកម្រិតការពារសម្រាប់ទំព័រនេះ',
 'action-rollback' => 'ត្រឡប់យ៉ាងរហ័សនូវកំណែប្រែទំព័រវិសេសណាមួយ​ដែលធ្វើឡើងដោយ​អ្នកប្រើប្រាស់ចុងក្រោយគេ។',
-'action-import' => 'á\9e\93á\9e¶á\9f\86á\9e\85á\9e¼á\9e\9bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87á\9e\96á\9e¸á\9e\9cá\9e·á\9e\82á\9e¸á\9e\95á\9f\92á\9e\9fá\9f\81á\9e\84á\9e\98á\9e½á\9e\99á\9e\91á\9f\80á\9e\8f',
-'action-importupload' => 'á\9e\93á\9e¶á\9f\86á\9e\85á\9e¼á\9e\9bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87á\9e\96á\9e¸á\9e¯á\9e\80á\9e\9fá\9e¶á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e\94á\9e¶á\9e\93á\9e\95á\9f\92á\9e\91á\9e»á\9e\80á\9e¡á\9e¾á\9e\84',
+'action-import' => 'នាំចូលទំព័រពីវិគីផ្សេងមួយទៀត',
+'action-importupload' => 'នាំចូលទំព័រពីឯកសារដែលបានផ្ទុកឡើង',
 'action-patrol' => 'ចំណាំកំណែប្រែរបស់អ្នកដទៃថាបានល្បាត',
 'action-autopatrol' => 'ផ្ដល់សិទ្ធិឱ្យគេចំណាំកំណែរបស់អ្នកថាបានល្បាត',
 'action-unwatchedpages' => 'មើលបញ្ជីនៃទំព័រមិនតាមដាន',
@@ -2161,6 +2160,7 @@ $1',
 'listusers' => 'បញ្ជីអ្នកប្រើប្រាស់',
 'listusers-editsonly' => 'បង្ហាញតែអ្នកប្រើប្រាស់ដែលបានកែប្រែអត្ថបទប៉ុណ្ណោះ',
 'listusers-creationsort' => 'តម្រៀបតាមលំដាប់កាលបរិច្ឆេទបង្កើត',
+'listusers-desc' => 'តម្រៀបជាលំដាប់ពីលើចុះក្រោម',
 'usereditcount' => '$1 {{PLURAL:$1|កំណែប្រែ|កំណែប្រែ}}',
 'usercreated' => '{{GENDER:$3|បានបង្កើត}}នៅ$1  $2',
 'newpages' => 'ទំព័រថ្មីៗ',
@@ -2590,7 +2590,7 @@ $1',
 'contributions' => 'ការរួមចំណែក​របស់{{GENDER:$1|អ្នកប្រើប្រាស់}}',
 'contributions-title' => 'ការរួមចំណែករបស់អ្នកប្រើប្រាស់ $1',
 'mycontris' => 'ការរួមចំណែក',
-'contribsub2' => 'សម្រាប់ $1 ($2)',
+'contribsub2' => 'សម្រាប់{{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'គ្មានការផ្លាស់ប្តូរត្រូវបានឃើញដូចនឹងលក្ខណៈវិនិច្ឆ័យទាំងនេះ។',
 'uctop' => '(បច្ចុប្បន្ន)',
 'month' => 'ខែ៖',
@@ -3114,7 +3114,7 @@ $1',
 'svg-long-desc' => 'ឯកសារប្រភេទSVG  $1 × $2 ភីកសែល ទំហំឯកសារ៖ $3',
 'svg-long-desc-animated' => 'ឯកសារជីវចល SVG, ជាធម្មតា $1 × $2 ភិចសែល, ទំហំឯកសារ: $3',
 'svg-long-error' => 'ឯកសារ SVG គ្មានសុពលភាព៖ $1',
-'show-big-image' => 'á\9e\9aá\9e¼á\9e\94á\9e\97á\9e¶á\9e\96á\9e\96á\9f\81á\9e\89',
+'show-big-image' => 'á\9e\9aá\9e¼á\9e\94á\9e\97á\9e¶á\9e\96á\9e\8aá\9e¾á\9e\98',
 'show-big-image-preview' => 'ទំហំរបស់ការមើលមុននេះ: $1។',
 'show-big-image-other' => '{{PLURAL:$2|ភាពម៉ត់|ភាពម៉ត់}}ផ្សេងទៀត៖ $1។',
 'show-big-image-size' => '$1 × $2 ភីកសែ',
@@ -3446,7 +3446,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'កែប្រែ​ឯកសារ​នេះដោយប្រើប្រាស់​កម្មវិធី​ខាងក្រៅ',
-'edit-externally-help' => '(សូមមើល[//www.mediawiki.org/wiki/Manual:External_editors ការណែនាំ​អំពី​ការ​ប្រើប្រាស់​]សម្រាប់​​ព័ត៌មាន​បន្ថែម)',
+'edit-externally-help' => '(សូមមើល[https://www.mediawiki.org/wiki/Manual:External_editors ការណែនាំ​អំពី​ការ​ប្រើប្រាស់​]សម្រាប់​​ព័ត៌មាន​បន្ថែម)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ទាំងអស់',
@@ -3639,7 +3639,7 @@ $5
 'version-hook-subscribedby' => 'បានជាវ ជាប្រចាំ ដោយ',
 'version-version' => '(កំណែ $1)',
 'version-license' => 'អាជ្ញាប័ណ្ណ',
-'version-poweredby-credits' => "វិគីនេះឧបត្ថម្ភដោយ '''[//www.mediawiki.org/ មេឌាវិគី]''', រក្សាសិទ្ធ © ២០០១-$1 $2។",
+'version-poweredby-credits' => "វិគីនេះឧបត្ថម្ភដោយ '''[https://www.mediawiki.org/ មេឌាវិគី]''', រក្សាសិទ្ធ © ២០០១-$1 $2។",
 'version-poweredby-others' => 'អ្នកដទៃទៀត',
 'version-software' => 'ផ្នែកទន់​ដែល​បានដំឡើង',
 'version-software-product' => 'ផលិតផល',
index 060371e..6d4357f 100644 (file)
@@ -919,7 +919,6 @@ $2',
 'mypreferences' => 'ಪ್ರಾಶಸ್ತ್ಯಗಳು',
 'prefs-edits' => 'ಸಂಪಾದನೆಗಳ ಸಂಖ್ಯೆ:',
 'prefsnologin' => 'ಲಾಗಿನ್ ಆಗಿಲ್ಲ',
-'prefsnologintext' => 'ಬಳಕೆದಾರ ಪ್ರಾಶಸ್ತ್ಯಗಳನ್ನು ಬದಲಾಯಿಸಲು ನೀವು <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ಲಾಗ್ ಇನ್]</span> ಆಗಿರಬೇಕು.',
 'changepassword' => 'ಪ್ರವೇಶ ಪದ ಬದಲಾಯಿಸಿ',
 'prefs-skin' => 'ಚರ್ಮ',
 'skin-preview' => 'ಮುನ್ನೋಟ',
@@ -2042,7 +2041,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'ಬಾಹ್ಯ ತಂತ್ರಾಂಶವನ್ನು ಉಪಯೋಗಿಸಿ ಇದನ್ನು ಸಂಪಾದಿಸಿ',
-'edit-externally-help' => '(ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗೆ [//www.mediawiki.org/wiki/Manual:External_editors ಸ್ಥಾಪನೆಯ ನಿರ್ದೇಶಗಳನ್ನು] ನೋಡಿ)',
+'edit-externally-help' => '(ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗೆ [https://www.mediawiki.org/wiki/Manual:External_editors ಸ್ಥಾಪನೆಯ ನಿರ್ದೇಶಗಳನ್ನು] ನೋಡಿ)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ಎಲ್ಲಾ',
index 95187da..c4d024f 100644 (file)
@@ -505,7 +505,7 @@ $messages = array(
 
 # Cologne Blue skin
 'qbfind' => '찾기',
-'qbbrowse' => '탐색',
+'qbbrowse' => '찾아보기',
 'qbedit' => '편집',
 'qbpageoptions' => '문서 기능',
 'qbmyoptions' => '내 사용자 문서',
@@ -520,7 +520,7 @@ $messages = array(
 'vector-action-protect' => '보호',
 'vector-action-undelete' => '되살리기',
 'vector-action-unprotect' => '보호 설정 바꾸기',
-'vector-simplesearch-preference' => '단순한 찾기 막대 사용하기 (벡터 스킨 전용)',
+'vector-simplesearch-preference' => '단순한 검색 막대 사용하기 (벡터 스킨 전용)',
 'vector-view-create' => '만들기',
 'vector-view-edit' => '편집',
 'vector-view-history' => '역사',
@@ -535,8 +535,8 @@ $messages = array(
 'returnto' => '$1 문서로 돌아갑니다.',
 'tagline' => '{{SITENAME}}',
 'help' => '도움말',
-'search' => '찾기',
-'searchbutton' => '찾기',
+'search' => '검색',
+'searchbutton' => '검색',
 'go' => '보기',
 'searcharticle' => '보기',
 'history' => '문서 역사',
@@ -586,7 +586,7 @@ $messages = array(
 'protectedpage' => '보호된 문서',
 'jumpto' => '이동:',
 'jumptonavigation' => '둘러보기',
-'jumptosearch' => '찾기',
+'jumptosearch' => '검색',
 'view-pool-error' => '서버가 과부하에 걸렸습니다.
 너무 많은 사용자가 이 문서를 보려고 하고 있습니다.
 이 문서를 다시 열기 전에 잠시만 기다려주세요.
@@ -697,9 +697,10 @@ URL을 잘못 입력하였거나, 잘못된 링크를 따라갔을 수 있습니
 관리자가 데이터베이스를 잠글 때 남긴 메시지는 다음과 같습니다: $1',
 'missing-article' => '데이터베이스에서 "$1" 문서의 $2 텍스트를 찾지 못했습니다.
 
\82­ì \9cë\90\9c ë¬¸ì\84\9cì\9d\98 ì\97­ì\82¬/ë¹\84êµ\90 ë¬¸ì\84\9c를 보려고 시도할 때 이러한 문제가 발생할 수 있습니다.
\82­ì \9cë\90\9c ë¬¸ì\84\9cì\9d\98 ì\98¤ë\9e\98ë\90\9c ì°¨ì\9d´ë\82\98 ì\97­ì\82¬ ë§\81í\81¬를 보려고 시도할 때 이러한 문제가 발생할 수 있습니다.
 
-또는, 프로그램 버그가 발생했을 수도 있습니다. [[Special:ListUsers/sysop|관리자]]에게 오류가 나는 URL을 알려주세요.',
+그렇지 않다면, 소프트웨어에 버그가 발생했을 수도 있습니다.
+[[Special:ListUsers/sysop|관리자]]에게 URL을 참조하여 알려주세요.',
 'missingarticle-rev' => '(판번호: $1)',
 'missingarticle-diff' => '(차이: $1, $2)',
 'readonly_lag' => '슬레이브 데이터베이스가 마스터 서버의 자료를 새로 고치는 중입니다. 데이터베이스가 자동으로 잠겨 있습니다.',
@@ -763,7 +764,8 @@ $2',
 'invalidtitle-knownnamespace' => '제목 오류: "$2" 이름공간과 "$3" 텍스트',
 'invalidtitle-unknownnamespace' => '제목 오류: 알 수 없는 $1 이름공간 번호와, "$2" 텍스트',
 'exception-nologin' => '로그인하지 않음',
-'exception-nologin-text' => '이 문서나 행동은 이 위키에 로그인을 해야 합니다.',
+'exception-nologin-text' => '이 행동을 하거나 이 문서에 접근하려면 [[Special:Userlogin|로그인]]하십시오.',
+'exception-nologin-text-manual' => '이 문서에 접근하거나 이 행동을 하려면 $1하십시오.',
 
 # Virus scanner
 'virus-badscanner' => "잘못된 설정: 알 수 없는 바이러스 검사기: '''$1'''",
@@ -1079,20 +1081,20 @@ $1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대
 'accmailtitle' => '비밀번호를 보냈습니다',
 'accmailtext' => '[[User talk:$1|$1]] 사용자의 비밀번호가 임의로 만들어져 $2(으)로 보냈습니다. 로그인하고 나서 [[Special:ChangePassword|비밀번호를 바꿀]] 수 있습니다.',
 'newarticle' => '(새 문서)',
-'newarticletext' => "ì\9d´ ë¬¸ì\84\9cë\8a\94 ì\95\84ì§\81 ë§\8cë\93¤ì\96´ì§\80ì§\80 ì\95\8aì\95\98습니다.
-새 문서를 만들려면 아래의 상자에 문서 내용을 입력하면 됩니다(자세한 내용은 [[{{MediaWiki:Helppage}}|도움말]]을 읽어 주세요).
-ë§\8cì\95½ ì\9e\98못 ì°¾ì\95\84ì\98¨ ë¬¸ì\84\9cë\9d¼ë©´ ì\9b¹ 브라우저의 '''뒤로''' 버튼을 눌러 주세요.",
+'newarticletext' => "ì\95\84ì§\81 ì\97\86ë\8a\94 ë¬¸ì\84\9cì\9d\98 ë§\81í\81¬ë¥¼ ë\94°ë\9d¼ì\99\94습니다.
+새 문서를 만들려면 아래 상자에 내용을 입력하면 됩니다. (자세한 내용은 [[{{MediaWiki:Helppage}}|도움말 문서]]를 참고하세요)
+ë§\8cì\95½ ì\9e\98못 ì°¾ì\95\84ì\99\94ë\8b¤ë©´, 브라우저의 '''뒤로''' 버튼을 눌러 주세요.",
 'anontalkpagetext' => '----
 여기는 계정을 만들지 않았거나 사용하고 있지 않은 익명 사용자를 위한 토론 문서입니다.
 익명 사용자를 구별하기 위해서는 숫자로 된 IP 주소를 사용해야만 합니다.
 IP 주소는 여러 사용자가 공유할 수 있습니다.
 자신과 관계없는 의견이 자신에게 남겨져 있어 불쾌하다고 생각하는 익명 사용자는 [[Special:UserLogin/signup|계정을 만들고]] [[Special:UserLogin|로그인해서]] 나중에 다른 익명 사용자에게 줄 혼란을 줄일 수 있습니다.',
 'noarticletext' => '이 문서가 현재 존재하지 않습니다.
-이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|거나]],
+이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|검색하거나]],
 이 문서에 관련된 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 기록]을 확인하거나,
 문서를 직접 [{{fullurl:{{FULLPAGENAME}}|action=edit}} 편집]</span>할 수 있습니다.',
 'noarticletext-nopermission' => '이 문서가 현재 존재하지 않습니다.
-이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|거나]], 이 문서에 관련된 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 기록]을 확인할 수 있습니다.</span> 그러나 이 문서를 만들 수 있는 권한은 없습니다.',
+이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|검색하거나]], 이 문서에 관련된 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 기록]을 확인할 수 있습니다.</span> 그러나 이 문서를 만들 수 있는 권한은 없습니다.',
 'missing-revision' => '"{{PAGENAME}}"이라는 문서의 #$1판이 존재하지 않습니다.
 
 이 문제는 주로 삭제된 문서를 가리키는 오래된 문서 역사 링크로 인해 발생합니다.
@@ -1285,7 +1287,7 @@ $2개 보다 적게 {{PLURAL:$2|써야}} 하지만 {{PLURAL:$1|지금은 $1개
 'history-feed-item-nocomment' => '$2에 대한 $1의 편집',
 'history-feed-empty' => '요청한 문서가 존재하지 않습니다.
 해당 문서가 삭제되었거나, 문서 이름이 바뀌었을 수 있습니다.
-[[Special:Search|찾기]]를 사용해 관련 문서를 찾아보세요.',
+[[Special:Search|ì\9c\84í\82¤ì\9d\98 ê²\80ì\83\89]]ì\9d\84 사용해 관련 문서를 찾아보세요.',
 
 # Revision deletion
 'rev-deleted-comment' => '(편집 요약 삭제됨)',
@@ -1346,8 +1348,8 @@ $2개 보다 적게 {{PLURAL:$2|써야}} 하지만 {{PLURAL:$1|지금은 $1개
 'revdelete-hide-user' => '편집자의 사용자 이름/IP 주소',
 'revdelete-hide-restricted' => '관리자도 보지 못하게 숨기기',
 'revdelete-radio-same' => '(바꾸지 않음)',
-'revdelete-radio-set' => '보이기',
-'revdelete-radio-unset' => '숨기기',
+'revdelete-radio-set' => '숨겨짐',
+'revdelete-radio-unset' => '보여짐',
 'revdelete-suppress' => '문서 내용을 관리자에게도 보이지 않게 숨기기',
 'revdelete-unsuppress' => '되살린 판에 대한 제한을 해제',
 'revdelete-log' => '이유:',
@@ -1438,11 +1440,11 @@ $1",
 자세한 내용은 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 확인할 수 있습니다.',
 
 # Search results
-'searchresults' => '찾기 결과',
-'searchresults-title' => '"$1"에 대한 찾기 결과',
-'searchresulttext' => '{{SITENAME}}의 찾기 기능에 대한 자세한 정보는 [[{{MediaWiki:Helppage}}|{{int:help}}]] 문서를 참고해주세요.',
-'searchsubtitle' => '\'\'\'[[:$1]]\'\'\' 문서를 고 있습니다. ([[Special:Prefixindex/$1|이름이 "$1" 접두어로 시작하는 문서 목록]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1" 문서를 가리키는 문서 목록]])',
-'searchsubtitleinvalid' => "찾은 단어 '''$1'''",
+'searchresults' => '검색 결과',
+'searchresults-title' => '"$1"에 대한 검색 결과',
+'searchresulttext' => '{{SITENAME}} 검색에 대한 자세한 정보는 [[{{MediaWiki:Helppage}}|{{int:help}}]] 문서를 참고하세요.',
+'searchsubtitle' => '\'\'\'[[:$1]]\'\'\' 문서를 검색하고 있습니다. ([[Special:Prefixindex/$1|이름이 "$1" 접두어로 시작하는 문서 목록]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1" 문서를 가리키는 문서 목록]])',
+'searchsubtitleinvalid' => "'''$1''' 검색어로 검색했습니다",
 'toomanymatches' => '일치하는 결과가 너무 많습니다. 다른 검색어를 입력해주세요.',
 'titlematches' => '문서 제목 일치',
 'notitlematches' => '해당하는 제목 없음',
@@ -1454,20 +1456,20 @@ $1",
 'nextn-title' => '다음 {{PLURAL:$1|결과}} $1개',
 'shown-title' => '쪽마다 {{PLURAL:$1|결과}} $1개씩 보기',
 'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) 보기',
-'searchmenu-legend' => '찾기 설정',
+'searchmenu-legend' => '검색 설정',
 'searchmenu-exists' => "'''이 위키에 \"[[:\$1]]\"의 이름을 가진 문서가 있습니다.'''",
 'searchmenu-new' => "'''이 위키에 \"[[:\$1]]\" 문서를 만드세요!'''",
-'searchmenu-prefix' => '[[Special:PrefixIndex/$1|이 접두어로 시작하는 문서 찾기]]',
+'searchmenu-prefix' => '[[Special:PrefixIndex/$1|이 접두어로 시작하는 문서 찾아보기]]',
 'searchprofile-articles' => '본문',
 'searchprofile-project' => '도움말 및 프로젝트 문서',
 'searchprofile-images' => '멀티미디어',
-'searchprofile-everything' => '모든 문서 찾기',
+'searchprofile-everything' => '모든 문서',
 'searchprofile-advanced' => '고급',
-'searchprofile-articles-tooltip' => '$1에서 찾기',
-'searchprofile-project-tooltip' => '$1에서 찾기',
-'searchprofile-images-tooltip' => '파일 찾기',
-'searchprofile-everything-tooltip' => '토론 문서를 포함한 모든 문서 찾기',
-'searchprofile-advanced-tooltip' => '다음 설정한 이름공간에서 찾기',
+'searchprofile-articles-tooltip' => '$1에서 검색',
+'searchprofile-project-tooltip' => '$1에서 검색',
+'searchprofile-images-tooltip' => '파일 검색',
+'searchprofile-everything-tooltip' => '토론 문서를 포함한 모든 문서 검색',
+'searchprofile-advanced-tooltip' => '다음 설정한 이름공간에서 검색',
 'search-result-size' => '$1 ({{PLURAL:$2|1 단어|$2 단어}})',
 'search-result-category-size' => '{{PLURAL:$1|문서 1개|문서 $1개}}, {{PLURAL:$2|하위 분류 1개|하위 분류 $2개}}, {{PLURAL:$3|파일 1개|파일 $3개}}',
 'search-result-score' => '유사도: $1%',
@@ -1478,35 +1480,36 @@ $1",
 'search-interwiki-default' => '$1 결과:',
 'search-interwiki-more' => '(더 보기)',
 'search-relatedarticle' => '관련',
-'mwsuggest-disable' => '찾기 제안 비활성화',
-'searcheverything-enable' => '모든 이름공간에서 찾기',
+'mwsuggest-disable' => '검색 제안 비활성화',
+'searcheverything-enable' => '모든 이름공간에서 검색',
 'searchrelated' => '관련',
 'searchall' => '모두',
 'showingresults' => "'''$2'''번 부터의 {{PLURAL:$1|결과 '''1'''개|결과 '''$1'''개}}입니다.",
 'showingresultsnum' => "'''$2'''번 부터의 {{PLURAL:$3|결과 '''1'''개|결과 '''$3'''개}} 입니다.",
 'showingresultsheader' => "'''$4''' 검색어에 대하여 {{PLURAL:$5|결과 '''$3'''개 중 '''$1'''개|결과 '''$3'''개 중 '''$1 - $2'''번째}}를 보여 주고 있습니다",
-'nonefound' => "'''참고''': 몇개의 이름공간만 기본 찾을 범위입니다. 토론이나 틀 등의 모든 자료를 찾하기 위해서는 접두어로 '''all:''' 어떤 이름공간을 위해서는 접두어로 그 이름공간을 쓸 수 있습니다.",
-'search-nonefound' => '찾기 결과가 없습니다.',
-'powersearch' => '고급 찾기',
-'powersearch-legend' => '고급 찾기',
-'powersearch-ns' => '다음 이름공간에서 찾기:',
+'nonefound' => "'''참고''': 일부 이름공간만 기본으로 검색합니다.
+토론 문서나 틀 등의 모든 내용을 검색하려면 접두어로 '''all:'''를 시도하거나, 원하는 이름공간을 접두어로 사용하세요.",
+'search-nonefound' => '검색어와 일치하는 결과가 없습니다.',
+'powersearch' => '고급 검색',
+'powersearch-legend' => '고급 검색',
+'powersearch-ns' => '다음 이름공간에서 검색:',
 'powersearch-redir' => '넘겨주기 목록',
-'powersearch-field' => '찾기',
+'powersearch-field' => '검색',
 'powersearch-togglelabel' => '확인:',
 'powersearch-toggleall' => '모두',
 'powersearch-togglenone' => '모두 제외',
-'search-external' => '바깥 찾기',
-'searchdisabled' => '{{SITENAME}} 찾기 기능이 비활성화되어 있습니다.
¸°ë\8a¥ì\9d´ ì\9e\91ë\8f\99í\95\98ì§\80 ì\95\8aë\8a\94 ë\8f\99ì\95\88ì\97\90ë\8a\94 êµ¬ê¸\80(Google)ì\9d\84 ì\9d´ì\9a©í\95´ ì°¾ì\9d\84 수 있습니다.
-ê²\80ì\83\89 ì\97\94ì§\84ì\9d\98 ë\82´ì\9a©ì\9d\80 ìµ\9cì\8b ì\9d´ ì\95\84ë\8b\90 ì\88\98 ì\9e\88ë\8b¤ë\8a\94 ì \90ì\9d\84 ì£¼ì\9d\98í\95´ì£¼세요.',
-'search-error' => '는 동안 오류가 발생했습니다: $1',
+'search-external' => '바깥 검색',
+'searchdisabled' => '{{SITENAME}} 검색이 비활성화되어 있습니다.
²\80ì\83\89ì\9d´ ì\9e\91ë\8f\99í\95\98ì§\80 ì\95\8aë\8a\94 ë\8f\99ì\95\88ì\97\90ë\8a\94 Google(구ê¸\80\9d\84 í\86µí\95´ ê²\80ì\83\89í\95  수 있습니다.
+ê²\80ì\83\89 ì\97\94ì§\84ì\9d\98 ë\82´ì\9a©ì\9d\80 ìµ\9cì\8b ì\9d´ ì\95\84ë\8b\90 ì\88\98 ì\9e\88ë\8b¤ë\8a\94 ì \90ì\9d\84 ì°¸ê³ í\95\98세요.',
+'search-error' => '검색하는 동안 오류가 발생했습니다: $1',
 
 # Preferences page
 'preferences' => '사용자 환경 설정',
 'mypreferences' => '환경 설정',
 'prefs-edits' => '편집 횟수:',
 'prefsnologin' => '로그인하지 않음',
-'prefsnologintext' => 'ì\82¬ì\9a©ì\9e\90 í\99\98ê²½ ì\84¤ì \95ì\9d\84 ë°\94꾸려면 ë¨¼ì \80 <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ë¡\9cê·¸ì\9d¸]</span>í\95´ì\95¼ í\95©ë\8b\88ë\8b¤.',
+'prefsnologintext2' => 'ì\82¬ì\9a©ì\9e\90 í\99\98ê²½ ì\84¤ì \95ì\9d\84 ì\84¤ì \95í\95\98려면 $1í\95\98ì\8b­ì\8b\9cì\98¤.',
 'changepassword' => '비밀번호 바꾸기',
 'prefs-skin' => '스킨',
 'skin-preview' => '미리 보기',
@@ -1535,7 +1538,7 @@ $1",
 'prefs-editing' => '편집 상자',
 'rows' => '줄 수:',
 'columns' => '열 수:',
-'searchresultshead' => '찾기',
+'searchresultshead' => '검색',
 'resultsperpage' => '쪽마다 보이는 결과 수:',
 'stub-threshold' => '링크를 <a href="#" class="stub">토막글</a> 형식으로 보여줄 문서 크기 (바이트 수):',
 'stub-threshold-disabled' => '비활성화됨',
@@ -1565,9 +1568,9 @@ $1",
 'timezoneregion-indian' => '인도양',
 'timezoneregion-pacific' => '태평양',
 'allowemail' => '다른 사용자가 보낸 이메일을 받음',
-'prefs-searchoptions' => '찾기',
+'prefs-searchoptions' => '검색',
 'prefs-namespaces' => '이름공간',
-'defaultns' => '다음 이름공간에서 찾기:',
+'defaultns' => '다음 이름공간에서 검색:',
 'default' => '기본값',
 'prefs-files' => '파일',
 'prefs-custom-css' => '사용자 CSS',
@@ -1659,7 +1662,7 @@ HTML 태그를 확인하세요.',
 'group-bot' => '봇',
 'group-sysop' => '관리자',
 'group-bureaucrat' => '사무관',
-'group-suppress' => '오버사이트',
+'group-suppress' => '기록보호자',
 'group-all' => '(모두)',
 
 'group-user-member' => '{{GENDER:$1|사용자}}',
@@ -1667,14 +1670,14 @@ HTML 태그를 확인하세요.',
 'group-bot-member' => '{{GENDER:$1|봇}}',
 'group-sysop-member' => '{{GENDER:$1|관리자}}',
 'group-bureaucrat-member' => '{{GENDER:$1|사무관}}',
-'group-suppress-member' => '{{GENDER:$1|오버사이트}}',
+'group-suppress-member' => '{{GENDER:$1|기록보호자}}',
 
 'grouppage-user' => '{{ns:project}}:일반 사용자',
 'grouppage-autoconfirmed' => '{{ns:project}}:자동 인증된 사용자',
 'grouppage-bot' => '{{ns:project}}:봇',
 'grouppage-sysop' => '{{ns:project}}:관리자',
 'grouppage-bureaucrat' => '{{ns:project}}:사무관',
-'grouppage-suppress' => '{{ns:project}}:오버사이트',
+'grouppage-suppress' => '{{ns:project}}:기록보호자',
 
 # Rights
 'right-read' => '문서 읽기',
@@ -1705,7 +1708,7 @@ HTML 태그를 확인하세요.',
 'right-deleterevision' => '문서의 특정 판을 삭제하고 되살리기',
 'right-deletedhistory' => '삭제된 문서의 내용을 제외한 역사를 보기',
 'right-deletedtext' => '삭제된 문서의 내용과 편집상의 차이를 보기',
-'right-browsearchive' => '삭제된 문서 찾기',
+'right-browsearchive' => '삭제된 문서 검색',
 'right-undelete' => '삭제된 문서 되살리기',
 'right-suppressrevision' => '관리자도 보지 못하도록 숨겨진 판을 검토하고 되살리기',
 'right-suppressionlog' => '숨겨진 기록을 보기',
@@ -1739,7 +1742,7 @@ HTML 태그를 확인하세요.',
 'right-patrolmarks' => '최근 바뀜에서 검토 표시를 보기',
 'right-unwatchedpages' => '주시되지 않은 문서 목록 보기',
 'right-mergehistory' => '문서의 역사를 합침',
-'right-userrights' => '모든 사용자의 권한 조정',
+'right-userrights' => '사용자의 모든 권한 조정',
 'right-userrights-interwiki' => '다른 위키의 사용자 권한을 조정',
 'right-siteadmin' => '데이터베이스를 잠그거나 잠금 해제',
 'right-override-export-depth' => '5단계로 링크된 문서를 포함하여 문서를 내보내기',
@@ -1773,7 +1776,7 @@ HTML 태그를 확인하세요.',
 'action-delete' => '이 문서 삭제하기',
 'action-deleterevision' => '이 판을 삭제',
 'action-deletedhistory' => '이 문서의 삭제된 기여의 역사 보기',
-'action-browsearchive' => '삭제된 문서 찾기',
+'action-browsearchive' => '삭제된 문서 검색',
 'action-undelete' => '이 문서 되살리기',
 'action-suppressrevision' => '이 숨겨진 판을 검토하고 되살릴',
 'action-suppressionlog' => '비공개 기록 보기',
@@ -1786,7 +1789,7 @@ HTML 태그를 확인하세요.',
 'action-autopatrol' => '자신의 편집을 검토된 것으로 표시할',
 'action-unwatchedpages' => '주시되지 않은 문서 목록 보기',
 'action-mergehistory' => '이 문서의 역사 합치기',
-'action-userrights' => '모든 사용자의 권한을 조정',
+'action-userrights' => '사용자의 모든 권한 조정',
 'action-userrights-interwiki' => '다른 위키의 사용자 권한을 조정',
 'action-siteadmin' => '데이터베이스를 잠그거나 잠금 해제하기',
 'action-sendemail' => '이메일 보내기',
@@ -1858,7 +1861,7 @@ HTML 태그를 확인하세요.',
 
 이 문서의 최근 삭제 기록과 이동 기록을 참고하십시오:",
 'uploadtext' => "파일을 올리기 위해서는 아래의 양식을 채워주세요.
-[[Special:FileList|파일 목록]]에서 이전에 올라온 파일을 찾을 수 있습니다. [[Special:Log/upload|올리기 기록]]에는 파일이 올라온 기록이 남습니다. 삭제 기록은 [[Special:Log/delete|삭제 기록]]에서 볼 수 있습니다.
+[[Special:FileList|파일 목록]]에서 이전에 올라온 파일을 검색할 수 있습니다. [[Special:Log/upload|올리기 기록]]에는 파일이 올라온 기록이 남습니다. 삭제 기록은 [[Special:Log/delete|삭제 기록]]에서 볼 수 있습니다.
 
 문서에 파일을 넣으려면 아래 방법 중 하나를 사용하세요.
 * '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' 파일의 온전한 모양을 사용하고자 할 때
@@ -2107,7 +2110,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 
 # Special:ListFiles
 'listfiles-summary' => '이 특수 문서는 모든 올려진 파일을 보여줍니다.',
-'listfiles_search_for' => '다음 이름을 가진 미디어 찾기:',
+'listfiles_search_for' => '다음 미디어 이름 검색:',
 'imgfile' => '파일',
 'listfiles' => '파일 목록',
 'listfiles_thumb' => '섬네일',
@@ -2138,7 +2141,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'filehist-dimensions' => '크기',
 'filehist-filesize' => '파일 크기',
 'filehist-comment' => '덧글',
-'filehist-missing' => 'í\8c\8cì\9d¼ì\9d\84 ì°¾ì\9d\84 ì\88\98 없음',
+'filehist-missing' => 'í\8c\8cì\9d¼ì\9d´ 없음',
 'imagelinks' => '이 파일을 사용하는 문서',
 'linkstoimage' => '다음 {{PLURAL:$1|문서 $1개}}가 이 파일을 가리키고 있습니다:',
 'linkstoimage-more' => '$1개 이상의 {{PLURAL:$1|문서}}가 이 파일을 가리키고 있습니다.
@@ -2197,8 +2200,8 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'filedelete-maintenance-title' => '파일을 삭제할 수 없습니다',
 
 # MIME search
-'mimesearch' => 'MIME 찾기',
-'mimesearch-summary' => 'MIME 타입에 해당하는 파일을 찾습니다.
+'mimesearch' => 'MIME 검색',
+'mimesearch-summary' => 'MIME 유형에 해당하는 파일을 검색합니다.
 다음 형태로 입력해주세요: 내용종류/하위종류, 예를 들어 <code>image/jpeg</code>',
 'mimetype' => 'MIME 종류:',
 'download' => '다운로드',
@@ -2346,17 +2349,17 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'notargettitle' => '해당하는 문서 없음',
 'notargettext' => '기능을 수행할 대상 문서나 사용자를 지정하지 않았습니다.',
 'nopagetitle' => '해당하는 문서 없음',
-'nopagetext' => 'ì°¾ë\8a\94 문서가 존재하지 않습니다.',
+'nopagetext' => 'ì§\80ì \95í\95\9c ë\8c\80ì\83\81 문서가 존재하지 않습니다.',
 'pager-newer-n' => '{{PLURAL:$1|다음 1개|다음 $1개}}',
 'pager-older-n' => '{{PLURAL:$1|이전 1개|이전 $1개}}',
 'suppress' => '오버사이트',
 'querypage-disabled' => '이 특수 문서는 성능상의 이유로 비활성화되었습니다.',
 
 # Book sources
-'booksources' => 'ì±\85 ì°¾ê¸°',
-'booksources-search-legend' => 'ì±\85 ì°¾ê¸°',
+'booksources' => 'ì±\85 ì\9e\90ë£\8c',
+'booksources-search-legend' => 'ì±\85 ì\9b\90본 ê²\80ì\83\89',
 'booksources-isbn' => 'ISBN:',
-'booksources-go' => '찾기',
+'booksources-go' => '검색',
 'booksources-text' => '아래의 목록은 새 책이나 중고 책을 판매하는 바깥 사이트로, 원하는 책의 정보를 얻을 수 있습니다.',
 'booksources-invalid-isbn' => '입력한 ISBN이 잘못된 것으로 보입니다. 원본과 대조해 보세요.',
 
@@ -2368,7 +2371,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'alllogstext' => '{{SITENAME}}에서의 기록이 모두 나와 있습니다.
 기록 종류, 사용자 이름, 문서 이름을 선택해서 볼 수 있습니다. (대소문자를 구별합니다.)',
 'logempty' => '일치하는 항목이 없습니다.',
-'log-title-wildcard' => '다음 글로 시작하는 제목 찾기',
+'log-title-wildcard' => '다음 글로 시작하는 제목 검색',
 'showhideselectedlogentries' => '선택한 기록 항목 보이기/숨기기',
 
 # Special:AllPages
@@ -2410,10 +2413,10 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'sp-deletedcontributions-contribs' => '기여',
 
 # Special:LinkSearch
-'linksearch' => '바깥 링크 찾기',
-'linksearch-pat' => '찾기 패턴:',
+'linksearch' => '바깥 링크 검색',
+'linksearch-pat' => '검색 패턴:',
 'linksearch-ns' => '이름공간:',
-'linksearch-ok' => '찾기',
+'linksearch-ok' => '검색',
 'linksearch-text' => '"*.wikipedia.org"와 같이 와일드 카드를 사용할 수 있습니다.
 적어도 "*.org"와 같이 최상위 도메인을 입력해야 합니다.<br />
 지원하는 {{PLURAL:$2|프로토콜}}: <code>$1</code> (프로토콜을 지정하지 않을 때 기본값은 http://)',
@@ -2554,7 +2557,7 @@ $PAGEINTRO $NEWPAGE
 이메일: $PAGEEDITOR_EMAIL
 위키: $PAGEEDITOR_WIKI
 
-이 문서를 열기 전에는 다른 알림 이메일을 더 이상 보내지 않습니다. 모든 주시 문서의 알림 딱지를 초기화할 수도 있습니다.
+로그인한 상태에서 이 문서를 열기 전에는 다른 알림 이메일을 더 이상 보내지 않습니다. 모든 주시 문서의 알림 딱지를 초기화할 수도 있습니다.
 
 {{SITENAME}} 알림 시스템
 
@@ -2739,11 +2742,11 @@ $1',
 
 [[Special:Log/delete|삭제 기록]]에서 최근의 삭제와 되살리기 기록을 볼 수 있습니다.",
 'undelete-header' => '최근에 삭제한 문서에 대한 기록은 [[Special:Log/delete|여기]]에서 볼 수 있습니다.',
-'undelete-search-title' => '삭제된 문서 찾기',
-'undelete-search-box' => '삭제된 문서 찾기',
+'undelete-search-title' => '삭제된 문서 검색',
+'undelete-search-box' => '삭제된 문서 검색',
 'undelete-search-prefix' => '다음으로 시작하는 문서 보기:',
-'undelete-search-submit' => '찾기',
-'undelete-no-results' => 'ì\82­ì \9cë\90\9c ë¬¸ì\84\9c ë³´ì¡´ì\97\90ì\84\9c ì\9d¼ì§\80하는 문서를 찾을 수 없습니다.',
+'undelete-search-submit' => '검색',
+'undelete-no-results' => 'ì\82­ì \9cë\90\9c ë¬¸ì\84\9c ë³´ì¡´ì\97\90ì\84\9c ì\9d¼ì¹\98하는 문서를 찾을 수 없습니다.',
 'undelete-filename-mismatch' => '타임스탬프가 $1인 파일의 버전을 되살릴 수 없습니다: 파일 이름이 일치하지 않습니다.',
 'undelete-bad-store-key' => '타임스탬프가 $1인 파일의 버전을 되살릴 수 없습니다: 파일이 삭제되기 전에 사라졌습니다.',
 'undelete-cleanup-error' => '사용되지 않는 보존된 파일 "$1"을 삭제하는 데 오류가 발생했습니다.',
@@ -2788,10 +2791,10 @@ $1',
 해당 사용자의 차단 기록은 다음과 같습니다:',
 'sp-contributions-blocked-notice-anon' => '이 IP 주소는 현재 차단되어 있습니다.
 차단 기록은 다음과 같습니다:',
-'sp-contributions-search' => '기여 찾기',
+'sp-contributions-search' => '기여 검색',
 'sp-contributions-username' => 'IP 주소 또는 사용자 이름:',
 'sp-contributions-toponly' => '최신판만 보기',
-'sp-contributions-submit' => '찾기',
+'sp-contributions-submit' => '검색',
 'sp-contributions-explain' => '',
 
 # What links here
@@ -2868,7 +2871,7 @@ $1',
 'unblocked-id' => '$1 차단이 해제되었습니다.',
 'blocklist' => '차단된 사용자 목록',
 'ipblocklist' => '차단된 사용자',
-'ipblocklist-legend' => '차단 중인 사용자 찾기',
+'ipblocklist-legend' => '차단 사용자 찾기',
 'blocklist-userblocks' => '계정에 대한 차단 숨기기',
 'blocklist-tempblocks' => '기한이 정해진 차단을 숨기기',
 'blocklist-addressblocks' => '단일 IP 차단을 숨기기',
@@ -2879,7 +2882,7 @@ $1',
 'blocklist-by' => '차단한 관리자',
 'blocklist-params' => '차단 설정',
 'blocklist-reason' => '이유',
-'ipblocklist-submit' => '찾기',
+'ipblocklist-submit' => '검색',
 'ipblocklist-localblock' => '로컬 차단',
 'ipblocklist-otherblocks' => '다른 {{PLURAL:$1|차단}} 기록',
 'infiniteblock' => '무기한',
@@ -3085,7 +3088,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'allmessagesdefault' => '기본 메시지 글',
 'allmessagescurrent' => '현재 문자열',
 'allmessagestext' => '미디어위키 이름공간에 있는 모든 시스템 메시지의 목록입니다.
-미디어위키의 번역 작업에 관심이 있으면 [//www.mediawiki.org/wiki/Localisation 미디어위키 지역화]나 [//translatewiki.net translatewiki.net]에 참가해주세요.',
+미디어위키의 번역 작업에 관심이 있으면 [https://www.mediawiki.org/wiki/Localisation 미디어위키 지역화]나 [//translatewiki.net translatewiki.net]에 참가해주세요.',
 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages'''가 비활성화되어 있어서 이 문서를 사용할 수 없습니다.",
 'allmessages-filter-legend' => '필터',
 'allmessages-filter' => '수정 상태로 거르기:',
@@ -3098,7 +3101,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 
 # Thumbnails
 'thumbnail-more' => '실제 크기로',
-'filemissing' => '파일 사라짐',
+'filemissing' => '파일이 없음',
 'thumbnail_error' => '섬네일을 만드는 중 오류 발생: $1',
 'thumbnail_error_remote' => '$1에서 반환한 오류 메시지:
 $2',
@@ -3108,7 +3111,7 @@ $2',
 'thumbnail-dest-create' => '대상 경로에 섬네일을 저장할 수 없습니다.',
 'thumbnail_invalid_params' => '섬네일 매개변수가 잘못되었습니다.',
 'thumbnail_dest_directory' => '새 목적 디렉터리를 만들 수 없습니다.',
-'thumbnail_image-type' => 'í\95´ë\8b¹ í\8c\8cì\9d¼ í\98\95ì\8b\9dì\9d\80 ì§\80ì\9b\90í\95\98ì§\80 ì\95\8aì\8aµë\8b\88ë\8b¤',
+'thumbnail_image-type' => '그림 í\98\95ì\8b\9dì\9d´ ì§\80ì\9b\90ë\90\98ì§\80 ì\95\8aì\8aµë\8b\88ë\8b¤',
 'thumbnail_gd-library' => 'GD 라이브러리 설정이 잘못되었습니다: $1 함수를 찾을 수 없습니다.',
 'thumbnail_image-missing' => '파일을 찾을 수 없습니다: $1',
 
@@ -3207,9 +3210,9 @@ $2',
 'tooltip-ca-move' => '문서 이동하기',
 'tooltip-ca-watch' => '이 문서를 주시문서 목록에 추가',
 'tooltip-ca-unwatch' => '이 문서를 주시문서 목록에서 제거',
-'tooltip-search' => '{{SITENAME}} 찾기',
+'tooltip-search' => '{{SITENAME}} 검색',
 'tooltip-search-go' => '이 이름의 문서가 존재하면 그 문서로 바로 가기',
-'tooltip-search-fulltext' => '이 문자열이 포함된 문서 찾기',
+'tooltip-search-fulltext' => '이 문자열이 포함된 문서 검색',
 'tooltip-p-logo' => '대문으로 가기',
 'tooltip-n-mainpage' => '대문으로 가기',
 'tooltip-n-mainpage-description' => '대문으로 가기',
@@ -3252,7 +3255,7 @@ $2',
 'tooltip-undo' => '"편집 취소" 기능을 사용하면 이 편집이 되돌려지고 차이 보기 기능이 미리 보기 형식으로 나타납니다. 편집 요약에 이 편집을 왜 되돌리는지에 대한 이유를 쓸 수 있습니다.',
 'tooltip-preferences-save' => '환경 설정 저장하기',
 'tooltip-summary' => '짧은 요약을 적어주세요',
-'tooltip-iwiki' => '$2 - $1',
+'interlanguage-link-title' => '$2 - $1',
 
 # Stylesheets
 'common.css' => '/* 이 CSS 설정은 모든 스킨에 동일하게 적용됩니다 */',
@@ -3317,6 +3320,7 @@ $2',
 'pageinfo-length' => '문서 길이 (바이트)',
 'pageinfo-article-id' => '문서 ID',
 'pageinfo-language' => '문서 내용 언어',
+'pageinfo-content-model' => '문서 콘텐츠 모델',
 'pageinfo-robot-policy' => '로봇에 의한 색인',
 'pageinfo-robot-index' => '허용됨',
 'pageinfo-robot-noindex' => '불허됨',
@@ -3404,7 +3408,7 @@ $1',
 'svg-long-desc' => 'SVG 파일, 실제 크기 $1 × $2 픽셀, 파일 크기: $3',
 'svg-long-desc-animated' => '애니메이션 SVG 파일, 실제 크기 $1 × $2 픽셀, 파일 크기: $3',
 'svg-long-error' => '잘못된 SVG 파일: $1',
-'show-big-image' => 'ìµ\9cë\8c\80 í\95´ì\83\81ë\8f\84',
+'show-big-image' => 'ì\9b\90본 í\8c\8cì\9d¼',
 'show-big-image-preview' => '미리 보기 크기: $1',
 'show-big-image-other' => '다른 {{PLURAL:$2|해상도}}: $1',
 'show-big-image-size' => '$1 × $2 픽셀',
@@ -3424,7 +3428,7 @@ $1',
 'newimages-label' => '파일 이름 (또는 그 일부분):',
 'showhidebots' => '(봇을 $1)',
 'noimages' => '그림이 없습니다.',
-'ilsubmit' => '찾기',
+'ilsubmit' => '검색',
 'bydate' => '날짜',
 'sp-newimages-showfrom' => '$1 $2부터 올라온 파일 목록 보기',
 
@@ -3433,7 +3437,7 @@ $1',
 'minutes' => '$1분',
 'hours' => '$1시간',
 'days' => '$1일',
-'weeks' => '{{PLURAL:$1|$1주}}',
+'weeks' => '$1주',
 'months' => '$1달',
 'years' => '$1년',
 'ago' => '$1 전',
@@ -3468,8 +3472,8 @@ Variants for Chinese language
 
 # Metadata
 'metadata' => '메타데이터',
-'metadata-help' => '이 파일은 카메라나 스캐너에서 기록한 부가 정보를 가지고 있습니다.
-프로그램에서 파일을 편집할 경우, 새로 저장한 그림 파일에 일부 부가 정보가 빠질 수 있습니다.',
+'metadata-help' => '이 파일은 그 파일을 만들거나 디지털화하는 데 사용되는 카메라나 스캐너에서 기록한 부가 정보를 가지고 있습니다.
+프로그램에서 파일을 편집할 경우, 새로 저장한 파일에 일부 부가 정보가 빠질 수 있습니다.',
 'metadata-expand' => '자세한 정보 보이기',
 'metadata-collapse' => '자세한 정보 숨기기',
 'metadata-fields' => '파일 메타데이터 표가 접혀 있을 때, 이 메시지에 올라와 있는 다음 속성값만이 기본적으로 보이게 됩니다.
@@ -3882,8 +3886,8 @@ Variants for Chinese language
 'exif-urgency-other' => '사용자 정의 ($1)',
 
 # External editor support
-'edit-externally' => '이 파일을 바깥 프로그램을 사용해서 편집하기',
-'edit-externally-help' => '(자세한 정보는 [//www.mediawiki.org/wiki/Manual:External_editors 설치 방법]을 참고하세요)',
+'edit-externally' => '이 파일을 바깥 어플리케이션을 사용해 편집하기',
+'edit-externally-help' => '(자세한 정보는 [https://www.mediawiki.org/wiki/Manual:External_editors 설치 방법]을 참고하세요)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => '모두',
@@ -3903,7 +3907,7 @@ Variants for Chinese language
 'confirmemail_send' => '인증 코드를 메일로 보내기',
 'confirmemail_sent' => '인증 이메일을 보냈습니다.',
 'confirmemail_oncreate' => '확인 이메일을 보냈습니다.
-이 확인 과정은 로그인하는 데에 필요하지는 않지만, 위키 프로그램에서 제공하는 이메일 기능을 사용하기 위해서 필요합니다.',
+이 확인 과정은 로그인하는 데에 필요하지는 않지만, 위키에서 제공하는 이메일 기능을 사용하기 위해서 필요합니다.',
 'confirmemail_sendfailed' => '{{SITENAME}}에서 인증 이메일을 보낼 수 없습니다.
 이메일 주소를 잘못 입력했는지 확인해주세요.
 
@@ -3986,6 +3990,9 @@ $5
 'confirm-unwatch-button' => '확인',
 'confirm-unwatch-top' => '이 문서를 주시문서 목록에서 뺄까요?',
 
+# Separators for various lists, etc.
+'quotation-marks' => '“$1”',
+
 # Multipage image navigation
 'imgmultipageprev' => '← 이전 페이지',
 'imgmultipagenext' => '다음 페이지 →',
@@ -4073,16 +4080,16 @@ $5
 'version-hook-subscribedby' => '훅이 사용된 위치',
 'version-version' => '(버전 $1)',
 'version-license' => '라이선스',
-'version-poweredby-credits' => "이 위키는 '''[//www.mediawiki.org/ MediaWiki]'''를 기반으로 작동합니다. Copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "이 위키는 '''[https://www.mediawiki.org/ MediaWiki]'''를 기반으로 작동합니다. Copyright © 2001-$1 $2.",
 'version-poweredby-others' => '그 외 다른 개발자',
 'version-poweredby-translators' => 'translatewiki.net 번역자',
-'version-credits-summary' => '[[Special:Version|미디어위키]]에 기여한 다음 사람í\95\9cí\85\8c ê°\90ì\82¬ë\93\9c립ë\8b\88ë\8b¤.',
+'version-credits-summary' => '[[Special:Version|미디어위키]]에 기여한 다음 사람ì\97\90ê²\8c ê°\90ì\82¬ë\93\9c립ë\8b\88ë\8b¤.',
 'version-license-info' => "미디어위키는 자유 소프트웨어입니다. 당신은 자유 소프트웨어 재단이 발표한 GNU 일반 공중 사용 허가서 버전 2나 그 이후 버전에 따라 이 파일을 재배포하거나 수정할 수 있습니다.
 
 미디어위키가 유용하게 사용될 수 있기를 바라지만 '''상용으로 사용'''되거나 '''특정 목적에 맞을 것'''이라는 것을 '''보증하지 않습니다'''. 자세한 내용은 GNU 일반 공중 사용 허가서 전문을 참고하십시오.
 
 당신은 이 프로그램을 통해 [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU 일반 공중 사용 허가서 전문]을 받았습니다. 그렇지 않다면, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA로 편지를 보내주시거나 [//www.gnu.org/licenses/old-licenses/gpl-2.0.html 온라인으로 읽어보시기] 바랍니다.",
-'version-software' => '설치된 프로그램',
+'version-software' => '설치된 소프트웨어',
 'version-software-product' => '제품',
 'version-software-version' => '버전',
 'version-entrypoints' => 'URL 진입점',
@@ -4095,7 +4102,7 @@ $5
 'redirect' => '파일, 사용자나 판 ID별 넘겨주기',
 'redirect-legend' => '파일이나 문서로 넘겨주기',
 'redirect-summary' => '이 특수 문서는 파일(파일 이름을 지정), 문서(판 ID를 지정)나 사용자 문서(사용자 ID를 정수로 지정)로 넘겨줍니다. 사용법: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], 혹은 [[{{#Special:Redirect}}/user/101]].',
-'redirect-submit' => '기',
+'redirect-submit' => '기',
 'redirect-lookup' => '찾을 종류:',
 'redirect-value' => '값:',
 'redirect-user' => '사용자 ID',
@@ -4104,11 +4111,11 @@ $5
 'redirect-not-exists' => '값을 찾을 수 없습니다',
 
 # Special:FileDuplicateSearch
-'fileduplicatesearch' => '중복된 파일 찾기',
-'fileduplicatesearch-summary' => '파일 해시값을 이용해 중복 파일을 찾습니다.',
-'fileduplicatesearch-legend' => '중복 찾기',
+'fileduplicatesearch' => '중복된 파일 검색',
+'fileduplicatesearch-summary' => '파일 해시값을 이용해 중복 파일을 검색합니다.',
+'fileduplicatesearch-legend' => '중복 검색',
 'fileduplicatesearch-filename' => '파일 이름:',
-'fileduplicatesearch-submit' => '찾기',
+'fileduplicatesearch-submit' => '검색',
 'fileduplicatesearch-info' => '$1 × $2 픽셀<br />파일 크기: $3<br />MIME 유형: $4',
 'fileduplicatesearch-result-1' => '"$1" 파일과 중복된 파일이 없습니다.',
 'fileduplicatesearch-result-n' => '"$1" 파일은 {{PLURAL:$2|중복 파일이 $2개}} 있습니다.',
@@ -4116,8 +4123,8 @@ $5
 
 # Special:SpecialPages
 'specialpages' => '특수 문서 목록',
-'specialpages-note' => '----
-* 일반 특수 문서입니다.
+'specialpages-note-top' => '범례',
+'specialpages-note' => '* 일반 특수 문서입니다.
 * <span class="mw-specialpagerestricted">제한된 특수 문서입니다.</span>',
 'specialpages-group-maintenance' => '관리용 목록',
 'specialpages-group-other' => '다른 특수 문서',
@@ -4201,8 +4208,8 @@ $5
 'htmlform-chosen-placeholder' => '선택하세요',
 
 # SQLite database support
-'sqlite-has-fts' => '$1 (본문 전체 찾기)',
-'sqlite-no-fts' => '$1 (본문은 찾기에서 제외)',
+'sqlite-has-fts' => '$1 (본문 전체 검색 지원)',
+'sqlite-no-fts' => '$1 (본문 전체 검색 지원 제외)',
 
 # New logging system
 'logentry-delete-delete' => '$1 사용자가 $3 문서를 {{GENDER:$2|삭제했습니다}}',
@@ -4257,7 +4264,7 @@ $5
 'feedback-bugnew' => '확인했습니다. 새로운 버그 보고서를 작성합니다.',
 
 # Search suggestions
-'searchsuggest-search' => '찾기',
+'searchsuggest-search' => '검색',
 'searchsuggest-containing' => '다음 문자열 포함...',
 
 # API errors
index ab8c0d5..1901e4a 100644 (file)
@@ -742,7 +742,7 @@ $messages = array(
 
 # External editor support
 'edit-externally' => 'Редактируйтны этiйö файлсö мöд программа пыр',
-'edit-externally-help' => '(унажык видзöт: [//www.mediawiki.org/wiki/Manual:External_editors удж кежö лöсьöтны туйдöтан])',
+'edit-externally-help' => '(унажык видзöт: [https://www.mediawiki.org/wiki/Manual:External_editors удж кежö лöсьöтны туйдöтан])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'быдöс',
index b886dce..147c5ee 100644 (file)
@@ -1168,7 +1168,6 @@ $1",
 'mypreferences' => 'Джарашдырыула',
 'prefs-edits' => 'Тюрлендириулени саны:',
 'prefsnologin' => 'Системагъа кесигизни танытмагъансыз',
-'prefsnologintext' => 'Къошулуучуну джарашдырыуларын тюрлендирир ючюн <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} системагъа кесигизни танытыргъа]</span> керексиз.',
 'changepassword' => 'Паролну ауушдур',
 'prefs-skin' => 'Джасауу',
 'skin-preview' => 'Ал къарау',
@@ -2583,7 +2582,7 @@ $1',
 'allmessagesdefault' => 'Оригинал текст',
 'allmessagescurrent' => 'Хайырлана тургъан текст',
 'allmessagestext' => 'Бу тизме MediaWiki ат аламында бар болгъан система билдириулени тизмесиди.
-MediaWiki локализациясына юлюш къошаргъа излей эсегиз, [//www.mediawiki.org/wiki/Localisation MediaWiki локализация] бла [//translatewiki.net translatewiki.net] сайтлагъа киригиз.',
+MediaWiki локализациясына юлюш къошаргъа излей эсегиз, [https://www.mediawiki.org/wiki/Localisation MediaWiki локализация] бла [//translatewiki.net translatewiki.net] сайтлагъа киригиз.',
 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' джабыкъ болгъаны ючюн '''{{ns:special}}:Allmessages''' хайырланыугъа ачыкъ тюлдю.",
 'allmessages-filter-legend' => 'Фильтр',
 'allmessages-filter' => 'Тюрлендириуюне кёре фильтрлендир:',
@@ -3279,7 +3278,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'Бу файлны тыш программа бла тюрлендиригиз',
-'edit-externally-help' => '(толу информациягъа мында къарагъыз: [//www.mediawiki.org/wiki/Manual:External_editors setup instructions])',
+'edit-externally-help' => '(толу информациягъа мында къарагъыз: [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'бютеу',
@@ -3506,7 +3505,7 @@ $5
 'version-hook-subscribedby' => 'Абонент болгъан',
 'version-version' => '(Версия $1)',
 'version-license' => 'Лицензия',
-'version-poweredby-credits' => "Бу вики '''[//www.mediawiki.org/ MediaWiki]''' программа бла ишлейди, copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Бу вики '''[https://www.mediawiki.org/ MediaWiki]''' программа бла ишлейди, copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'башхала',
 'version-license-info' => 'MediaWiki эркин программа джазыуду, сиз аны GNU General Public License лицензияны (эркин программа джазыуланы фонду чыгъаргъан; экинчи версиясы неда андан кеч къайсысы да) шартларына кёре джаяргъа эмда/неда тюрлендирирге боллукъсуз.
 
@@ -3533,8 +3532,7 @@ MediaWiki хайырлы боллукъду деген умут бла джай
 
 # Special:SpecialPages
 'specialpages' => 'Къуллукъчу бетле',
-'specialpages-note' => '----
-* Тюз къуллукъчу бетле.
+'specialpages-note' => '* Тюз къуллукъчу бетле.
 * <span class="mw-specialpagerestricted">Кирирге эркинлик чекленнген къуллукъчу бетле.</span>
 * <span class="mw-specialpagecached">Кэш этилген къуллукъчу бетле (эски болургъа боллукъдула).</span>',
 'specialpages-group-maintenance' => 'Техника баджарыуну отчетлары',
index 8d41d92..be848a7 100644 (file)
@@ -1446,7 +1446,6 @@ dat dänne ehr Daate topaktoell sin,
 'mypreferences' => 'Enstellunge',
 'prefs-edits' => 'Aanzahl Änderunge am Wiki:',
 'prefsnologin' => 'Nit enjelogg',
-'prefsnologintext' => 'Do mööts ald <span class="plainlinks">[{{fullurl:{{#special:UserLogin}}|returnto=$1}} enjelogg]</span> sin, öm Ding Enstellunge ze ändere.',
 'changepassword' => 'Passwood *',
 'prefs-skin' => 'Et Ussinn',
 'skin-preview' => 'Vör-Ansich',
@@ -3047,7 +3046,7 @@ zo jroße Lass för dä ẞööver.',
 'allmessagesdefault' => 'Dä standaadmäßije Tex',
 'allmessagescurrent' => 'Esu es dä Tex jetz',
 'allmessagestext' => 'Heh kütt en Liss met Texte, Texstöck, un Nohreechte em Appachtemeng „MediaWiki“ — Do draan Ändere löht et Wiki anders ußsin, dat darf dröm nit Jede maache.
-Wenn De jenerell aan [//www.mediawiki.org/wiki/Localisation MediaWiki singe Översezung] jet anders han wells, do jangk noh [//translatewiki.net translatewiki.net].',
+Wenn De jenerell aan [https://www.mediawiki.org/wiki/Localisation MediaWiki singe Översezung] jet anders han wells, do jangk noh [//translatewiki.net translatewiki.net].',
 'allmessagesnotsupportedDB' => '<strong>Dat wor nix!</strong> Mer künne „{{#special:allmessages}}“ nit zeije, <code>$wgUseDatabaseMessages</code> es usjeschalt!',
 'allmessages-filter-legend' => 'Ußsöhke — wat för en Täxte o Nohreeshte aazeije?',
 'allmessages-filter' => 'Zohshtand:',
@@ -3847,7 +3846,7 @@ Donoh kumme, en däsellve Reih, Links op Sigge wo die Datei trotz dämm jenehm e
 
 # External editor support
 'edit-externally' => 'Dun de Datei met enem externe Projramm bei Dr om Rechner bearbeide',
-'edit-externally-help' => '(Luur en de [//www.mediawiki.org/wiki/Manual:External_editors Aanleidong för de Enschtallazjuhn] noh mieh Henwiese)',
+'edit-externally-help' => '(Luur en de [https://www.mediawiki.org/wiki/Manual:External_editors Aanleidong för de Enschtallazjuhn] noh mieh Henwiese)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'all',
@@ -4099,7 +4098,7 @@ Dä Shtanndat-Zoot-Schlößel „$1“ övverschriif dä älldere Zoot-Schlöße
 'version-hook-subscribedby' => 'Opjeroofe vun',
 'version-version' => '(Väsjohn $1)',
 'version-license' => 'Lėzänz',
-'version-poweredby-credits' => "Dat Wiki heh löp met '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001–$1 $2.",
+'version-poweredby-credits' => "Dat Wiki heh löp met '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001–$1 $2.",
 'version-poweredby-others' => 'sönß wää',
 'version-poweredby-translators' => 'de Övversäzer em translatewiki.net',
 'version-credits-summary' => 'Mer bedanke ons för iehr Beidrähsch zom [[Special:Version|MediaWiki]] bei:',
@@ -4142,8 +4141,7 @@ Do sullts en [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie vun dä <i lang="en">GNU Ge
 
 # Special:SpecialPages
 'specialpages' => '{{int:nstab-special}}e',
-'specialpages-note' => '----
-* {{int:nstab-special}}e för jede Metmaacher.
+'specialpages-note' => '* {{int:nstab-special}}e för jede Metmaacher.
 * <span class="mw-specialpagerestricted">{{int:nstab-special}}e för Metmaacher met besönder Räächde.</span>
 * <span class="mw-specialpagecached">Em Zwescheshpeisher jehallde {{int:nstab-special}}e. Di künnte ovverhollt sind.</span>',
 'specialpages-group-maintenance' => 'Waadungsleste',
index 09da332..cc09f47 100644 (file)
@@ -879,7 +879,6 @@ Sedema qedexekirina $3 ev e: ''$2''",
 'mypreferences' => 'Tercihên min',
 'prefs-edits' => 'Hejmarê guherandinan:',
 'prefsnologin' => 'Xwe tomar nekir',
-'prefsnologintext' => 'Tu gireke xwe <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} qeydbikê]</span> ji bo guherandina tercihên bikarhêneran.',
 'changepassword' => 'Şîfreyê biguherîne',
 'prefs-skin' => 'Pêste',
 'skin-preview' => 'Pêşdîtin',
@@ -2025,7 +2024,7 @@ Ji ber ku girêdaneke derve di wê rûpelê de heye ev pirsgirêk pêk hat.',
 'exif-iimcategory-wea' => 'Hewa',
 
 # External editor support
-'edit-externally-help' => '(Ji bo agahîyên zav [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] li vir binêre)',
+'edit-externally-help' => '(Ji bo agahîyên zav [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] li vir binêre)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'hemû',
@@ -2124,8 +2123,7 @@ Ji kerema xwe zanibe ku tu bi rastî dixwazî vê rûpelê dîsa çêkî.",
 
 # Special:SpecialPages
 'specialpages' => 'Rûpelên taybet',
-'specialpages-note' => '----
-* Rûpelên taybetî ji her kesan ra
+'specialpages-note' => '* Rûpelên taybetî ji her kesan ra
 * <strong class="mw-specialpagerestricted">Rûpelên taybetî ji bikarhêneran bi mafên zêdetir ra</strong>',
 'specialpages-group-other' => 'Rûpelên taybetî yên din',
 'specialpages-group-login' => 'Têkeve',
index bac3319..0926c66 100644 (file)
@@ -1676,7 +1676,7 @@ To include a file in a page, use a link in one of the following forms:
 
 # External editor support
 'edit-externally' => 'Бул файлды сырткы программа колдонуу аркылуу оңдоо',
-'edit-externally-help' => '(Толук маалымат алуу үчүн [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] барагына кайрылсаңыз болот)',
+'edit-externally-help' => '(Толук маалымат алуу үчүн [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] барагына кайрылсаңыз болот)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'баары',
index d7a4bbc..c8471a1 100644 (file)
@@ -829,8 +829,8 @@ Titulus: '''({{int:cur}})''' = dissimilis ab emendatione novissima,
 'revdelete-hide-comment' => 'Summarium emendationis',
 'revdelete-hide-user' => 'Nomen usoris/locus IP',
 'revdelete-radio-same' => 'non mutare',
-'revdelete-radio-set' => 'Visibiles/visibilia',
-'revdelete-radio-unset' => 'Non visibiles/non visibilia',
+'revdelete-radio-set' => 'Celare',
+'revdelete-radio-unset' => 'Visibiles/visibilia',
 'revdelete-log' => 'Causa:',
 'revdel-restore' => 'visibilitatem mutare',
 'revdel-restore-deleted' => 'Recensiones deletae',
@@ -935,7 +935,6 @@ Conare praefixare tua inquisitionem cum ''all:'' ut quaeras contenta omnia (pagi
 'mypreferences' => 'Praeferentiae',
 'prefs-edits' => 'Numerus recensionum:',
 'prefsnologin' => 'Conventum non est apertum',
-'prefsnologintext' => '<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} Conventum aperire]</span> debes ad praeferentias tuas modificandum.',
 'changepassword' => 'Tesseram mutare',
 'prefs-skin' => 'Aspectum',
 'skin-preview' => 'Praevisum',
@@ -1449,7 +1448,7 @@ Adspectum graciliorem potes facere modum indicum, nomen usoris (cave litteras ma
 'allnotinnamespace' => 'Omnes paginae (quibus in spatio nominali $1 exclusis)',
 'allpagesprev' => 'Superior',
 'allpagesnext' => 'Proxima',
-'allpagessubmit' => 'Ire',
+'allpagessubmit' => 'Adhibere',
 'allpagesprefix' => 'Monstrare paginas quibus est praeverbium:',
 'allpagesbadtitle' => 'Nomen paginae datum fuit invalidum aut praverbium interlinguale vel interviciale habuit. Fortasse insunt una aut plus litterarum quae in titulis non possunt inscribier.',
 'allpages-bad-ns' => 'Non est spatium nominale "$1" apud {{grammar:accusative|{{SITENAME}}}}.',
@@ -1719,6 +1718,7 @@ Si pagina nova cum ipso nomine post deletionem creata est, emendationes restitut
 # Namespace form on various pages
 'namespace' => 'Spatium nominale:',
 'invert' => 'Selectionem invertere',
+'namespace_association' => 'Spatium nominale pertinens',
 'blanknamespace' => '(principale)',
 
 # Contributions
@@ -2293,7 +2293,7 @@ Paginae nomen petitum "[[:$1]]" iam existit. Vin tu eam delere ut pagina illic m
 
 # External editor support
 'edit-externally' => 'Hunc fasciculum in programmate externali recensere',
-'edit-externally-help' => '(Vide et [//www.mediawiki.org/wiki/Manual:External_editors paginas adiutorias] programmatis externalis)',
+'edit-externally-help' => '(Vide et [https://www.mediawiki.org/wiki/Manual:External_editors paginas adiutorias] programmatis externalis)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'omnes',
@@ -2467,6 +2467,7 @@ Quaesumus, adfirma ut iterum hanc paginam crees.",
 
 # Search suggestions
 'searchsuggest-search' => 'Quaerere',
+'searchsuggest-containing' => 'continens...',
 
 # API errors
 'api-error-empty-file' => 'Fasciculus inmissus vacuus est.',
index e33bc4d..af5e5eb 100644 (file)
@@ -1177,7 +1177,7 @@ Los otros campos se van a guardar por defecto.
 
 # External editor support
 'edit-externally' => 'Trocar esto arxivo usando una aplicación eksterna',
-'edit-externally-help' => '(Melda las [//www.mediawiki.org/wiki/Manual:External_editors enstruksiones de configuración] -en inglés- para saber más)',
+'edit-externally-help' => '(Melda las [https://www.mediawiki.org/wiki/Manual:External_editors enstruksiones de configuración] -en inglés- para saber más)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'todos',
index 51ffbd1..e4b44fd 100644 (file)
@@ -641,7 +641,7 @@ Vergiesst net fir Är [[Special:Preferences|{{SITENAME}} Astellungen]] z'ännere
 'gotaccount' => "Dir hutt schonn e Benotzerkont? '''$1'''.",
 'gotaccountlink' => 'Umellen',
 'userlogin-resetlink' => "Hutt Dir d'Detailer vun Ärem Login vergiess?",
-'userlogin-resetpassword-link' => 'Setzt Äert Passwuert zréck',
+'userlogin-resetpassword-link' => 'Hutt Dir Äert Passwuert vergiess?',
 'helplogin-url' => 'Help:Aloggen',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hëllef beim Aloggen]]',
 'userlogin-loggedin' => 'Dir sidd schonn als {{GENDER:$1|$1}} ageloggt.
@@ -716,8 +716,8 @@ Fir de Mëssbrauch vun dëser Funktioun ze verhënneren kann nëmmen all {{PLURA
 'acct_creation_throttle_hit' => 'Visiteure vun dëser Wiki déi Är IP-Adress hu {{PLURAL:$1|schonn $1 Benotzerkont|scho(nn) $1 Benotzerkonten}} an de leschten Deeg opgemaach, dëst ass déi maximal Zuel déi an dësem Zäitraum erlaabt ass.
 Dofir kënne Visiteure déi dës IP-Adress benotzen den Ament keng Benotzerkonten opmaachen.',
 'emailauthenticated' => 'Är E-Mail-Adress gouf den $2 ëm $3 Auer bestätegt.',
-'emailnotauthenticated' => 'Är E-Mail Adress gouf <strong>nach net confirméiert</strong>.<br />
-Dowéinst ass et bis ewell net méiglech, fir déi folgend Funktiounen E-Mailen ze schécken oder ze kréien.',
+'emailnotauthenticated' => 'Är E-Mail Adress gouf nach net confirméiert.
+Dowéinst gëtt fir keng vun dëse Funktiounen E-Maile geschéckt.',
 'noemailprefs' => 'Gitt eng E-Mailadress bei Ären Astellungen un, fir datt déi Funktioune funktionéieren.',
 'emailconfirmlink' => 'Confirméiert Är E-Mailadress w.e.g.',
 'invalidemailaddress' => 'Dës E-Mail-Adress gëtt net akzeptéiert well se en ongëltegt Format (z. B. ongëlteg Zeechen) ze hu schéngt.
@@ -1081,8 +1081,8 @@ De Benotzer $3 huet "$2" als Grond uginn.',
 *k = Kleng Ännerung.",
 'history-fieldset-title' => 'An de Versioune sichen',
 'history-show-deleted' => 'nëmmen déi geläschten',
-'histfirst' => 'eelsten',
-'histlast' => 'neisten',
+'histfirst' => 'eelst',
+'histlast' => 'neist',
 'historysize' => '({{PLURAL:$1|1 Byte|$1 Byten}})',
 'historyempty' => '(eidel)',
 
@@ -1138,10 +1138,11 @@ Dir kënnt dësen Ënnerscheed gesinn; Detailer fannt Dir am [{{fullurl:{{#Speci
 'revdelete-show-file-submit' => 'Jo',
 'revdelete-selected' => "'''{{PLURAL:$2|Gewielt Versioun|Gewielt Versioune}} vu(n) [[:$1]] :'''",
 'logdelete-selected' => "'''Ausgewielten {{PLURAL:$1|Evenement|Evenementer}} aus dem Logbuch:'''",
-'revdelete-text' => "'''Geläschte Versiounen oder aner geläschte Bestanddeeler sinn net méi ëffentlech zougänglech, si stinn awer weiderhin an der Versiounsgeschicht vun der Säit.'''
-Aner {{SITENAME}}-Administrateure kënnen de geläschten Inhalt oder aner geläschte Bestanddeeler weiderhi gesinn a restauréieren, et sief, et gouf festgeluecht, datt déi Limitatioune vum Accès och fir Administrateure gëllen.",
+'revdelete-text' => "'''Geläscht Versiounen oder aner geläscht Bestanddeeler sinn net méi ëffentlech zougänglech, si stinn awer weiderhin an der Versiounsgeschicht vun der Säit.'''
+Aner {{SITENAME}}-Administrateure kënnen de geläschten Inhalt oder aner geläscht Bestanddeeler weiderhi gesinn a restauréieren, et sief, et gouf festgeluecht, datt déi Limitatioune vum Accès och fir Administrateure gëllen.",
 'revdelete-confirm' => "Confirméiert w.e.g. datt Dir dat maache wëllt, datt Dir d'Konsequenze verstitt an datt Dir dëst an Aklang mat de [[{{MediaWiki:Policy-url}}|Richtlinne]] maacht.",
 'revdelete-suppress-text' => "Ënnerdréckung sollt '''nëmmen''' an dëse Fäll benotzt ginn:
+* Informatiounen déi beleidege kéinten
 * Net ubruechte perséinlechen Informatiounen
 *: ''Adressen, Telefonsnummeren, Sozialversécherungsnummeren asw.''",
 'revdelete-legend' => "Limitatioune fir d'Sichtbarkeet festleeën",
@@ -1152,8 +1153,8 @@ Aner {{SITENAME}}-Administrateure kënnen de geläschten Inhalt oder aner geläs
 'revdelete-hide-user' => 'Dem Auteur säi Benotzernumm/IP-Adress',
 'revdelete-hide-restricted' => 'Donnéeën och fir Administrateuren suppriméieren geneesou wéi fir déi Aner',
 'revdelete-radio-same' => '(net änneren)',
-'revdelete-radio-set' => 'Visibel',
-'revdelete-radio-unset' => 'Verstoppt',
+'revdelete-radio-set' => 'Verstoppt',
+'revdelete-radio-unset' => 'Visibel',
 'revdelete-suppress' => 'Grond vum Läschen och fir Administrateure verstoppt',
 'revdelete-unsuppress' => 'Limitatiounen fir restauréiert Versiounen ophiewen',
 'revdelete-log' => 'Grond:',
@@ -1192,7 +1193,7 @@ Kuckt w.e.g. an de Logbicher no.",
 
 # Suppression log
 'suppressionlog' => 'Lëscht vun de verstoppten a geläschte Säiten',
-'suppressionlogtext' => 'Ënnendrënner ass eng Lëscht vun de geläschte Säiten a Spären a vun den Administrateuren verstopptem Inhalt.
+'suppressionlogtext' => 'Ënnendrënner ass eng Lëscht vun de geläschte Säiten a Spären an Inhalt dee vun den Administrateure verstoppt gouf.
 Kuckt [[Special:BlockList|Lëscht vun Späre]] fir déi aktuell Spären.',
 
 # History merging
@@ -1312,7 +1313,6 @@ Detailer fannt Dir am [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'mypreferences' => 'Astellungen',
 'prefs-edits' => 'Zuel vun den Ännerungen:',
 'prefsnologin' => 'Net ageloggt',
-'prefsnologintext' => 'Dir musst <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}}ageloggt]</span> sinn, fir Är Astellungen änneren ze kënnen.',
 'changepassword' => 'Passwuert änneren',
 'prefs-skin' => 'Skin',
 'skin-preview' => 'Kucken',
@@ -1660,9 +1660,9 @@ Säite vun [[Special:Watchlist|Ärer Iwwerwaachungslëscht]] si '''fett''' gesch
 
 Hei fannt Dir en Extrait aus dem Läsch- a Réckel-Logbuch fir dëse Fichier.",
 'uploadtext' => "Benotzt dëse Formulaire, fir nei Fichieren eropzelueden.
-Gitt op d'[[Special:FileList|Lëscht vun den eropgeluedene Fichieren]], fir no Fichieren ze sichen déi virdrun eropgeluede goufen, Eropluedunge fannt dir an der [[Special:Log/upload|Lëscht vun den eropgeluedene Fichieren]], geläschte Fichieren am [[Special:Log/delete|Läschlog]].
+Gitt op d'[[Special:FileList|Lëscht vun den eropgeluedene Fichieren]], fir no Fichieren ze sichen déi virdrun eropgeluede goufen, Eropluedunge fannt dir an der [[Special:Log/upload|Lëscht vun den eropgeluedene Fichieren]], geläscht Fichiere stinn am [[Special:Log/delete|Läschlog]].
 
-Fir e '''Bild''' op enger Säit zu benotzen, schreift amplaz vum Bild eng vun dëse Formelen:
+Fir e '''Bild''' op enger Säit ze benotzen, schreift amplaz vum Bild eng vun dëse Formelen:
 * '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fichier.jpg]]</nowiki></code>''' fir déi ganz Versioun vum Fichier ze benotzen
 * '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fichier.png|200px|thumb|left|alt text]]</nowiki></code>''' fir eng 200 Pixel breet Versioun an enger Këscht am lénke Rand mat 'alt text' als Beschreiwung
 * '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Fichier.ogg]]</nowiki></code>''' fir e Fichier direkt ze verlinken ouni de Fichier ze weisen",
@@ -2481,10 +2481,10 @@ Fir nëmmen eng bestëmmte Versioun vun der Säit ze restauréieren, markéiert
 'undeleterevisions' => '{{PLURAL:$1|1 Versioun|$1 Versiounen}} archivéiert',
 'undeletehistory' => 'Wann Dir dës Säit restauréiert, ginn och all déi al Versioune restauréiert.
 Wann zanter dem Läschen eng nei Säit mat dem selwechten Numm ugeluecht gouf, ginn déi restauréiert Versioune chronologesch an den Historique agedroen.',
-'undeleterevdel' => "D'Restauratioun gëtt net gemaach wann dëst dozou féiert datt déi aktuell Versioun vun der Säit oder vum Fichier deelweis geläscht gëtt.
-A sou Fäll däerf déi neiste Versioun net markéiert ginn oder déi neiste geläschte Versioun muss nees ugewise ginn.",
+'undeleterevdel' => "D'Restauratioun gëtt net gemaach wann dat dozou féiert datt déi aktuell Versioun vun der Säit oder vum Fichier deelweis geläscht gëtt.
+A sou Fäll däerf déi neist Versioun net markéiert ginn oder déi neist geläscht Versioun muss nees ugewise ginn.",
 'undeletehistorynoadmin' => "Dës Säit gouf geläscht. De Grond fir d'Läsche gesitt der ënnen, zesumme mat der Iwwersiicht vun den eenzele Versioune vun der Säit an hiren Auteuren. Déi verschidden Textversioune kënnen awer just vun Administrateure gekuckt a restauréiert ginn.",
-'undelete-revision' => 'Geläschte Versioun vu(n) $1 (Versioun vum $4 um $5 Auer) vum $3:',
+'undelete-revision' => 'Geläscht Versioun vu(n) $1 (Versioun vum $4 um $5 Auer) vum $3:',
 'undeleterevision-missing' => "Ongëlteg oder Versioun déi feelt. Entweder ass de Link falsch oder d'Versioun gouf aus dem Archiv restauréiert oder geläscht.",
 'undelete-nodiff' => 'Et si keng méi al Versiounen do.',
 'undeletebtn' => 'Restauréieren',
@@ -2516,7 +2516,7 @@ Am [[Special:Log/delete|Läsch-Logbuch]] fannt Dir déi geläscht a restauréier
 'undelete-error-long' => 'Beim Restauréiere vun engem Fichier goufe Feeler fonnt:
 
 $1',
-'undelete-show-file-confirm' => '!Sidd Dir sécher, datt dir eng geläschte Versioun vum Fichier „<nowiki>$1</nowiki>“ vum $2 ëm $3 Auer gesi wëllt?',
+'undelete-show-file-confirm' => 'Sidd Dir sécher, datt dir eng geläscht Versioun vum Fichier „<nowiki>$1</nowiki>“ vum $2 um $3 Auer gesi wëllt?',
 'undelete-show-file-submit' => 'Jo',
 
 # Namespace form on various pages
@@ -2839,7 +2839,7 @@ Wann nëmmen déi aktuell Versioun exportéiert soll ginn, kënnt Dir och e Link
 'allmessagesdefault' => 'Standardtext',
 'allmessagescurrent' => 'Aktuellen Text',
 'allmessagestext' => "Dëst ass eng Lëscht vun alle '''Messagen am MediaWiki:Nummraum, déi vun der MediaWiki-Software benotzt ginn.
-Besicht w.e.g. [//www.mediawiki.org/wiki/Localisation MediaWiki Localisatioun] an [//translatewiki.net translatewiki.net] wann Dir wëllt bei de MediaWiki Iwwersetzunge matschaffen.",
+Besicht w.e.g. [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisatioun] an [//translatewiki.net translatewiki.net] wann Dir wëllt bei de MediaWiki Iwwersetzunge matschaffen.",
 'allmessagesnotsupportedDB' => "Dës Säit kann net benotzt gi well '''\$wgUseDatabaseMessages''' ausgeschalt ass.",
 'allmessages-filter-legend' => 'Filter',
 'allmessages-filter' => 'Filter nom ugepassten Zoustand:',
@@ -3002,7 +3002,7 @@ Späichert en op Ärem Computer of a luet en hei nees erop.',
 Erlaabt et e Grond an de Resumé derbäizesetzen.',
 'tooltip-preferences-save' => 'Astellunge späicheren',
 'tooltip-summary' => 'Gitt e kuerze Resumé an',
-'tooltip-iwiki' => '$1 - $2',
+'interlanguage-link-title' => '$1 - $2',
 
 # Stylesheets
 'common.css' => "/* Dës CSS huet nëmmen Afloss op de Skin ''Chick''  */",
@@ -3052,6 +3052,7 @@ Fëllt dëst '''NET''' aus!",
 'pageinfo-length' => 'Gréisst vun der Säit (a Bytes)',
 'pageinfo-article-id' => 'ID (Nummer) vun der Säit',
 'pageinfo-language' => 'Sprooch vum Inhalt vun der Säit',
+'pageinfo-content-model' => 'Modell vun enger Säit mat Inhalt',
 'pageinfo-robot-policy' => 'Indexéierung duerch Botten',
 'pageinfo-robot-index' => 'Erlaabt',
 'pageinfo-robot-noindex' => 'Net erlaabt',
@@ -3110,7 +3111,7 @@ Fëllt dëst '''NET''' aus!",
 'log-show-hide-patrol' => 'Kontroll-Logbuch $1',
 
 # Image deletion
-'deletedrevision' => 'Al, geläschte Versioun $1',
+'deletedrevision' => 'Al, geläscht Versioun vu(n) $1',
 'filedeleteerror-short' => 'Feeler beim Läsche vum Fichier: $1',
 'filedeleteerror-long' => 'Bäim Läsche vum Fichier si Feeler festgestallt ginn:
 
@@ -3137,7 +3138,7 @@ Duerch d'Opmaache vum Fichier kann Äre System beschiedegt ginn.",
 'svg-long-desc' => 'SVG-Fichier, Basisgréisst: $1 × $2 Pixel, Gréisst vum Fichier: $3',
 'svg-long-desc-animated' => 'Animéierten SVG-Fichier, Basisgréisst $1 x $2 Pixel, Gréisst vum Fichier: $3',
 'svg-long-error' => 'Ongëltegen SVG-Fichier: $1',
-'show-big-image' => 'Voll Opléisung',
+'show-big-image' => 'Original Fichier',
 'show-big-image-preview' => 'Gréisst vun dësem Preview: $1.',
 'show-big-image-other' => 'Aner {{PLURAL:$2|Opléisung|Opléisungen}}: $1.',
 'show-big-image-size' => '$1 × $2 Pixel',
@@ -3596,7 +3597,7 @@ Déi aner sinn am Standard verstoppt.
 
 # External editor support
 'edit-externally' => 'Dëse Fichier mat engem externe Programm änneren',
-'edit-externally-help' => "(Fir gewuer ze gi wéi dat genee geet liest d'[//www.mediawiki.org/wiki/Manual:External_editors Installatiounsinstruktiounen].)",
+'edit-externally-help' => "(Fir gewuer ze gi wéi dat genee geet liest d'[https://www.mediawiki.org/wiki/Manual:External_editors Installatiounsinstruktiounen].)",
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'all',
@@ -3683,6 +3684,9 @@ Dëse Confirmatiounscode leeft den $4 of.',
 'confirm-unwatch-button' => 'OK',
 'confirm-unwatch-top' => 'Dës Säit vun Ärer Iwwerwaachungslëscht erofhuelen?',
 
+# Separators for various lists, etc.
+'quotation-marks' => '"$1"',
+
 # Multipage image navigation
 'imgmultipageprev' => '← Vireg Säit',
 'imgmultipagenext' => 'nächst Säit →',
@@ -3768,7 +3772,7 @@ Dir kënnt och [[Special:EditWatchlist|de Standard Editeur benotzen]].",
 'version-hook-subscribedby' => 'Opruff vum',
 'version-version' => '(Versioun $1)',
 'version-license' => 'Lizenz',
-'version-poweredby-credits' => "Dës Wiki funktionéiert mat '''[//www.mediawiki.org/ MediaWiki]''', Copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Dës Wiki funktionéiert mat '''[https://www.mediawiki.org/ MediaWiki]''', Copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'anerer',
 'version-poweredby-translators' => 'translatewiki.net Iwwersetzer',
 'version-credits-summary' => "Mir soen dëse Persoune 'Merci' fir hir Mataarbecht u [[Special:Version|MediaWiki]].",
@@ -3810,8 +3814,7 @@ Gebrauch: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/re
 
 # Special:SpecialPages
 'specialpages' => 'Spezialsäiten',
-'specialpages-note' => '----
-* Normal Spezialsäiten.
+'specialpages-note' => '* Normal Spezialsäiten.
 * <span class="mw-specialpagerestricted">Spezialsäite fir Benotzer mat méi Rechter.</span>
 * <span class="mw-specialpagecached">Spezialsäiten aus dem Tëschespäicher (ka vereelst sinn).</span>',
 'specialpages-group-maintenance' => 'Maintenance-Rapporten',
index df854b8..96e0bf8 100644 (file)
@@ -1266,7 +1266,7 @@ Cиягьда авай анжах (* лишандихъ галаз эгечIза
 
 # External editor support
 'edit-externally' => 'И файл патан программа куьмекдалди дуьзар хъувун',
-'edit-externally-help' => '(Алава малумат патал [//www.mediawiki.org/wiki/Manual:External_editors эцигунин регьбервилиз] килига)',
+'edit-externally-help' => '(Алава малумат патал [https://www.mediawiki.org/wiki/Manual:External_editors эцигунин регьбервилиз] килига)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'вири',
index f038432..bf8f3fc 100644 (file)
@@ -930,7 +930,7 @@ Si la fix ia es cambiada de se stato orijinal, alga detalias pote no es clara en
 
 # External editor support
 'edit-externally' => 'Edita esta fix con un programa esterna',
-'edit-externally-help' => '(Vide la [//www.mediawiki.org/wiki/Manual:External_editors instruis per comensa] per plu instruis)',
+'edit-externally-help' => '(Vide la [https://www.mediawiki.org/wiki/Manual:External_editors instruis per comensa] per plu instruis)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tota',
index da02d48..b7bcdf1 100644 (file)
@@ -1190,7 +1190,7 @@ Yogera nange gwe olina okugyegattira ku eyo esangidwawo.'''",
 'allmessagescurrent' => 'Ebiriwo kakano',
 'allmessagestext' => "Luno lwe lukalala olw'obubaka obwa sisitemu obw'omu kkuŋŋaanizo erya MediaWiki.
 
-Ob'oyagala okuyamba ku kuvvuunula eby'omu MediaWiki yonna, kebera ku [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] ne [//translatewiki.net translatewiki.net].",
+Ob'oyagala okuyamba ku kuvvuunula eby'omu MediaWiki yonna, kebera ku [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] ne [//translatewiki.net translatewiki.net].",
 'allmessages-filter-legend' => 'Ensunsula',
 'allmessages-filter' => 'Londamu:',
 'allmessages-filter-unmodified' => 'Ebitannakyusibwamu',
@@ -1309,7 +1309,7 @@ Ebirala biyinza butalabika okujjako ng'okiragidde.
 
 # External editor support
 'edit-externally' => 'Fayiro eno gikolereko mu pulogulamu endala',
-'edit-externally-help' => '[//www.mediawiki.org/wiki/Manual:External_editors Nyiga wano] okuyiga ebisingawo ku kukozesa pulogulamu endala okukola enkyukakyuka.',
+'edit-externally-help' => '[https://www.mediawiki.org/wiki/Manual:External_editors Nyiga wano] okuyiga ebisingawo ku kukozesa pulogulamu endala okukola enkyukakyuka.',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'Zonna',
index 3c042be..3b12fe3 100644 (file)
@@ -1155,7 +1155,6 @@ Mèrk op dat hun indexe van {{SITENAME}} content e bietje gedatierd kint zien.',
 'mypreferences' => 'Mien veurkäöre',
 'prefs-edits' => 'Aantal bewèrkinge:',
 'prefsnologin' => 'Neet aangemèld',
-'prefsnologintext' => 'De mós zeen <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} aagemeld]</span> óm dien veurkäöre te kónne insjtèlle.',
 'changepassword' => 'Wachwaord verangere',
 'prefs-skin' => '{{SITENAME}}-uterlik',
 'skin-preview' => 'Veurbesjouwing',
@@ -2596,7 +2595,7 @@ In 't letste geval kèns te ouch 'ne link gebroeken, bieveurbild [[{{#Special:Ex
 'allmessagesdefault' => 'Obligaten teks',
 'allmessagescurrent' => 'Hujige teks',
 'allmessagestext' => "Dit is 'n lies van alle systeemberichte besjikbaar in de MediaWiki-naamruumde.
-Bezeuk [//www.mediawiki.org/wiki/Localisation MediaWiki-lokalisatie] en [//translatewiki.net translatewiki.net] es doe wils biedrage aon lokalisatie.",
+Bezeuk [https://www.mediawiki.org/wiki/Localisation MediaWiki-lokalisatie] en [//translatewiki.net translatewiki.net] es doe wils biedrage aon lokalisatie.",
 'allmessagesnotsupportedDB' => "Deze pagina kan neet gebroek waere omdet '''\$wgUseDatabaseMessages''' oet steit.",
 'allmessages-filter-legend' => 'Filter',
 'allmessages-filter' => 'Filter óp aangepas:',
@@ -3278,7 +3277,7 @@ Alle volgende links die op dezelfde regel sjtaon, waere behanjeld es oetzunjerin
 
 # External editor support
 'edit-externally' => "Bewirk dit bestand mit 'n extern toepassing",
-'edit-externally-help' => '(zuug de [//www.mediawiki.org/wiki/Manual:External_editors setupinsjtructies] veur mie informatie)',
+'edit-externally-help' => '(zuug de [https://www.mediawiki.org/wiki/Manual:External_editors setupinsjtructies] veur mie informatie)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'al',
@@ -3458,7 +3457,7 @@ De kèns ouch [[Special:EditWatchlist|'t sjtanderd bewirkingssjirm gebroeke]].",
 'version-hook-subscribedby' => 'Geabonneerd door',
 'version-version' => '(Versie $1)',
 'version-license' => 'Licentie',
-'version-poweredby-credits' => "Deze wiki weurt aangedreve door '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Deze wiki weurt aangedreve door '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'anger',
 'version-license-info' => "MediaWiki is vrieje sofware; de kins MediaWiki verspreien en/of aanpassen onger de veurwaerde van de GNU General Public License wie gepubliceerd door de Free Software Foundation; ofwaal versie 2 van de Licentie, of - nao diene wönsj - innig later versie.
 
@@ -3485,8 +3484,7 @@ Same mit dit programma heurs se 'n [{{SERVER}}{{SCRIPTPATH}}/COPYING kopie van d
 
 # Special:SpecialPages
 'specialpages' => "Speciaal pagina's",
-'specialpages-note' => '----
-* Normaal speciaal pagina\'s
+'specialpages-note' => '* Normaal speciaal pagina\'s
 * <strong class="mw-specialpagerestricted">Beperk toegankelike speciaal pagina\'s</strong>
 * <span class="mw-specialpagecached">Speciaal pagina\'s mit allein gegaeves oete cache (meugelik verajerd)</span>',
 'specialpages-group-maintenance' => 'Óngerhajingsrapporter',
index 2bd36f8..af13d6a 100644 (file)
@@ -1389,7 +1389,7 @@ I inganci sucescivi, in scia mæxima riga, van conscideræ comme eceçioìn (pag
 
 # External editor support
 'edit-externally' => 'Càngia sto file co-in programma esterno',
-'edit-externally-help' => 'Pe avéi ciù informaçioìn amia e [//www.mediawiki.org/wiki/Manual:External_editors istruçioìn] (in ingléize)',
+'edit-externally-help' => 'Pe avéi ciù informaçioìn amia e [https://www.mediawiki.org/wiki/Manual:External_editors istruçioìn] (in ingléize)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'Tùtti',
index 3c07476..5418d93 100644 (file)
@@ -732,7 +732,7 @@ Až sugīz nei, sōd līed tōdõs kädūdõks jeddõpēḑõn sōtõ agā jūr
 
 # External editor support
 'edit-externally' => 'Protseššõgid failõ ulīz programmatūraks',
-'edit-externally-help' => '(Vaņ uļļizt redaktōrd adresõs [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] kȭlbatõmiz opātõkst)',
+'edit-externally-help' => '(Vaņ uļļizt redaktōrd adresõs [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] kȭlbatõmiz opātõkst)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tikkiž',
index 34b6dec..bf2409b 100644 (file)
@@ -1325,7 +1325,7 @@ I ligam che i vegnen dopu, in sü l'istessa riga, i vegnen cónsideraa di ecezi
 
 # External editor support
 'edit-externally' => 'Redatá chest archivi cunt un prugramari da fö',
-'edit-externally-help' => 'Varda [//www.mediawiki.org/wiki/Manual:External_editors i istrüzión] per avègh püssee infurmazión (in ingles).',
+'edit-externally-help' => 'Varda [https://www.mediawiki.org/wiki/Manual:External_editors i istrüzión] per avègh püssee infurmazión (in ingles).',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tücc',
index d7f8a6f..8d95c64 100644 (file)
@@ -899,7 +899,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 
 # External editor support
 'edit-externally' => 'ດັດແກ້ໄຟລ໌ນີ້ໂດຍໂປແກຣມພາຍນອກ',
-'edit-externally-help' => 'ເບິ່ງ ຂໍ້ມູນເພີ່ມຕື່ມ ຢູ່ [//www.mediawiki.org/wiki/Manual:External_editors setup instructions]',
+'edit-externally-help' => 'ເບິ່ງ ຂໍ້ມູນເພີ່ມຕື່ມ ຢູ່ [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions]',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ທັງໝົດ',
index 0fafbb0..ae71cc6 100644 (file)
@@ -881,7 +881,7 @@ Teri yaki, a nyanganyisize.",
 'allmessagesdefault' => 'Selt orge',
 'allmessagescurrent' => 'Selt nca',
 'allmessagestext' => 'Bye mukoloko sa mukoloko di mulumiwani di MediaWiki poo.
-Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
+Please visit [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
 
 # Thumbnails
 'thumbnail-more' => 'Pusize',
@@ -1011,7 +1011,7 @@ Xete ling'ki kwa lina sa konsidisize desepo. Petulo dimedi inlinenikusize.",
 
 # External editor support
 'edit-externally' => 'Kenki imegi sebilize pagini lakusi',
-'edit-externally-help' => 'Boniselelize [//www.mediawiki.org/wiki/Manual:External_editors instruksi setup] kwa informasi.',
+'edit-externally-help' => 'Boniselelize [https://www.mediawiki.org/wiki/Manual:External_editors instruksi setup] kwa informasi.',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'xeti',
diff --git a/languages/messages/MessagesLrc.php b/languages/messages/MessagesLrc.php
new file mode 100644 (file)
index 0000000..f1e28cb
--- /dev/null
@@ -0,0 +1,998 @@
+<?php
+/** لوری (لوری)
+ *
+ * See MessagesQqq.php for message documentation incl. usage of parameters
+ * To improve a translation please visit http://translatewiki.net
+ *
+ * @ingroup Language
+ * @file
+ *
+ * @author Mogoeilor
+ */
+
+$rtl = true;
+
+$messages = array(
+# User preference toggles
+'tog-underline' => 'هوم پیوند زیرخط دار:',
+'tog-justify' => 'فاصله نيائن سی پاراگرافيا',
+'tog-hideminor' => 'قام كردن ويرايشتيا كؤچك مئن آلشتيا تازه',
+'tog-hidepatrolled' => 'قام كردن ويرايشتيا تیه دیار کرده مئن آلشتيا تازه',
+'tog-newpageshidepatrolled' => 'بلگیا تیه دیار کرده نه مئن نوم گه بلگیا تازه قام کو',
+'tog-extendwatchlist' => 'سیل برگه نه سی نشو دئن تمام آلشتیا واکو نه فقط سی بیشتر تازه باوا.',
+'tog-usenewrc' => 'دسه بنی آلشتیا وا بلگه د آلشتیا تازه و سیل برگ',
+'tog-numberheadings' => 'سربلگه خود شماره گر',
+'tog-showtoolbar' => 'نوار اوزار ويرايشت نشون بيه',
+'tog-editondblclick' => 'بلگيا نه وا دوبار پورنين ويرايشت بكيد',
+'tog-editsection' => 'ممكن بيئن ويرايشت بشخيا وا [ويرايشت]',
+'tog-editsectiononrightclick' => 'بهر ویرایشت نه وا راس کلیک کردن د بهر عنوانیا فعال کو',
+'tog-showtoc' => 'چیا مئن جدول نشو بیه',
+'tog-rememberpassword' => 'اومائن وا مئن منه د ای مرورگر د ویر داشتو(سی بیشترین$1{{PLURAL:$1|day|days}})',
+'tog-watchcreations' => 'بلگیایی که مه راس کمه و فایلیایی که مه سوار کمه اضاف کو د سیل برگه مه',
+'tog-watchdefault' => 'بلگیا و فایلایی که مه ویرایشت کمه اضاف کو د سیل برگم',
+'tog-watchmoves' => 'بلگیاو فایلیایی که مه جاوه جا کمه د سیل برگم اضاف کو',
+'tog-watchdeletion' => 'بلگیا و فایلایی که مه پاک کمه اضاف کو د سیل برگم',
+'tog-minordefault' => 'همه ویرایشتیا کؤچک نه وا پیش فرض بیئن نشو دار کو.',
+'tog-previewontop' => 'پیش سیل نه دما جعوه ویرایشت نشو بیئه',
+'tog-previewonfirst' => 'پیش سیل نه د اولین ویرایشت نشو بیئه',
+'tog-enotifusertalkpages' => 'وختی که بلگه گپسن کارور آلشت پیدا کرد منه وا ایمیل خور کو',
+'tog-shownumberswatching' => 'انازه کاروریایی که د حالت دیئنن نشو بیه',
+'tog-oldsig' => 'امضايی هيئش:',
+'tog-uselivepreview' => 'د پیش سیل زنه استفاده کو',
+'tog-watchlisthideown' => 'قام كو ويرايشت منه د',
+'tog-diffonly' => 'بلگیایی که شومل فرخیا هارن نشون نیه',
+'tog-showhiddencats' => 'دسه يا قام بيئنه نشون بيه',
+
+'underline-always' => 'هميشه',
+'underline-never' => 'هيژوخت',
+
+# Font style option in Special:Preferences
+'editfont-style' => 'راساگه فونت شلک نه ویرایشت کو',
+'editfont-default' => 'مرورگر پیش بینی بیه',
+'editfont-sansserif' => 'سان سریف فونت',
+'editfont-serif' => 'فونت سريف',
+
+# Dates
+'sunday' => 'يه شمه',
+'monday' => 'دوشمه',
+'tuesday' => 'سه شمه',
+'wednesday' => 'چارشمه',
+'thursday' => 'پن شمه',
+'friday' => 'جمه',
+'saturday' => 'شمه',
+'sun' => 'يه شمه',
+'mon' => 'دوشمه',
+'tue' => 'سه شمه',
+'wed' => 'چارشمه',
+'thu' => 'پن شمه',
+'fri' => 'جمه',
+'sat' => 'شمه',
+'january' => 'جانويه',
+'february' => 'فبريه',
+'march' => 'مارش',
+'april' => 'آبريل',
+'may_long' => 'ما',
+'june' => 'جوئن',
+'july' => 'جولای',
+'august' => 'اگوست',
+'september' => 'سپتامر',
+'october' => 'اكتور',
+'november' => 'نوامر',
+'december' => 'دسامر',
+'january-gen' => 'جانويه',
+'february-gen' => 'فوريه',
+'march-gen' => 'مارش',
+'april-gen' => 'آوريل',
+'may-gen' => 'ما',
+'june-gen' => 'جوئن',
+'july-gen' => 'جولای',
+'august-gen' => 'اگوست',
+'september-gen' => 'سپتامر',
+'october-gen' => 'اكتور',
+'november-gen' => 'نوامر',
+'december-gen' => 'دسامر',
+'jan' => 'ژانويه',
+'feb' => 'فبريه',
+'mar' => 'مارش',
+'apr' => 'آبريل',
+'may' => 'ما',
+'jun' => 'جوئن',
+'jul' => 'جولا',
+'aug' => 'اوگوست',
+'sep' => 'سپتامر',
+'oct' => 'اكتور',
+'nov' => 'نوامر',
+'dec' => 'دسامر',
+'january-date' => 'جانويه $1',
+'february-date' => 'فوريه  $1',
+'march-date' => 'مارس  $1',
+'april-date' => 'آوريل $1',
+'may-date' => 'ما $1',
+'june-date' => 'جوئن $1',
+'july-date' => 'جولاي  $1',
+'august-date' => 'اوت  $1',
+'september-date' => 'سپتامر $1',
+'october-date' => 'اكتور  $1',
+'november-date' => 'نوامر  $1',
+'december-date' => 'دسامر $1',
+
+# Categories related messages
+'pagecategories' => '{{PLURAL:$1|دسه|دسه يا}}',
+'category_header' => 'بلگيا مئن دسه "$1"',
+'subcategories' => 'زيردسه يا',
+'category-media-header' => 'رسانه د دسه "$1"',
+'category-empty' => 'ای دسه واقعن شومل هیژ بلگه ای یا رسانه ای نی',
+'hidden-categories' => '{{PLURAL:$1|دسته قام بيه|دسته يا قام بيه}}',
+'hidden-category-category' => 'دسه یا قام بیه',
+'category-subcat-count' => '{{جمی:$2|ای دسه شومل بلگه نهاییه .| {{جمی:$1| بلگه هئ|$1 بلگیا هئن}} د ای زیردسه, خارج د $2 کل.}}',
+'category-article-count' => '{{جمی:$2|ای دسه شومل بلگه نهاییه .| {{جمی:$1| بلگه هئ|$1 بلگیا هئن}} د ای دسه, خارج د $2 کل.}}',
+'listingcontinuesabbrev' => 'دماله',
+'index-category' => 'بلگيا سيائه دار',
+'noindex-category' => 'بلگيا بی سيائه',
+
+'about' => 'دباره',
+'article' => 'محتوا بلگه',
+'newwindow' => '(نيمدری  تازه وا کو)',
+'cancel' => 'رد كردن',
+'moredotdotdot' => 'بيشتر',
+'morenotlisted' => 'ای ليست كامل نبيه',
+'mypage' => 'بلگه',
+'mytalk' => 'چك چنه',
+'anontalk' => 'دباره نشونی ای آی پی قصه بكيد',
+'navigation' => 'ناوگشتن',
+'and' => '&#32;و',
+
+# Cologne Blue skin
+'qbfind' => 'فهمسن،جسن',
+'qbbrowse' => 'قرض گرتن',
+'qbedit' => 'ويرايشت',
+'qbpageoptions' => 'ای بلگه',
+'qbmyoptions' => 'بلگيا مه',
+'qbspecialpages' => 'بلگيا ويجه',
+'faq' => 'اف ای كيو',
+'faqpage' => 'پروجه:اف اي كيو',
+
+# Vector skin
+'vector-action-addsection' => 'موضوع اضاف بكيد',
+'vector-action-delete' => 'حذف بكيد',
+'vector-action-move' => 'جاوه جا بوئيت',
+'vector-action-protect' => 'حمايت بكيد',
+'vector-action-undelete' => 'حذف نبيئني',
+'vector-action-unprotect' => 'حمايت آلشت بكيد',
+'vector-view-create' => 'راس كردن',
+'vector-view-edit' => 'ويرايشت',
+'vector-view-history' => 'ديئن ويرگار',
+'vector-view-view' => 'حنن',
+'vector-view-viewsource' => 'سرچشمه نه بوينيت',
+'actions' => 'جمشت',
+'namespaces' => 'نوم جا',
+'variants' => 'آلشت ونی يا',
+
+'navigation-heading' => 'منو ناوگشتن',
+'errorpagetitle' => 'غلط',
+'returnto' => 'ورگشت وه $1.',
+'tagline' => 'د {{SITENAME}}',
+'help' => 'هومياری',
+'search' => 'پی چوری',
+'searchbutton' => 'پی جوری',
+'go' => 'رو',
+'searcharticle' => 'رو',
+'history' => 'ويرگار بلگه',
+'history_short' => 'ويرگار',
+'updatedmarker' => 'د آخرین دیئن مه روزآمد کو',
+'printableversion' => 'نسقه چاپ بيئنی',
+'permalink' => 'چسب ون هميشئی',
+'print' => 'چاپ كردن',
+'view' => 'ديئن',
+'edit' => 'ويرايشت',
+'create' => 'راس كردن',
+'editthispage' => 'ويرايشت ای بلگه',
+'create-this-page' => 'راس كردن ای بلگه',
+'delete' => 'حذف كردن',
+'deletethispage' => 'ای بلگه نه حذف بكيد',
+'undeletethispage' => 'ای بلگه نه حذف نكيد',
+'protect' => 'حمايت بكيد',
+'protect_change' => 'آلشت بكيد',
+'protectthispage' => 'ای بلگه نه حفاظت بكيد',
+'unprotect' => 'حمايت آلشت بكيد',
+'unprotectthispage' => 'حفاظت دی بلگه نه آلشت بكيد',
+'newpage' => 'بلگه نو',
+'talkpage' => 'دباره ای بلگه قصه بكيد',
+'talkpagelinktext' => 'وت و واچ',
+'specialpage' => 'بلگه ويجه',
+'personaltools' => 'اوزاريا شصقی',
+'postcomment' => 'بشه تازه',
+'articlepage' => 'ديئن محتوا بلگه',
+'talk' => 'گپ',
+'views' => 'ديئنيا',
+'toolbox' => 'اوزاريا',
+'userpage' => 'ديئن بلگه كارور',
+'projectpage' => 'ديئن بلگه پروجه',
+'imagepage' => 'ديئن بلگه فايل',
+'mediawikipage' => 'ديئن بلگه پيغوم',
+'templatepage' => 'ديئن بلگه قالو',
+'viewhelppage' => 'ديئن بلگه هومياری',
+'categorypage' => 'ديئن بلگه دسه بنی',
+'viewtalkpage' => 'ديئن چك چنه يا',
+'otherlanguages' => 'د زونيا هنی',
+'redirectedfrom' => '(ورگشتن د$1)',
+'lastmodifiedat' => 'ای بلگه تازه ايا وضع آلشت بيه د $1, د $2.',
+'viewcount' => 'ای بلگه قاول دسترسی بيه {{PLURAL:$1|once|$1 times}}.',
+'protectedpage' => 'بلگه حفاظت بيه',
+'jumpto' => 'پئرستن د',
+'jumptonavigation' => 'ناوگشتن',
+'jumptosearch' => 'پی جوری',
+'pool-errorunknown' => 'خطا ناشناس',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
+'aboutsite' => 'دباره {{SITENAME}}',
+'aboutpage' => 'پروجه:دباره',
+'copyrightpage' => '{{ns:پروجه}}:کپی رایت',
+'currentevents' => 'پيشومدل تازه باو',
+'currentevents-url' => 'پروجه:پيشومدل تازه باو',
+'disclaimers' => 'منكرون',
+'disclaimerpage' => 'پروجه:منكر بيئن كاروريا',
+'edithelp' => 'هومياری سی ويرايشت',
+'helppage' => 'هومياری:محتوا',
+'mainpage' => 'سرآسونه',
+'mainpage-description' => 'سرآسونه',
+'policy-url' => 'پروجه:خط و مش',
+'portal' => 'تلگه جمی',
+'portal-url' => 'پروجه:تلگه جمی',
+'privacy' => 'رهبرد رازداری',
+'privacypage' => 'پروجه: خط مشی راز واداشتن',
+
+'badaccess' => 'خطا :اجازه بئیر',
+'badaccess-group0' => 'شما اجازه انجوم کاری که حاستیت نارین',
+
+'versionrequired' => 'یه نسقه د نیازمنیا ویکی رسانه
+$1',
+
+'ok' => 'خوئه',
+'retrievedfrom' => 'بازيافته د"$1"',
+'youhavenewmessages' => 'شما داريت $1($2)',
+'newmessageslink' => 'پيغوما تازه',
+'newmessagesdifflink' => 'آلشت آخری',
+'youhavenewmessagesmanyusers' => 'شما $1 د خيلی كاروريا داريت ($2).',
+'newmessagesdifflinkplural' => 'آخر {{PLURAL:$1|change|changes}}',
+'youhavenewmessagesmulti' => 'شما یه گل پیغوم تازه د $1 داریتو',
+'editsection' => 'ويرايشت',
+'editold' => 'ويرايشت',
+'viewsourceold' => 'سرچشمه نه بوينيت',
+'editlink' => 'ويرايشت',
+'viewsourcelink' => 'سرچشمه نه بوينيت',
+'editsectionhint' => 'ويرايشت يه بشق:$1',
+'toc' => 'محتوايا',
+'showtoc' => 'نشو دائن',
+'hidetoc' => 'قام كردن',
+'collapsible-collapse' => 'جم كردن',
+'collapsible-expand' => 'وا كردن',
+'thisisdeleted' => 'دیئن یا ورگنين $1?',
+'viewdeleted' => 'دیئن$1?',
+'feedlinks' => 'غذا دهنه:',
+'site-rss-feed' => 'خورخو RSS سی $1',
+'site-atom-feed' => 'خور حون Atom سی $1',
+'page-rss-feed' => 'خورخو RSS سی «$1»',
+'page-atom-feed' => 'خور حون Atom سی $1',
+'red-link-title' => '$1(بلگه وجود ناره)',
+'sort-descending' => 'كم بيئن منظم',
+'sort-ascending' => 'زياد بيئن منظم',
+
+# Short words for each namespace, by default used in the namespace tab in monobook
+'nstab-main' => 'بلگه',
+'nstab-user' => 'بلگه كارور',
+'nstab-media' => 'بلگه رسانه',
+'nstab-special' => 'بلگيا ويجه',
+'nstab-project' => 'بلگه پروجه',
+'nstab-image' => 'فاين',
+'nstab-mediawiki' => 'پيغوم',
+'nstab-template' => 'قالو',
+'nstab-help' => 'بلگه هومياری',
+'nstab-category' => 'دسه',
+
+# Main script and global functions
+'nosuchaction' => 'چنو كاری وجود ناره',
+'nosuchspecialpage' => 'چنو بلگه خاصی وجود ناره',
+
+# General errors
+'error' => 'خطا',
+'databaseerror' => 'خطا د جاگه دونسمنيا',
+'databaseerror-textcl' => 'خطاجست گرتن پايگاه دونسمنيا پيشومد كرده',
+'databaseerror-query' => 'نوم گشتن: $1',
+'databaseerror-function' => 'تابع:$1',
+'databaseerror-error' => 'خطا: $1',
+'laggedslavemode' => 'زنهار:بلگه شايت شومل روزامديا تازه باو نبوئه',
+'readonly' => 'جاگه دونسمنيا بسه بيه',
+'missing-article' => 'پاگا داده نتونه بلگه ای با پیدا بکه بجوره.که نومش $1 و $2 هئ.
+معمولند یه سی یه که فرخ ویرگار رئته دش بیه پاک بیه.',
+'missingarticle-rev' => '(دوواره ديئن#: $1)',
+'missingarticle-diff' => '(فرخ: $1، $2)',
+'internalerror' => 'خطا داخلی',
+'internalerror_info' => 'خطا داخلی:$1',
+'filecopyerror' => 'نبوئه فایل $1 د $2 کپی بوئه',
+'filerenameerror' => 'نبوئه فایل $1 د $2 نوم آلشت بوئه',
+'filedeleteerror' => 'نبوئه فایل $1 پاک بوئه',
+'filenotfound' => 'نتونیت فایل $1 پیدا بکید',
+'formerror' => 'خطا:نبوئه فرم وه مو بئيت',
+'cannotdelete-title' => 'نبوئه بلگه $1 حذف بو',
+'badtitle' => 'موضو گن',
+'badtitletext' => 'عنوان بلگه حاسته بیه معتور نی،یا  یه گل مئن زونی یا مئن ویکی عنوان غلطه.
+یه شایت شومل یکی با یا بیشتر کاراکتریا نبوئه سی ای موضوعیا استفاده بوئن',
+'viewsource' => 'سرچشمه نه بوينيت',
+'viewsource-title' => 'سرچشمه $1 بوينيت',
+'mycustomcssprotected' => 'شما حق ناریت ای بلگه سی اس اس نه ویرایشت بکید',
+'mycustomjsprotected' => 'شما حق ناریت ای بلگه جاوا اسکریپت نه ویرایشت بکید',
+'myprivateinfoprotected' => 'شما حق ناریت دونسمنیا خصوصی نه ویرایشت بکید',
+'mypreferencesprotected' => 'شما حق ناریت ویجگی یا هنی تونه ویرایشت بکید',
+'ns-specialprotected' => 'بلگیا ویجه نتونن ویرایشت بوئن',
+'exception-nologin' => 'نبوئه وارد بوئيد',
+
+# Virus scanner
+'virus-scanfailed' => 'زل گشتن شکست حرد',
+'virus-unknownscanner' => 'ويروس كش ناآشگار',
+
+# Login and logout pages
+'welcomeuser' => 'خوش اومايت،$1!',
+'yourname' => 'نوم كاروری:',
+'userlogin-yourname' => 'نوم كاروری',
+'userlogin-yourname-ph' => 'نوم كاروری تو نه وارد بكيد',
+'createacct-another-username-ph' => 'نوم كاروری ته وارد كو',
+'yourpassword' => 'پاسورد:',
+'userlogin-yourpassword' => 'رمز',
+'userlogin-yourpassword-ph' => 'رمز بزه',
+'createacct-yourpassword-ph' => 'رمزه بزه',
+'yourpasswordagain' => 'دوواره رمز بزه',
+'createacct-yourpasswordagain' => 'رمز محكم كو',
+'createacct-yourpasswordagain-ph' => 'دوواره رمز بزه',
+'remembermypassword' => 'اومائن وا مئن منه د ای مرورگر د ویر داشتو(سی بیشترین$1{{PLURAL:$1|day|days}})',
+'userlogin-remembermypassword' => 'منه مئن سيستم وادار',
+'userlogin-signwithsecure' => 'د وصل بيئن امن استفاده كو',
+'password-change-forbidden' => 'شما نتونید پاسوردیانه د ای ویکی آلشت بکید',
+'login' => 'اومائن',
+'nav-login-createaccount' => ' اومائن د سيستم/راس كردن حساو',
+'loginprompt' => 'شما وا کوکیانه سی اومائن د {{SITENAME}} کوکیانه فعال بکید.',
+'userlogin' => ' اومائن د سيستم/راس كردن حساو',
+'userloginnocreate' => 'اومائن',
+'logout' => 'رئتن',
+'userlogout' => 'د سيستم دراومائن',
+'notloggedin' => 'نبوئه وارد بوئيد',
+'userlogin-noaccount' => 'یه گل حساو ناریت؟',
+'userlogin-joinproject' => 'وصل بوييت {{SITENAME}}',
+'nologin' => 'حساو كاروری ناريت؟$1',
+'nologinlink' => 'يه گل حساو راست بكيد',
+'createaccount' => 'حساو راست بكيد',
+'gotaccount' => 'ایسنی حساو کاروری داریتو؟$1',
+'gotaccountlink' => 'اومائن',
+'userlogin-resetlink' => 'جزییات وامین اومائن تونه د ویر بردیته',
+'userlogin-resetpassword-link' => 'هنی رمز وارد بكيد',
+'helplogin-url' => 'هومياری:د حالت اومائن د سيستم',
+'userlogin-createanother' => 'يه گل حساوهنی راست بكيد',
+'createacct-join' => 'دونسمنيا دباره خوتونه د هار وارد بكيد',
+'createacct-another-join' => 'دونسمنیا یه گل حساو د هار وارد بکید',
+'createacct-emailrequired' => 'نشونی ايميل',
+'createacct-emailoptional' => 'نشونی ايميل',
+'createacct-email-ph' => 'نوم نشون ايميلتونه وارد بكيت',
+'createacct-another-email-ph' => 'يه گل ايميل وارد بكيت',
+'createacct-realname' => 'نوم راستكی(مژبوری نيئ)',
+'createaccountreason' => 'دليل',
+'createacct-reason' => 'دليل',
+'createacct-reason-ph' => 'سی چی شما داريتو يه گل حساو هنی راس می كيد',
+'createacct-captcha' => 'وارسی امنيت دار بين',
+'createacct-imgcaptcha-ph' => 'متنی نه كه د وارو ميئنيت وارد بكيد',
+'createacct-submit' => 'حساو خوتونه راس بكيد',
+'createacct-another-submit' => 'يه گل حساوهنی راست بكيد',
+'createacct-benefit-heading' => '{{نوم مالگه}} وه دس خلکی چی شما راس بیه.',
+'createacct-benefit-body1' => '{{جمی:$1|ویرایشت|ویرایشتا}}',
+'badretype' => 'پاسوردی که شما دئیته مطاوقت ناره',
+'userexists' => 'کارور نوم که وارد بیه د ایسه استفاده بوئه.
+لطف بکید یه گل نوم هنی انتخاو بکید',
+'loginerror' => 'خطا اومائن د سيستم',
+'createacct-error' => 'خطا راس كردن حساو',
+'createaccounterror' => 'نبوئه حساو راس بكيد:$1',
+'loginsuccesstitle' => 'اومائن د سيستم موفق بی',
+'nosuchusershort' => 'چنو کاروری وا ای نوم $1 نی ئیش.
+نیسنن تونه دوواره نئری بکیتو',
+'nouserspecified' => 'شما باید یه نوم کارور اختصاص بئیتو',
+'login-userblocked' => 'کارور قلف بیه.وامین اومائن اجازه نی ئن',
+'wrongpassword' => 'پاسورد غلط وارد بیه.
+هنی تلاش بکید',
+'wrongpasswordempty' => 'پاسوردی که دئیت حالیه.د نؤ تلاش بکیت',
+'passwordtooshort' => 'پاسورد با حداقل  {{PLURAL:$1|1 character|$1 characters}}          با',
+'password-name-match' => 'پاسوردتو با د نوم کاروریتو فرخ داشتوه',
+'password-login-forbidden' => 'وه کار گرتن ای پاسوردو نوم کاروری ممنو بیه.',
+'mailmypassword' => 'رمز هنی نه ايميل بكيد',
+'passwordremindertitle' => 'پاسورد موقت تازه سی {{SITENAME}}',
+'noemailcreate' => 'شما باید یه نشونی نومه معتور فراهم بکید',
+'mailerror' => 'خطا داره کل موئه:$1',
+'emailconfirmlink' => 'نشونی ايملتو نه محكم بكيد',
+'emaildisabled' => 'ای مالگه نتونه ایمیل بفرسنه',
+'accountcreated' => 'حساو راس بی',
+'createaccount-title' => 'حساو راس کرده سی  {{SITENAME}}',
+'login-abort-generic' => 'اومائن وامین تو شکست حرد-شکست حرده',
+'loginlanguagelabel' => 'زون:$1',
+
+# Email sending
+'user-mail-no-addy' => 'سی کل کردن ایمیل بی نشونه ایمیل صورت گرته',
+
+# Change password dialog
+'resetpass' => 'پاسورد نه آلشت بكيت',
+'resetpass_header' => 'پاسورد حساوتونه آلشت بکید',
+'oldpassword' => 'پاسورد قدیمی:',
+'newpassword' => 'پاسورد تازه:',
+'retypenew' => 'رمز تازه نه دوواره بنیسید:',
+'resetpass_submit' => 'پاسور بنیت و وامین بیایت',
+'changepassword-success' => 'پاسورد شما وا موفقیت آلشت بی',
+'resetpass_forbidden' => 'پاسوردیا نتونن آلشت بوئن',
+'resetpass-submit-loggedin' => 'پاسورد نه آلشت بكيت',
+'resetpass-submit-cancel' => 'رد كردن',
+'resetpass-temp-password' => 'رمز موقت:',
+
+# Special:PasswordReset
+'passwordreset-legend' => 'د نۈ وارد كردن رمز',
+'passwordreset-username' => 'نوم كاروری:',
+'passwordreset-email' => 'نشونی ايميل',
+'passwordreset-emailsent' => 'پاسورد هنی سی ایمیل کل بیه.',
+
+# Special:ChangeEmail
+'changeemail' => 'ایمیل تو نه آلشت بکید',
+'changeemail-header' => 'ایمیل حساوتونه آلشت بکید',
+'changeemail-oldemail' => 'نشونی ایمیل تازه باو:',
+'changeemail-newemail' => 'نشونی ایمیل تازه',
+'changeemail-none' => '(هيش كوم)',
+'changeemail-submit' => 'آلشت کردن ایمیل',
+'changeemail-cancel' => 'رد كردن',
+
+# Edit page toolbar
+'bold_sample' => 'متن توپر بيه',
+'bold_tip' => 'متن توپر بيه',
+'italic_sample' => 'نوشته كج كوله',
+'italic_tip' => 'نوشته كج كوله',
+'link_sample' => 'عنوان لينك',
+'link_tip' => 'لینک مئن ون',
+'extlink_sample' => 'http://www.example.com نوم ديس ون',
+'extlink_tip' => 'هوم پیوند خارجی(د ویر داشتو)',
+'headline_sample' => 'سرخط نوشته',
+'headline_tip' => 'قدم 2 خط سر ون',
+'nowiki_sample' => 'د ایچه یه گل متن بی شلک وارد بکید',
+'nowiki_tip' => 'شلک ویکی نه ندید بگر',
+'image_tip' => 'فایل محاط بيه',
+'media_tip' => 'فایل هوم پیوند',
+'sig_tip' => 'امضا شما و برچسو وخت',
+'hr_tip' => 'خط افق ونه(سوا سوا دش استفاده کو)',
+
+# Edit pages
+'summary' => 'چكسته',
+'minoredit' => 'يه ويرايشت كؤچكيه',
+'watchthis' => 'ديئن ای بلگه',
+'savearticle' => 'بلگه ضبط بوئه',
+'preview' => 'پيش سيل',
+'showpreview' => 'پيش نمائش نشون بيئه',
+'showlivepreview' => 'پیش سیل زنه',
+'showdiff' => 'آلشتيانه نشون بيئه',
+'anoneditwarning' => 'زنهار شما وامین نیومایته.
+نشونی آی پی تو د ویرگار ویرایشت ای بلگه ضفط بوئه',
+'missingcommenttext' => 'لطفن د ایچه نظر بیئتو',
+'summary-preview' => 'چکسته پیش سیل:',
+'blockedtitle' => 'كارور قلف بيه',
+'blockednoreason' => 'هیژ دلیلی دئه نبیه',
+'whitelistedittext' => 'شما باید $1 سی ویرایشت بلگیا',
+'nosuchsectiontitle' => 'نبوئه بشخ پیدا بوئه',
+'loginreqtitle' => 'وامین اومائن لازمه',
+'loginreqlink' => 'اومائن',
+'accmailtitle' => 'پاسورد کل بی',
+'newarticle' => 'تازه',
+'newarticletext' => 'شما وادما هوم پیوندی هئیت که وجود ناره.
+سی راس کردن بلگه.شرو د نیسنن مئن جعوه هاری بکید(سیل[[{{MediaWiki:Helppage}}|]] سی دونسمنی بیشتر بکید).
+ار شما سی اشتوا کردن هایئن ایچه، دگمه وادما رئتن مرورگر تونه بپورنیت.',
+'noarticletext' => 'د تازه یا د ای بلگه متن نی.
+شما تونید د[[Special:Search/{{PAGENAME}}|search for this page title]] بگردید د ای بلگه یا د بلگیا هنی یا<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}   د هنی پی جوری بوئه  logs]</span>   
+   [{{fullurl:{{FULLPAGENAME}}|action=edit}} یای ای بلگه نه ویرایشت بکیدpage]</span>.',
+'noarticletext-nopermission' => 'د تازه یا د ای بلگه متن نی.
+شما تونید د[[Special:Search/{{PAGENAME}}|search for this page title]] بگردید د ای بلگه یا د بلگیا هنی یا<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}   د هنی پی جوری بوئه  logs]</span>      اما شما حق ناریتو ای بلگه نه راس بکیت',
+'updated' => '(تازه بيه)',
+'note' => "'''نيسنن:'''",
+'previewnote' => 'فقط ای پیش سیل د ویرتو با.
+آلشتیاتو هنی ذخیره نبیه.',
+'continue-editing' => 'رو د راساگه ویرایشت',
+'editing' => 'د حالت ويرايشت$1',
+'creating' => 'راس كردن $1',
+'editingsection' => 'د حال ویرایشت$1(بشخ)',
+'editingcomment' => 'د حال ویرایشت$1(بشخ تازه)',
+'yourtext' => 'متن شما',
+'yourdiff' => 'فرخيا',
+'templatesused' => '{{جمی:$1|قالو|قالویا}}د ای بلگه استفاده بیه:',
+'template-protected' => '(حمايت بيه)',
+'template-semiprotected' => '(نيم-حفاظت بيه)',
+'hiddencategories' => 'ای بلگه يه اندوم د{{PLURAL:$1|1 hidden category|$1 hidden categories}}: هئ',
+'permissionserrors' => 'خطا اجازه دئین',
+'permissionserrorstext-withaction' => 'شما سی $2 اجازه ناریت
+سی دمال کردن{{PLURAL:$1|reason|reasons}}:',
+'recreate-moveddeleted-warn' => "'''زنهار شما بلگه ای که وادما پاک بیه هنی راس کردیته'''
+شما باید دونسه بایت که آیا هنی سی نها گرتن ویرایشت ای بلگه خوئه.
+پاک بیئن و جمشت سی ای بلگه سی راحتی تو فراهم بیه:",
+'moveddeleted-notice' => 'ای بلگه پاک بیه.
+پاک بین و جمشت ای بلگه سی سرچشمه دئین فراهم بیه',
+'postedit-confirmation' => 'ویرایشتتو ذخیره بی',
+
+# Content models
+'content-model-wikitext' => 'ويكی متن',
+'content-model-text' => 'متن ساده',
+'content-model-javascript' => 'جاوا اسكريپت',
+'content-model-css' => 'سی اس اس',
+
+# Parser/template warnings
+'post-expand-template-inclusion-warning' => 'زنئار قالو شومل انازه ای یه که فره گپه.پاره ای د قالویا نه د بر نگره',
+'post-expand-template-inclusion-category' => 'بلگیا شومل قالوی ین که انازش د حد اومائه وه در',
+'post-expand-template-argument-warning' => 'زنهار ای بلگه شومل حداقل یه قالو سی چک چنه یه که انازه فره گپه.
+گپسنیا پاک بینه.',
+'post-expand-template-argument-category' => 'بلگه شومل قالو چک چنیا د بین رئته',
+
+# History pages
+'viewpagelogs' => 'سی ای بلگه بوینتو.',
+'currentrev-asof' => 'آخرين دووار ديئن چی $1',
+'revisionasof' => 'دوواره ديئن $1',
+'revision-info' => 'دوواره سیل بیه چی $1 وا $2',
+'previousrevision' => 'اصلاح دمايی',
+'nextrevision' => 'تازه ترن دوبار دیئن',
+'currentrevisionlink' => 'آخرین دوواره دیئن',
+'cur' => 'تازه باو',
+'next' => 'نيایی',
+'last' => 'دمايی',
+'page_first' => 'اولی',
+'page_last' => 'آخر',
+'history-fieldset-title' => 'ویرگار مرور ون',
+'history-show-deleted' => 'فقط پاك بيه',
+'histfirst' => 'قديمي تري',
+'histlast' => 'تازه تري',
+'historyempty' => '(حالی)',
+
+# Revision feed
+'history-feed-item-nocomment' => '$1 د
+$2',
+
+# Revision deletion
+'rev-delundel' => 'آلشت وضئيت ديئن',
+'rev-showdeleted' => 'نشو دائن',
+'revdelete-show-file-submit' => 'هری',
+'revdelete-radio-set' => 'هری',
+'revdelete-radio-unset' => 'نه',
+'revdelete-log' => 'دلیل:',
+'revdel-restore' => 'آلشت وضئيت ديئن',
+'revdel-restore-deleted' => 'پاك كردن مراجعيا',
+'revdel-restore-visible' => 'مراجعات ديئنی',
+'pagehist' => 'ويرگار بلگه',
+'deletedhist' => 'ویرگار پاک بیه',
+'revdelete-reasonotherlist' => 'دلیل هنی',
+'revdelete-edit-reasonlist' => 'دلیلیا پاک کردنه نه ویرایشت بکید',
+
+# History merging
+'mergehistory-from' => 'بلگه سرچشمه:',
+'mergehistory-into' => 'بلگه مقصد:',
+'mergehistory-reason' => 'دليل:',
+
+# Merge log
+'revertmerge' => 'بی لوئه',
+
+# Diffs
+'history-title' => 'دوواره دیئن ویرگار$1',
+'lineno' => 'خط $1:',
+'compareselectedversions' => 'دوبار دیئنیایی که انتخاو بینه مقایسه بکیتو',
+'editundo' => 'رد كردن',
+'diff-empty' => '(بی فرق)',
+'diff-multi' => '({{جمی:$1|یه گل دوواره دیئن مینجایی|$1مینجا دوواره دیئنیا}} وا {{جمی:$2|یه کارور|$2 کاروریا}} نشو دئه نی)',
+
+# Search results
+'searchresults' => 'نتيجه يا پی جوری',
+'searchresults-title' => 'نتيجه يا پی جوری سی "$1"',
+'searchsubtitleinvalid' => 'شما پی جوریت سی',
+'prevn' => 'وادما {{PLURAL:$1|$1}}',
+'nextn' => 'نيايی {{PLURAL:$1|$1}}',
+'prevn-title' => 'پيشتر $1 {{PLURAL:$1|نتيجه|نتيجيا}}',
+'nextn-title' => 'نيايی $1 {{PLURAL:$1|نتيجه|نتيجيا}}',
+'shown-title' => 'نشون دائن $1 {{PLURAL:$1|نتيجه|نتيجه}} سی همه بلگه',
+'viewprevnext' => 'ديئن ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-legend' => 'گزينه يا هنی پی جوری',
+'searchmenu-exists' => "'''ایچه بلگه ای هئ وه نوم\"[[:\$1]]\" که ها د ای ویکی'''",
+'searchmenu-new' => "'''ای بلگه نه راس كو \"[[:\$1]]\" د ای  ويكي!'''",
+'searchprofile-articles' => 'بلگيا محتوا',
+'searchprofile-project' => 'بلگيا هومياری پروجه',
+'searchprofile-images' => 'رسانيا جمی',
+'searchprofile-everything' => 'همه چی',
+'searchprofile-advanced' => 'پيشرفته',
+'searchprofile-articles-tooltip' => 'بگرد مئن $1',
+'searchprofile-project-tooltip' => 'بگرد مئن $1',
+'searchprofile-images-tooltip' => 'بگرد سی فايليا',
+'searchprofile-everything-tooltip' => 'همه محتوا نه پی جوری كو (شاملا بلگيا چك چنه)',
+'searchprofile-advanced-tooltip' => 'نوم جايا نوم ديار بگرد',
+'search-result-size' => '$1 ({{PLURAL:$2|بی واچه يل|واچه تكی|واچه يل|$2 واچه يل|$2 واچه}})',
+'search-result-category-size' => '{{جمی:$1|1 اندوم|$1 اندومیا}} ({{جمی:$2|1 زیردسه|$2 زیردسه یا}}, {{جمی:$3|1 فایل|$3 فایلیا}})',
+'search-redirect' => '(ورگشتن $1)',
+'search-section' => '(بشق $1)',
+'search-suggest' => 'منظورت يه بی:$1',
+'search-interwiki-more' => '(بیشتر)',
+'search-relatedarticle' => 'مرتوط',
+'searchrelated' => 'مرتوط',
+'searchall' => 'همه',
+'showingresultsheader' => "{{PLURAL:$5|نتيجه '''$1''' د'''$3'''|نتيجه يا '''$1 - $2''' د'''$3'''}} سيli'''$4'''",
+'search-nonefound' => 'هیژ نتیجه یی سی پی جست تو مطاوقت نکرده',
+'powersearch' => 'پی جوری پیشبرده',
+'powersearch-legend' => 'پی جوری پیشبرده',
+'powersearch-field' => 'پی جوری سی',
+'powersearch-togglelabel' => 'چك كردن:',
+'powersearch-toggleall' => 'همه',
+'powersearch-togglenone' => 'هيش كوم',
+'search-external' => 'پی جوری د در',
+
+# Preferences page
+'preferences' => 'خصوصيات هنی',
+'mypreferences' => 'خصوصيات هنی',
+'prefs-edits' => 'شماره ویرایشتا:',
+'prefsnologin' => 'نبوئه وارد بوئيد',
+'changepassword' => 'پاسورد نه آلشت بكيت',
+'prefs-skin' => 'پوست',
+'skin-preview' => 'پیش سیل',
+'prefs-watchlist' => 'سیل برگ',
+'prefs-misc' => 'شيوسن',
+'prefs-resetpass' => 'پاسورد نه آلشت بكيت',
+'saveprefs' => 'ذخيره كردن',
+'prefs-editing' => 'د حالت ويرايشت',
+'rows' => 'رديفيا:',
+'columns' => 'ستينا:',
+'searchresultshead' => 'پی جوری',
+'timezonelegend' => 'وخت راساگه',
+'localtime' => 'وخت ولاتی:',
+'timezoneuseserverdefault' => 'وخت راساگه',
+'servertime' => 'وخت سرور:',
+'timezoneregion-africa' => 'افرقا',
+'timezoneregion-america' => 'امركا',
+'timezoneregion-antarctica' => 'قطو هار ونه',
+'timezoneregion-arctic' => 'قطو شمال',
+'timezoneregion-asia' => 'آسيا',
+'timezoneregion-atlantic' => 'جهون آو آتلانتیک',
+'timezoneregion-australia' => 'استراليا',
+'timezoneregion-europe' => 'اوروپا',
+'timezoneregion-indian' => 'جهوناو هند',
+'timezoneregion-pacific' => 'جهوناو آروم',
+'prefs-searchoptions' => 'پی جوری',
+'prefs-namespaces' => 'نوم جایا',
+'default' => 'پيش فرض',
+'prefs-files' => 'فايلا',
+'youremail' => 'ايميل:',
+'yourrealname' => 'نوم راستكی:',
+'yourlanguage' => 'زون:',
+'email' => 'پیومک برقی',
+'prefs-help-email' => 'نشونی ایمیل اختیاری هئ.اما سی بازجست پاسورد دش نیاز بوئه.شما باید پاسوردتونه د ویر بوریت',
+'prefs-help-email-others' => 'شما می تونید سی پیوند گرتن تو وا نهایین ایمیل مئن یه هوم پیوند د بلگه کاروری یا بلگه چک چنه تو انتخاو بکید.
+نشونی ایمیلتو وختی که کاروریا هنی وا تو پیوند می گرن دیار نی.',
+'prefs-editor' => 'ويرايشتگر',
+'prefs-preview' => 'پیش سیل',
+
+# User rights
+'userrights-reason' => 'دليل:',
+
+# Groups
+'group' => 'گرو',
+'group-bot' => 'بتیا',
+'group-all' => '(همه)',
+
+# Special:Log/newusers
+'newuserlogpage' => 'راس بیه وا کارور',
+
+# Associated actions - in the sentence "You do not have permission to X"
+'action-edit' => 'ای بلگه نه ويرايشت بكيد',
+
+# Recent changes
+'nchanges' => '$1 {{جمی:$1|آلشت|آلشتیا}}',
+'recentchanges' => 'تغيريا تازه',
+'recentchanges-legend' => 'گزينه يا آلشتيا تازه',
+'recentchanges-feed-description' => 'دو بیشتر آلشتیا تازباو نه د ویکی که ها د هوال حون پیگری کو.',
+'recentchanges-label-newpage' => 'ای ويرايشت يه بلگه تازه راس كرده',
+'recentchanges-label-minor' => 'يه ويرايشت كؤچكيه',
+'recentchanges-label-bot' => 'ای ويرايشت نه يه بوت انجوم ديئه',
+'recentchanges-label-unpatrolled' => 'ای ويرايشت هنی تيه واداشت نبيه',
+'rcnote' => "د هار{{جمی:$1|هئ'''1''' آلشت|آخری هئ ن '''$1'''آلشتیا}}د آخر{{جمی:$2|رو|'''$2''' روزیا}}, چی $5, $4.",
+'rcnotefrom' => 'د هار آلشتیا د $2 هیئن(د بال د $1 نشون دئه بیه)',
+'rclistfrom' => 'آلشتیا تازه ایی که وا $1 شرو بیه نشونش بئه',
+'rcshowhideminor' => 'ويرايشتيا کؤچک $1',
+'rcshowhidebots' => '$1 رواتيا یا بوتيا',
+'rcshowhideliu' => '$1 کارورياداخل بيه',
+'rcshowhideanons' => '$1 کاروريا ناشناس',
+'rcshowhidepatr' => '$1 ویرایشتیا تیه پرس بیه',
+'rcshowhidemine' => 'ويرايشتيا مه$1',
+'rclinks' => 'آخرین آلشتیا $1 نشو بیه د اخرین روزیا $2',
+'diff' => 'فرخ',
+'hist' => 'ويرگار',
+'hide' => 'قام كردن',
+'show' => 'نشون دائن',
+'minoreditletter' => 'م',
+'newpageletter' => 'ن',
+'boteditletter' => 'ب',
+'rc-enhanced-expand' => 'جزيات نشون بيئه',
+'rc-enhanced-hide' => 'جزياته قام كو',
+
+# Recent changes linked
+'recentchangeslinked' => 'تغيريا مرتبط',
+'recentchangeslinked-toolbox' => 'تغيريا مرتبط',
+'recentchangeslinked-title' => 'آلشتيا مرتوط وا $1',
+'recentchangeslinked-summary' => 'ای نوم گه تازه د بلگیایی که وا بلگیا ویجه هوم پیوند بینه آلشت بیه(یا سی اندومیا دسه بنی بیه)
+بلگیا یی که هان [[Special:Watchlist|your watchlist]]و گپ بینه',
+'recentchangeslinked-page' => 'نوم بلگه:',
+'recentchangeslinked-to' => 'آلشتیایی که د بلگه یا هوم پیوند بینه وه جا بلگه دئیه بیه نشو بیه',
+
+# Upload
+'upload' => 'بلم گير كردن فايلا',
+'uploadlogpage' => 'سوارکرد',
+'filedesc' => 'چكسته',
+'uploadedimage' => 'سوارکرد"[[$1]]"',
+
+'license' => 'ليانس دار بيئن',
+'license-header' => 'د شكل ليسانس دار بيئن',
+
+# File description page
+'file-anchor-link' => 'فايل',
+'filehist' => 'ويرگار فايل',
+'filehist-help' => 'ری  ويرگاريا بپورنيت تا نسقه مرتوط بونيت.',
+'filehist-revert' => 'ورگنین',
+'filehist-current' => 'تازه باو',
+'filehist-datetime' => 'ويرگار/وخت',
+'filehist-thumb' => 'عسگ كؤچك بيه',
+'filehist-thumbtext' => 'كؤچك كردن سی  نسقه چی $1',
+'filehist-user' => 'كارور',
+'filehist-dimensions' => 'بعديا',
+'filehist-comment' => 'نظر',
+'imagelinks' => 'استفاده د فايل',
+'linkstoimage' => 'دمال بيه {{PLURAL:$1|ديس ونيا بلگه|$1 ديس ون بلگيا}} دای فایل:',
+'nolinkstoimage' => 'ایچه هیژ بلگه ای سی هوم پیوند بیئن وا ای فایل نی',
+'sharedupload-desc-here' => 'فایلی که د $1 شایت د مئن پروجیا هنی استفاده بیه.
+توضی دباره[$2 file description page] د هار نشو دئئه بیه',
+
+# Random page
+'randompage' => 'بلگه بختكی',
+
+# Statistics
+'statistics' => 'آماريا',
+
+# Miscellaneous special pages
+'nbytes' => '$1{{PLURAL:$1|كلی|بايت|بايت}}',
+'nmembers' => '$1 {{PLURAL:$1|اندوم|اندوميا}}',
+'prefixindex' => 'همه بلگيا وا پيشون',
+'usercreated' => '{{جنسیت:$3|راس بیه}}د $1 at $2',
+'newpages' => 'بلگيا نو',
+'move' => 'جاوه جا بوئيت',
+'pager-newer-n' => '{{جمی:$1|وانها تر 1وانها تر $1}}',
+'pager-older-n' => '{{جمی:$1|گپسالتر 1|گپسالتر $1}}',
+
+# Book sources
+'booksources' => 'سرچشمه يل كتاو',
+'booksources-search-legend' => 'پی جوری سی سرچشمه یا کتاو',
+'booksources-go' => 'رو',
+
+# Special:AllPages
+'allpages' => 'همه بلگيا',
+'alphaindexline' => '$1 د
+$2',
+'allarticles' => 'همه بلگيا',
+'allpagessubmit' => 'رو',
+
+# Special:Categories
+'categories' => 'دسه يا',
+
+# Special:LinkSearch
+'linksearch-line' => '$1 داره د $2 هوم پیوند بوئه',
+
+# Special:ListGroupRights
+'listgrouprights-members' => '(نوم گه اندومیا)',
+
+# Email user
+'emailuser' => 'ای كارور نه ايميل كو',
+
+# Watchlist
+'watchlist' => 'سیل برگ',
+'mywatchlist' => 'سیل برگ',
+'watchlistfor2' => 'سي $1 $2',
+'watch' => 'سيل كردن',
+'unwatch' => 'ديه نبيه',
+'watchlist-details' => '{{جمی:$1|$1 بلگه|$1 بلگیا}} د سیل برگتو هیش بلگه قسه کردن نی .',
+'wlshowlast' => 'آخرین$1 ساعتیا $2و روزیا $3 نشو بیئه',
+'watchlist-options' => 'گزینیا سیل برگ',
+
+# Delete
+'actioncomplete' => 'عملكرد كامل بيه',
+'actionfailed' => 'عملكرد شكست حرده',
+'dellogpage' => 'لاگ پاك كردن',
+
+# Rollback
+'rollbacklink' => 'ورگشتن',
+
+# Protect
+'protectlogpage' => 'حفاظت کردن',
+'protectedarticle' => 'حفاظت بيه [[$1]]',
+
+# Undelete
+'undeletelink' => 'بوين/دوواره آماده با',
+'undeleteviewlink' => 'ديئن',
+
+# Namespace form on various pages
+'namespace' => 'نوم جا:',
+'invert' => 'انتخاو برعسك بوئه',
+'blanknamespace' => 'اصلی',
+
+# Contributions
+'contributions' => '{{جنس:$1|کارور}} هومیاریا',
+'contributions-title' => 'هومياري كارور سي $1',
+'mycontris' => 'هومياری',
+'contribsub2' => 'سي {{جنسيت:$3|$1}} ($2)',
+'uctop' => '(تازه باو)',
+'month' => 'د ما(یا زیتر)',
+'year' => 'د سال',
+
+'sp-contributions-newbies' => 'فقط هومیاری یایی که د حساو تازه بیه نشون بئه',
+'sp-contributions-blocklog' => 'قلف',
+'sp-contributions-uploads' => 'سواركرديا',
+'sp-contributions-talk' => 'چك چنه',
+'sp-contributions-search' => 'سی هومیاریا پی جور با',
+'sp-contributions-username' => 'نوم نشون آی پی يا نوم كاروری:',
+'sp-contributions-toponly' => 'فقط ویرایشتیایی که جزئه آخرین دوواره دیئن هئین نشو بیه',
+'sp-contributions-submit' => 'پی جوری',
+
+# What links here
+'whatlinkshere' => 'كؤم ديس ونيا هان ايچه',
+'whatlinkshere-title' => 'بلگه ای که د $1 هوم پیوند بیه',
+'whatlinkshere-page' => 'بلگه',
+'linkshere' => "بلگیا نهایی د '''[[:$1]]''' هوم پیوند بیه",
+'nolinkshere' => "هیژ بگله ای د  '''[[:$1]]''' هوم پیوند نبیه",
+'isredirect' => 'بلگه دوباره ورگشتن',
+'istemplate' => 'نشونی دئن',
+'isimage' => 'فایل هوم پیوند',
+'whatlinkshere-prev' => '{{جمی:$1|دمایی|دمایی $1}}',
+'whatlinkshere-next' => '{{جمی:$1|نهایی|نهایی $1}}',
+'whatlinkshere-links' => 'هوم پیوندیا',
+'whatlinkshere-hideredirs' => '$1 دوواره د نشونی ورگشتن',
+'whatlinkshere-hidetrans' => '$ا چن نتیجه ای',
+'whatlinkshere-hidelinks' => 'هوم پیوندیا $1',
+'whatlinkshere-hideimages' => 'فایل هوم پیوندیا $1',
+'whatlinkshere-filters' => 'فيلتريا',
+
+# Block/unblock
+'ipboptions' => '2 ساعتیا:2 ساعت,1 رو:1 رو,3 روزا:3 رو,1 هفته:1 هفته,2 هفته یا:2 هفته,1 ما:1 ما,3 ما:3 میا,6 ما:6 مایا,1 سال:1سال,حد ناره:حد ناره',
+'ipblocklist' => 'كاروريا منع بيه',
+'blocklink' => 'بسته بوئه',
+'unblocklink' => 'بی قطی',
+'change-blocklink' => 'اجازه نديئن سی  آلشت',
+'contribslink' => 'هومكاری',
+'blocklogpage' => 'قلف',
+'blocklogentry' => ' [[$1]] وا یه گل وخت تموم بیئن $2 و $3  قلف بیه',
+'block-log-flags-nocreate' => 'حساو راس کردن عاجز بیه.',
+
+# Move page
+'movelogpage' => 'جاوه جا کردن',
+'revertmove' => 'لرستن',
+
+# Export
+'export' => 'وه صحرا ديئن بلگيا',
+
+# Namespace 8 related
+'allmessagesname' => 'نوم',
+'allmessagesdefault' => 'سفارشت متنی پيش فرض',
+
+# Thumbnails
+'thumbnail-more' => 'گپ كردن',
+'thumbnail_error' => 'خطا د راس بیئن بن کلئکی:$1',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage' => 'بلگه كارورتو',
+'tooltip-pt-mytalk' => 'بلگه قسه كردن شما',
+'tooltip-pt-preferences' => 'اولويتيا شما',
+'tooltip-pt-watchlist' => 'نوم نوشت د بلگه يايی كه شما آلشتاشونه پيگئری  ميكيد',
+'tooltip-pt-mycontris' => 'يه گل د هومياريا شما',
+'tooltip-pt-login' => 'توصيه بو كه وارد بوئين، اما مجبوری ني',
+'tooltip-pt-logout' => 'د سيستم دراومائن',
+'tooltip-ca-talk' => 'قسه دباره محتوا بلگه',
+'tooltip-ca-edit' => 'شما تونيد ای  بلگه نه ويرايشت بكيد. لطف بكيد د دگمه پيش ديئن پيش د ذخيره كردن استفاده بكيد',
+'tooltip-ca-addsection' => 'بشخ تازه نه شرو كو',
+'tooltip-ca-viewsource' => 'ای بلگه حفاظت بيه.
+شما تونيت سرچمه ش بئوينيت',
+'tooltip-ca-history' => 'دوواره ديئن ای بلگه',
+'tooltip-ca-protect' => 'ای بلگه نه حفاظت بكيد',
+'tooltip-ca-delete' => 'ای بلگه نه حذف بكيد',
+'tooltip-ca-move' => 'ای بگله نه جا وه جا كو',
+'tooltip-ca-watch' => 'اضاف کردن ای بلگه وه نوم نوشت پیگئریاتو',
+'tooltip-ca-unwatch' => 'ورداشتن ای بلگه وه نوم نوشت پیگئریاتو',
+'tooltip-search' => 'پی جوری {{SITENAME}}',
+'tooltip-search-go' => 'رؤ د بلگه ای که یه نوم راستکی ها مینش الوت ار دش بوئه',
+'tooltip-search-fulltext' => 'بلگيانه سی چنو متنی بگرد',
+'tooltip-p-logo' => 'سرآسونه نه بونيت',
+'tooltip-n-mainpage' => 'سرآسونه نه بونيت',
+'tooltip-n-mainpage-description' => 'ديئن سرآسونه',
+'tooltip-n-portal' => 'دباره پروجه،ايسا ترين(تونيت) چی بكيد، كجه چيانه بجورين',
+'tooltip-n-currentevents' => 'ساوند دونسمنديايی كه هان د پيشومدل تازه باو پيدا كو',
+'tooltip-n-recentchanges' => 'يه نوم جاوند سی تغيرا تازه مئن ويكی',
+'tooltip-n-randompage' => 'سوار كرد بلگه بختكی',
+'tooltip-n-help' => 'جاگه سی فهمسن',
+'tooltip-t-whatlinkshere' => 'سيائه تمؤم بلگيایی كه ايچه چسب ون دارن',
+'tooltip-t-recentchangeslinked' => 'تغيريا تازه باو مئن بلگيايي كه د ای بلگه چسب وند بيئنه',
+'tooltip-feed-atom' => 'تغذيه كؤچك سی ای بلگه',
+'tooltip-t-contributions' => 'یه نوم گه د هومیاریا ای کارور',
+'tooltip-t-emailuser' => 'سی ای كارور ايميل كل كو',
+'tooltip-t-upload' => 'بلم گير كردن فايلا',
+'tooltip-t-specialpages' => 'سيائه تمؤم بلگيا خاص',
+'tooltip-t-print' => 'نسقه چاپ بيئنی سی ای بلگه',
+'tooltip-t-permalink' => 'چسب ون هميشئی د دوواره بينی ای بلگه',
+'tooltip-ca-nstab-main' => 'ديئن محتوا بلگه',
+'tooltip-ca-nstab-user' => 'ديئن بلگه كارور',
+'tooltip-ca-nstab-special' => 'اي بلگه ويجه يه، شما نتونيت خود اي بلگه نه ويرايشت بكيد',
+'tooltip-ca-nstab-project' => 'ديئن بلگه پروجه',
+'tooltip-ca-nstab-image' => 'ديئن بلگه فايل',
+'tooltip-ca-nstab-template' => 'ديئن قالو',
+'tooltip-ca-nstab-category' => 'ديئن بلگه دسه بنی',
+'tooltip-minoredit' => 'یه نه د عنوان حیرده ویرایشت ثوت کو',
+'tooltip-save' => 'آلشتياتونه ذخيره بكيد',
+'tooltip-preview' => 'پیش سیل آلشتیاتو،لطفن پیش د ذخیره دش استفاده بکیتو',
+'tooltip-diff' => 'آلشتیا نه که شما د ای متن راس کردیته نشو بیئه',
+'tooltip-compareselectedversions' => 'فرخیا مینجا دو تا د دو بار دیئن ای بلگه نه بوینیت',
+'tooltip-watch' => 'ای بلگه نه د سیل برگتو اضاف بکید',
+'tooltip-rollback' => '"ورگشتن" لرستن د حالت اول  سی ای بلگه  که سی  يه كه هومياری  نيايی اصلاح بيه وا يه پورنسن',
+'tooltip-undo' => 'انجوم نگرتن ای ویرایشت ورگن و همه فرمیا ویرایشت تانه که حالت پیش سیل واکو.یه اجازه میئه سی اضاف کردن یه دلیل د چکسته.',
+'tooltip-summary' => 'يه چكسته كؤچك وارد بكيد',
+
+# Browsing diffs
+'previousdiff' => '← ويرايشت كۈهنه تر',
+'nextdiff' => 'ويرايشت تازه تر',
+
+# Media information
+'file-info-size' => '$1 × $2 پیکسل, انازه فایل: $3, MIME نوع: $4',
+'file-nohires' => 'عسك ون بالاتري دش ني',
+'svg-long-desc' => 'اس وی جی فايل.نومنا $1 $2 پيكسل',
+'show-big-image' => 'تموم رخ ون',
+
+# Bad image list
+'bad_image_list' => 'دونسمنديانه وه ای شلگ وارد بكيت:
+
+فقط سرخط يایی که وا * شرو بوئن د وير گرته بوئن. اولی چسب ون مئن هر سرخط، باید چسب ونی وه یک عسگ گن با.
+چسب ونيا نيایی د همو سرخط، وه عنوان چيا استثنادار د وير گرته بوئن',
+
+# Metadata
+'metadata' => 'داديا  فره گپ',
+'metadata-help' => 'ای فایل شومل دونسمنیا هنی یه.شایت د دیربین رقم ون یا اسکنری که سی راس کردنشو استفاده بیه،وه ایچه اضاف بیه',
+'metadata-fields' => 'رشته یا گپ دونسمنیا که د ای پیغوم نوم ون بینه شومل بلگه عسگ ن که وختی که جدول گپ دونسمنیا وا بوئه نشون دئیه بوئن.
+چی یا هنی سی یه که پیش فرضن قام بوئن.
+*راست کو
+*مدل
+*دم وخت اصل
+*وخت آشگار
+*اف ان شماره
+*ایزو نرخ من سرعت
+*فوکالنس
+*هنرمن
+*کپی رایت
+*حالت جی پی اس 
+*جی پی اس گپ حالت
+*جی پی اس همه حالت',
+
+# External editor support
+'edit-externally' => 'ای فایل سی ویرایشت وه در دیئن کاربردش استفاده بکید',
+'edit-externally-help' => '(بوینیت [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] for more information)',
+
+# 'all' in various places, this might be different for inflected languages
+'watchlistall2' => 'همه شو',
+'namespacesall' => 'همه شو',
+'monthsall' => 'همه',
+
+# Watchlist editing tools
+'watchlisttools-view' => 'آلشتیا مرتوط نه بوینیت',
+'watchlisttools-edit' => 'سیل برگ بوینیتو و ویرایشت بکید',
+'watchlisttools-raw' => 'سیل برگ نه ردیفی ویرایشت کو',
+
+# Core parser functions
+'duplicate-defaultsort' => 'زنهار کلیت پیش فرض جور بیه $2 تازه ای یا کلید پیش فرض جوربیه $1 رد بیه.',
+
+# Special:SpecialPages
+'specialpages' => 'بلگيا ويجه',
+
+# External image whitelist
+'external_image_whitelist' => 'یه خط نه ول بکید چی وه<pre>',
+
+# Special:Tags
+'tag-filter' => 'فيلتر [[Special:Tags|Tag]]:',
+
+);
index 1c977f1..15f7a9e 100644 (file)
@@ -1265,7 +1265,6 @@ Prašome patikrinti sąrašus.',
 'mypreferences' => 'Nustatymai',
 'prefs-edits' => 'Keitimų skaičius:',
 'prefsnologin' => 'Neprisijungęs',
-'prefsnologintext' => 'Jums reikia būti <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} prisijungusiam]</span>, kad galėtumėte keisti savo nustatymus.',
 'changepassword' => 'Pakeisti slaptažodį',
 'prefs-skin' => 'Išvaizda',
 'skin-preview' => 'Peržiūra',
@@ -2766,7 +2765,7 @@ Pastaruoju atveju, jūs taip pat galite naudoti nuorodą, pvz. [[{{#Special:Expo
 'allmessagesdefault' => 'Pradinis tekstas',
 'allmessagescurrent' => 'Dabartinis tekstas',
 'allmessagestext' => 'Čia pateikiamas sisteminių pranešimų sąrašas, esančių MediaWiki vardų srityje.
-Aplankykite [//www.mediawiki.org/wiki/Localisation „MediaWiki“ lokaliziciją] ir [//translatewiki.net „translatewiki.net“], jei norite prisidėti prie bendrojo „MediaWiki“ lokalizavimo.',
+Aplankykite [https://www.mediawiki.org/wiki/Localisation „MediaWiki“ lokaliziciją] ir [//translatewiki.net „translatewiki.net“], jei norite prisidėti prie bendrojo „MediaWiki“ lokalizavimo.',
 'allmessagesnotsupportedDB' => "Šis puslapis nepalaikomas, nes nuostata '''\$wgUseDatabaseMessages''' yra išjungtas.",
 'allmessages-filter-legend' => 'Filtras',
 'allmessages-filter' => 'Filtruoti pagal būseną:',
@@ -3522,7 +3521,7 @@ Visos kitos nuorodos toje pačioje eilutėje yra laikomos išimtimis, t. y. pusl
 
 # External editor support
 'edit-externally' => 'Atverti išoriniame redaktoriuje',
-'edit-externally-help' => '(Norėdami gauti daugiau informacijos, žiūrėkite [//www.mediawiki.org/wiki/Manual:External_editors diegimo instrukcijas])',
+'edit-externally-help' => '(Norėdami gauti daugiau informacijos, žiūrėkite [https://www.mediawiki.org/wiki/Manual:External_editors diegimo instrukcijas])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'visus',
@@ -3710,7 +3709,7 @@ Jūs taip pat galite [[Special:EditWatchlist|naudoti standartinį redaktorių]].
 'version-hook-subscribedby' => 'Užsakyta',
 'version-version' => '(Versija $1)',
 'version-license' => 'Licencija',
-'version-poweredby-credits' => "Šis projektas naudoja '''[//www.mediawiki.org/ MediaWiki]''', autorystės teisės © 2001-$1 $2.",
+'version-poweredby-credits' => "Šis projektas naudoja '''[https://www.mediawiki.org/ MediaWiki]''', autorystės teisės © 2001-$1 $2.",
 'version-poweredby-others' => 'kiti',
 'version-credits-summary' => 'Už indėlį kuriant [[Special:Version|MediaWiki]] dėkojame',
 'version-license-info' => 'MediaWiki yra nemokama programinė įranga; galite ją platinti ir/arba modifikuoti pagal GNU General Public License, kurią publikuoja Free Software Foundation; taikoma 2-oji licenzijos versija arba (Jūsų pasirinkimu) bet kuri vėlesnė versija. 
@@ -3749,8 +3748,7 @@ Jūs turėjote gauti [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU General Public Licens
 
 # Special:SpecialPages
 'specialpages' => 'Specialieji puslapiai',
-'specialpages-note' => '----
- * įprastą specialius puslapius.
+'specialpages-note' => ' * įprastą specialius puslapius.
  * <span class="mw-specialpagerestricted">tik specialius puslapius.</span>
  * <span class="mw-specialpagecached">Talpyklinių specialius puslapius (gali būti pasenusius).</span>',
 'specialpages-group-maintenance' => 'Sistemos palaikymo pranešimai',
index 558d6c0..564afea 100644 (file)
@@ -865,7 +865,7 @@ Puorejī lauki, piec nūklusiejuma, byus nūglobuoti.
 
 # External editor support
 'edit-externally' => 'Izmaineit itū failu ar uoreju programu',
-'edit-externally-help' => '(Verīs [//www.mediawiki.org/wiki/Manual:External_editors instrukcijas] Mediawiki.org, kab dabuotu vaira informacejis).',
+'edit-externally-help' => '(Verīs [https://www.mediawiki.org/wiki/Manual:External_editors instrukcijas] Mediawiki.org, kab dabuotu vaira informacejis).',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'vysys',
index d68ae6c..72e6c7b 100644 (file)
@@ -771,7 +771,6 @@ Google hmangin i lo zawng hrih thei ang.
 'mypreferences' => 'Duhthlanna',
 'prefs-edits' => 'Siamţhat zât',
 'prefsnologin' => 'I la lût lo',
-'prefsnologintext' => 'Hmangtu duhdàn siam tùrin i <span class="plainlinks"> [{{fullurl:{{#Special:UserLogin}}|returnto=$1}} inziah luh] </span> a ngai.',
 'changepassword' => 'Thurûk thlâkna',
 'prefs-skin' => 'Vun',
 'skin-preview' => 'Enchhinna',
@@ -1858,7 +1857,7 @@ A bak zawng chu thuhrûk sa vek a ni ang.
 
 # External editor support
 'edit-externally' => 'Pawnlam hmanraw hmanga tihdanglamna',
-'edit-externally-help' => '(Hriat chian lehzualnan [//www.mediawiki.org/wiki/Manual:External_editors bundàn kaihhruaina phek] hi en rawh)',
+'edit-externally-help' => '(Hriat chian lehzualnan [https://www.mediawiki.org/wiki/Manual:External_editors bundàn kaihhruaina phek] hi en rawh)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'a vaiin',
index f636b64..50694c0 100644 (file)
@@ -1027,7 +1027,6 @@ Pagaidām vari meklēt, izmantojot Google vai Yahoo.
 'mypreferences' => 'Izvēles',
 'prefs-edits' => 'Izmaiņu skaits:',
 'prefsnologin' => 'Neesi iegājis',
-'prefsnologintext' => 'Tev jābūt <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} iegājušam]</span>, lai mainītu lietotāja izvēles.',
 'changepassword' => 'Mainīt paroli',
 'prefs-skin' => 'Apdare',
 'skin-preview' => 'Priekšskats',
@@ -1058,11 +1057,15 @@ Pagaidām vari meklēt, izmantojot Google vai Yahoo.
 'columns' => 'Simbolu skaits rindiņā:',
 'searchresultshead' => 'Meklēšana',
 'resultsperpage' => 'Lappusē parādāmo rezultātu skaits',
+'stub-threshold' => 'Slieksnis <a href="#" class="stub">aizmetņa saites</a> formatēšanai (baiti):',
 'stub-threshold-disabled' => 'Atslēgts',
-'recentchangesdays' => 'Dienu skaits, kuru rādīt pēdējajās izmaiņās:',
+'recentchangesdays' => 'Dienu skaits, kuru rādīt pēdējās izmaiņās:',
 'recentchangesdays-max' => 'Ne vairāk kā $1 {{PLURAL:$1|diena|dienas}}',
 'recentchangescount' => 'Izmaiņu skaits, kuru rāda pēc noklusējuma:',
 'prefs-help-recentchangescount' => 'Šis parametrs attiecas uz pēdējo izmaiņu un hronoloģijas lapām, kā arī uz sistēmas žurnāliem',
+'prefs-help-watchlist-token2' => 'Šī ir slepena atslēga tavam uzraugāmo lapu sarakstam.
+Ikvienam, kas to zinās, būs iespēja apskatīt tavu uzraugāmo lapu sarakstu, tāpēc nedalies ar to.
+[[Special:ResetTokens|Spied šeit, lai to atjaunotu]].',
 'savedprefs' => 'Jūsu izvēles ir saglabātas.',
 'timezonelegend' => 'Laika josla:',
 'localtime' => 'Vietējais laiks:',
@@ -1084,7 +1087,7 @@ Pagaidām vari meklēt, izmantojot Google vai Yahoo.
 'allowemail' => 'Atļaut saņemt e-pastus no citiem lietotājiem',
 'prefs-searchoptions' => 'Meklēšana',
 'prefs-namespaces' => 'Vārdtelpas',
-'defaultns' => 'Meklēt šajās palīglapās pēc noklusējuma:',
+'defaultns' => 'Meklēt šajās vārdtelpās pēc noklusējuma:',
 'default' => 'pēc noklusējuma',
 'prefs-files' => 'Attēli',
 'prefs-custom-css' => 'Personīgais CSS',
@@ -1108,13 +1111,12 @@ Tam ir jābūt īsākam par  $1 {{PLURAL:$1|simbolu|simboliem}}.',
 'gender-unknown' => 'Es nevēlos norādīt',
 'gender-male' => 'Viņš labo viki lapas',
 'gender-female' => 'Viņa labo viki lapas',
-'prefs-help-gender' => 'Dzimums nav obligāti jānorāda (šo parametru programmatūra izmanto, lai ģenerētu paziņojumus, kas atkarīgi no lietotāja dzimuma).
-Norādītā parametra vērtība būs publiski pieejama.',
+'prefs-help-gender' => 'Dzimums nav obligāti jānorāda (šo parametru programmatūra izmanto, lai ģenerētu paziņojumus, kas atkarīgi no lietotāja dzimuma). Šī informācija būs publiski pieejama.',
 'email' => 'E-pasts',
 'prefs-help-realname' => 'Īstais vārds nav obligāti jānorāda.
 Ja tu izvēlies to norādīt, tas tiks izmantots, lai identificētu tavu darbu (ieguldījumu {{grammar:lokatīvs|{{SITENAME}}}}).',
 'prefs-help-email' => 'E-pasta adrese nav obligāta, bet ir nepieciešama nozaudētas paroles atjaunošanai.',
-'prefs-help-email-others' => 'Jus ari variet izvelties ka citi jus var kontaktēt uz jusu lietotajā sarunas lapu, neatklājot jus identitāti.',
+'prefs-help-email-others' => 'Tu arī vari izvēlēties, ka citi var sazināties ar tevi ar saites tavā lietotāja lapā vai lietotāja diskusijas lapā palīdzību. Citiem lietotājiem netiek atklāta tava e-pasta adrese, kad viņi sazinās ar tevi.',
 'prefs-help-email-required' => 'E-pasta adrese ir obligāta.',
 'prefs-info' => 'Pamatinformācija',
 'prefs-i18n' => 'Internacionalizācija',
@@ -1124,14 +1126,15 @@ Ja tu izvēlies to norādīt, tas tiks izmantots, lai identificētu tavu darbu (
 'prefs-advancedediting' => 'Vispārīgi uzstādījumi',
 'prefs-editor' => 'Redaktors',
 'prefs-preview' => 'Priekšskatījums',
-'prefs-advancedrc' => 'Papildus uzstādījumi',
-'prefs-advancedrendering' => 'Papildus uzstādījumi',
-'prefs-advancedsearchoptions' => 'Papildus uzstādījumi',
-'prefs-advancedwatchlist' => 'Papildus uzstādījumi',
+'prefs-advancedrc' => 'Papildu uzstādījumi',
+'prefs-advancedrendering' => 'Papildu uzstādījumi',
+'prefs-advancedsearchoptions' => 'Papildu uzstādījumi',
+'prefs-advancedwatchlist' => 'Papildu uzstādījumi',
 'prefs-displayrc' => 'Pamatuzstādījumi',
 'prefs-displaysearchoptions' => 'Pamatuzstādījumi',
 'prefs-displaywatchlist' => 'Pamatuzstādījumi',
 'prefs-diffs' => 'Izmaiņas',
+'prefs-help-prefershttps' => 'Šie uzstādījumi stāsies spēkā nākamajā pievienošanās reizē.',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-pasta adrese šķiet derīga',
@@ -2353,7 +2356,7 @@ Pirmajā gadījumā var arī lietot šādu metodi, piem., [[{{#Special:Export}}/
 'allmessagesdefault' => 'Noklusētais ziņojuma teksts',
 'allmessagescurrent' => 'Pašreizējais teksts',
 'allmessagestext' => "Šajā lapā ir visu \"'''MediaWiki:'''\" lapās atrodamo sistēmas paziņojumu uzskaitījums.
-Šos paziņojumus var izmainīt tikai admini. Izmainot tos šeit, tie tiks izmainīti tikai šajā mediawiki instalācijā. Lai tos izmainītu visām pārējām, apskatieties [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] un [//translatewiki.net translatewiki.net].",
+Šos paziņojumus var izmainīt tikai admini. Izmainot tos šeit, tie tiks izmainīti tikai šajā mediawiki instalācijā. Lai tos izmainītu visām pārējām, apskatieties [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] un [//translatewiki.net translatewiki.net].",
 'allmessagesnotsupportedDB' => "Šī lapa nedarbojas, tāpēc, ka '''wgUseDatabaseMessages''' nedarbojas.",
 'allmessages-filter-legend' => 'Filtrs',
 'allmessages-filter' => 'Filtrēt pēc izmainīšanas statusa:',
@@ -2932,7 +2935,7 @@ Pārējie lauki, pēc noklusējuma, būs paslēpti.
 
 # External editor support
 'edit-externally' => 'Izmainīt šo failu ar ārēju programmu',
-'edit-externally-help' => '(Skat. [//www.mediawiki.org/wiki/Manual:External_editors instrukcijas] Mediawiki.org, lai iegūtu vairāk informācijas).',
+'edit-externally-help' => '(Skat. [https://www.mediawiki.org/wiki/Manual:External_editors instrukcijas] Mediawiki.org, lai iegūtu vairāk informācijas).',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'visas',
@@ -3075,7 +3078,7 @@ Var arī lietot [[Special:EditWatchlist|standarta izmainīšanas lapu]].',
 'version-hook-name' => 'Aizķeres nosaukums',
 'version-version' => '(Versija $1)',
 'version-license' => 'Licence',
-'version-poweredby-credits' => "Šis viki darbojas ar '''[//www.mediawiki.org/ MediaWiki]''' programmatūru, autortiesības © 2001-$1 $2.",
+'version-poweredby-credits' => "Šis viki darbojas ar '''[https://www.mediawiki.org/ MediaWiki]''' programmatūru, autortiesības © 2001-$1 $2.",
 'version-poweredby-others' => 'citi',
 'version-poweredby-translators' => 'translatewiki.net tulkotāji',
 'version-credits-summary' => 'Mēs vēlētos izteikt atzinību šīm personām par viņu ieguldījumu [[Special:Version|MediaWiki]].',
@@ -3102,8 +3105,7 @@ Var arī lietot [[Special:EditWatchlist|standarta izmainīšanas lapu]].',
 
 # Special:SpecialPages
 'specialpages' => 'Īpašās lapas',
-'specialpages-note' => '----
-* Normālas īpašās lapas.
+'specialpages-note' => '* Normālas īpašās lapas.
 * <span class="mw-specialpagerestricted">Ierobežotas pieejas īpašās lapas.</span>
 * <span class="mw-specialpagecached">Iekešotās īpašās lapas.</span>',
 'specialpages-group-maintenance' => 'Uzturēšanas atskaites',
index c57b0a5..24bb636 100644 (file)
@@ -1095,7 +1095,6 @@ $1",
 'mypreferences' => '簿註',
 'prefs-edits' => '數計:',
 'prefsnologin' => '未登簿',
-'prefsnologintext' => '註記須<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 登簿]</span>。',
 'changepassword' => '易符節',
 'prefs-skin' => '面版',
 'skin-preview' => '草覽',
@@ -2327,7 +2326,7 @@ $1',
 'allmessagesdefault' => '慣話文',
 'allmessagescurrent' => '今話文',
 'allmessagestext' => '此列MediaWiki官話。
-如貢正宗MediaWiki本地化,[//www.mediawiki.org/wiki/Localisation MediaWiki本地化]與[//translatewiki.net translatewiki.net]閱之。',
+如貢正宗MediaWiki本地化,[https://www.mediawiki.org/wiki/Localisation MediaWiki本地化]與[//translatewiki.net translatewiki.net]閱之。',
 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages'''閉庫,'''無纂也。",
 'allmessages-filter-legend' => '濾',
 'allmessages-filter' => '以易濾:',
@@ -2637,7 +2636,7 @@ $1',
 
 # External editor support
 'edit-externally' => '以外部程式修此文',
-'edit-externally-help' => '(請閱[//www.mediawiki.org/wiki/Manual:External_editors 安裝指引]以知詳情)',
+'edit-externally-help' => '(請閱[https://www.mediawiki.org/wiki/Manual:External_editors 安裝指引]以知詳情)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => '全',
@@ -2789,7 +2788,7 @@ $5
 'version-hook-subscribedby' => '用於',
 'version-version' => '(版 $1)',
 'version-license' => '牌',
-'version-poweredby-credits' => "此 Wiki 以 '''[//www.mediawiki.org/ MediaWiki]''' 之驅,權 © 2001-$1 $2。",
+'version-poweredby-credits' => "此 Wiki 以 '''[https://www.mediawiki.org/ MediaWiki]''' 之驅,權 © 2001-$1 $2。",
 'version-poweredby-others' => '其他',
 'version-license-info' => 'MediaWiki乃自由軟件;爾依自由軟件基金會之GNU通用公共授權之款,就此本程序再發佈及/或修;依之二版(自選之)或後之。
 
@@ -2812,8 +2811,7 @@ MediaWiki乃為用之發,無擔之責也;亦無售目之默擔也。參GNU
 
 # Special:SpecialPages
 'specialpages' => '特查',
-'specialpages-note' => '----
-* 準特查。
+'specialpages-note' => '* 準特查。
 * <strong class="mw-specialpagerestricted">限特查。</strong>',
 'specialpages-group-maintenance' => '護報',
 'specialpages-group-other' => '它之奇頁',
index 70e2146..a936fc5 100644 (file)
@@ -1023,7 +1023,6 @@ $3 द्वारा देल कारण अछि ''$2''",
 'mypreferences' => 'खासमखास',
 'prefs-edits' => 'सम्पादनक संख्या',
 'prefsnologin' => 'सम्प्रवेशित नै',
-'prefsnologintext' => 'अहाँ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} logged in]</span> प्रयोक्ता विकल्प निर्धारण लेल प्रयोग करू।',
 'changepassword' => 'कूटशब्द बदलू',
 'prefs-skin' => 'रूप',
 'skin-preview' => 'पूर्वावलोकन',
@@ -2456,7 +2455,7 @@ $1 एकर प्रतिबन्धक कारण अछि : "$2"',
 'allmessagesdefault' => 'पूर्वनिर्धारित संदेश पाठ',
 'allmessagescurrent' => 'अखुनका संदेश पाठ',
 'allmessagestext' => 'ई मीडियाविकी नामस्थानमे उपलब्ध संस्थागत संदेशक सूची छी।
-कृपा कऽ देखू [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] आ [//translatewiki.net translatewiki.net] जँ अहाँ मीडियाविकीक स्थानिकीकरणक मूलक अनुवादमे योगदान करए चाहै छी।',
+कृपा कऽ देखू [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] आ [//translatewiki.net translatewiki.net] जँ अहाँ मीडियाविकीक स्थानिकीकरणक मूलक अनुवादमे योगदान करए चाहै छी।',
 'allmessagesnotsupportedDB' => "ई पन्ना प्रयोगमे नै आनल जा सकैए कारण '''\$wgUseDatabaseMessages''' अशक्त कएल अछि।",
 'allmessages-filter-legend' => 'चलनी',
 'allmessages-filter' => 'अपन हिसाबे अनुकूलित कऽ छाँटू:',
@@ -3147,7 +3146,7 @@ Variants for Chinese language
 
 # External editor support
 'edit-externally' => 'ऐ फाइलकेँ बाहरी अनुप्रयोगसँ हटाउ',
-'edit-externally-help' => '(देखू [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] विषेष जानकारी लेल)',
+'edit-externally-help' => '(देखू [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] विषेष जानकारी लेल)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'सभ',
@@ -3333,7 +3332,7 @@ $5
 'version-hook-subscribedby' => 'ई सदस्यता लेलनि',
 'version-version' => '(संस्करण $1)',
 'version-license' => 'अधिकार',
-'version-poweredby-credits' => "ई विकी चालित अछि '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2",
+'version-poweredby-credits' => "ई विकी चालित अछि '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2",
 'version-poweredby-others' => 'आन',
 'version-license-info' => 'मीडियाविकी एकटा मंगनीक तंत्रांश अछि; अहाँ एकरा बाँटि सकै छी आ/ वा संशोधित कऽ सकै छीगी.एन.यू. सामान्य जन लाइसेन्सक अन्तर्गत जेना फ्री सॉफ्टवेयर फाउन्डेशन एकरा प्रकाशित केने अछि; चाहे तँ लाइसेन्सक संस्करण २, वा (अहाँक विकल्पपर) कोनो बादक दोसर संस्करणक अन्तर्गत।
 
@@ -3357,8 +3356,7 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'विशेष पन्ना',
-'specialpages-note' => '----
-* सामान्य विशिष्ट पन्ना।
+'specialpages-note' => '* सामान्य विशिष्ट पन्ना।
 * <span class="mw-specialpagerestricted">प्रतिबंधित विशिष्ट पन्ना।</span>
 * <span class="mw-specialpagecached">उपस्मृतिक विशिष्ट पन्ना (पुरान भऽ सकैए)।</span>',
 'specialpages-group-maintenance' => 'सुस्थापन प्रतिवेदन',
index d128bd8..e055ad8 100644 (file)
@@ -979,7 +979,6 @@ Ningen Rika kudu eling nek indeks Google kanggo {{SITENAME}} bisa baen isine anu
 'mypreferences' => 'Preferensi',
 'prefs-edits' => 'Jumlah suntingan:',
 'prefsnologin' => 'Durung mlebu log',
-'prefsnologintext' => 'Rika kudu <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}}| mlebu log disit]</span> kanggo ngowahi préferènsine Rika.',
 'changepassword' => 'Ganti tembung sandhi',
 'prefs-skin' => 'Kulit',
 'skin-preview' => 'Pratayang',
@@ -1821,7 +1820,7 @@ Sing liyane bakal diumpetna sacara ''default''.
 
 # External editor support
 'edit-externally' => 'Sunting berkas kiye nganggo aplikasi jaba',
-'edit-externally-help' => '(Deleng [//www.mediawiki.org/wiki/Manual:External_editors instruksi pangaturan] kanggo informasi sabanjuré)',
+'edit-externally-help' => '(Deleng [https://www.mediawiki.org/wiki/Manual:External_editors instruksi pangaturan] kanggo informasi sabanjuré)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'kabèh',
index 746a2e1..b276079 100644 (file)
@@ -1027,7 +1027,6 @@ $3 макссь туфталсь - ''$2''",
 'mypreferences' => 'Монь латцемане',
 'prefs-edits' => 'Петнематнень лувсна:',
 'prefsnologin' => 'Апак сувак',
-'prefsnologintext' => 'Тондейть эряви <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} сувамс]</span> тонь арафнематнень латцеманкса.',
 'changepassword' => 'Сувама валть полафтомс',
 'prefs-skin' => 'Ванфонь латцема',
 'skin-preview' => 'Васень няфтема',
@@ -2148,7 +2147,7 @@ $1',
 'allmessagesdefault' => 'Апак полафтт текст',
 'allmessagescurrent' => 'Тяниень текст',
 'allmessagestext' => 'Тя MediaWiki-са васьфневи системонь пачфтематнень лувомась.
-Эняльттяма, сувак [//www.mediawiki.org/wiki/Localisation MediaWiki Локализациес] ди [//translatewiki.net translatewiki.net-с] кда тонь мяльце тиемс эсь путксце марстонь MediaWiki локализациес.',
+Эняльттяма, сувак [https://www.mediawiki.org/wiki/Localisation MediaWiki Локализациес] ди [//translatewiki.net translatewiki.net-с] кда тонь мяльце тиемс эсь путксце марстонь MediaWiki локализациес.',
 'allmessagesnotsupportedDB' => "Тя лопас аш кода кунцемс сяс мес '''\$wgUseDatabaseMessages'''лоткафоль.",
 'allmessages-language' => 'Кяль:',
 'allmessages-filter-submit' => 'Ётамс',
@@ -2647,7 +2646,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'Петнемс тя файлть ушеширень програмонь вельде',
-'edit-externally-help' => '(Ванк [//www.mediawiki.org/wiki/Manual:External_editors арафнемань вятемовалсь] сяда лама содаманкса)',
+'edit-externally-help' => '(Ванк [https://www.mediawiki.org/wiki/Manual:External_editors арафнемань вятемовалсь] сяда лама содаманкса)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'сембе',
@@ -2805,8 +2804,7 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'Башка лопат',
-'specialpages-note' => '----
-* Кърдань башка лопат.
+'specialpages-note' => '* Кърдань башка лопат.
 * <strong class="mw-specialpagerestricted">Кардаф башка лопат.</strong>',
 'specialpages-group-maintenance' => 'Латцема лувоматне',
 'specialpages-group-other' => 'Иля башка тевонь лопатне',
index 5386a66..b2b6621 100644 (file)
@@ -1344,7 +1344,6 @@ ihany no miseho amin'ny vokatry ny karoka).",
 'mypreferences' => 'Safidy',
 'prefs-edits' => 'isa ny fanovàna :',
 'prefsnologin' => 'Tsy tafiditra',
-'prefsnologintext' => 'Mila <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} misoratra ary tafiditra]</span> amin\'ny kaontinao ianao vao afaka manova ny safidinao.',
 'changepassword' => 'Hanova tenimiafina',
 'prefs-skin' => 'Endrika',
 'skin-preview' => 'Tsipalotra',
@@ -2827,7 +2826,7 @@ Etsy amin'ny toerana farany dia afaka mampiasa rohy ihany koa ianao, ohatra [[{{
 'allmessagesdefault' => 'Dikan-teny tany am-boalohany',
 'allmessagescurrent' => 'Dikan-teny miasa ankehitriny',
 'allmessagestext' => "Ity dia lisitry ny hafatra hita ao amin'ny anaran-tsehatra MediaWiki.
-Andana vangio ny [//www.mediawiki.org/wiki/Localisation Fandikana an'i Mediawiki] ary [//translatewiki.net/ translatewiki.net] raha tia handray anjara amin'ny fandikana an'i Mediawiki amin'ny ankapobeny.",
+Andana vangio ny [https://www.mediawiki.org/wiki/Localisation Fandikana an'i Mediawiki] ary [//translatewiki.net/ translatewiki.net] raha tia handray anjara amin'ny fandikana an'i Mediawiki amin'ny ankapobeny.",
 'allmessagesnotsupportedDB' => "Tsy mbola mandeha ny '''{{ns:special}}:Allmessages''' satria tsy mandeha koa ny '''\$wgUseDatabaseMessages'''.",
 'allmessages-filter-legend' => 'Tantavanina',
 'allmessages-filter' => 'Hanasivana araka ny satam-panovana :',
@@ -3370,7 +3369,7 @@ Tokony sary tsy misy na sary tsy izy ny rohy voalohany anaty andalana iray .
 
 # External editor support
 'edit-externally' => "Ovao amin'ny alalan'ny fampiasana fitaovana ivelan'ity Wiki ity io rakitra io",
-'edit-externally-help' => "jereo any amin'[//www.mediawiki.org/wiki/Manual:External_editors ny torolalana] ny fanazavana fanampiny,.",
+'edit-externally-help' => "jereo any amin'[https://www.mediawiki.org/wiki/Manual:External_editors ny torolalana] ny fanazavana fanampiny,.",
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'rehetra',
index d0c9d65..aa005f6 100644 (file)
@@ -230,7 +230,7 @@ $messages = array(
 'errorpagetitle' => 'Йоҥылыш',
 'returnto' => '$1 деке пӧртылаш.',
 'tagline' => '{{SITENAME}} гыч',
-'help' => 'Полшык',
+'help' => 'Полшыш',
 'search' => 'Кычалмаш',
 'searchbutton' => 'Кычалаш',
 'go' => 'Куснаш',
@@ -262,7 +262,7 @@ $messages = array(
 'userpage' => 'Пайдаланышын лаштыкым ончалаш',
 'imagepage' => 'Файлын лаштыкым ончалаш',
 'templatepage' => 'Ямдылыкын лаштыкым ончалаш',
-'viewhelppage' => 'Ð\9fолÑ\88Ñ\8bк лаштыкым ончалаш',
+'viewhelppage' => 'Ð\9fолÑ\8bÑ\88 лаштыкым ончалаш',
 'categorypage' => 'Категорийын лаштыкым ончалаш',
 'viewtalkpage' => 'Ончалаш каҥашымашым',
 'otherlanguages' => 'Вес йылме дене',
@@ -365,17 +365,17 @@ $messages = array(
 'createacct-yourpasswordagain-ph' => 'Шолыпмутым угыч пурто',
 'remembermypassword' => 'Тиде компьютерыште мыйым шарнаш (эн шуко $1 {{PLURAL:$1|кечылан|кечылан}})',
 'yourdomainname' => 'Тендан домен:',
-'login' => 'Шке денет палымым ыште',
+'login' => 'Шке денет палдаре',
 'nav-login-createaccount' => 'Пураш/Регистрацийым эрте',
-'loginprompt' => '{{SITENAME}} Ñ\82Ñ\8bй Ð´ÐµÐ½ÐµÑ\82 Ð¿Ð°Ð»Ñ\8bме Ð»Ð¸Ð¹Ð¼Ð°Ñ\88лан, cookies Ñ\87ӱкÑ\82алÑ\82Ñ\8bн Ñ\83лÑ\88аÑ\88.',
-'userlogin' => 'Шке Ð´ÐµÐ½ÐµÑ\82 Ð¿Ð°Ð»Ñ\8bмÑ\8bм Ñ\8bÑ\88Ñ\82е/РегиÑ\81Ñ\82Ñ\80аÑ\86ийÑ\8bм Ñ\8dÑ\80Ñ\82е',
+'loginprompt' => '{{SITENAME}} Ñ\88ке Ð´ÐµÐ½ÐµÑ\82 Ð¿Ð°Ð»Ð´Ð°Ñ\80Ñ\8bме Ð´ÐµÑ\87 Ð¾Ð½Ñ\87Ñ\8bÑ\87 ÐºÐ¾Ð¼Ð¿Ñ\8cÑ\8eÑ\82еÑ\80Ñ\8bÑ\88Ñ\82еÑ\82 Â«cookies»-Ñ\8bм Ñ\87ӱкÑ\82Ñ\8bман.',
+'userlogin' => 'Ð\9fÑ\83Ñ\80аÑ\88/РегиÑ\81Ñ\82Ñ\80аÑ\86ийÑ\8bм Ñ\8dÑ\80Ñ\82аÑ\88',
 'logout' => 'Лекташ',
 'userlogout' => 'Лекташ',
 'nologin' => "Тый регистрацийым эше эртен отыл? '''$1'''.",
 'nologinlink' => 'Регистрацийым эрте',
 'createaccount' => 'Регистрацийым эрте',
 'gotaccount' => "Тый регистрацийым эртенат? '''$1'''.",
-'gotaccountlink' => 'Шке денет палымым ыште',
+'gotaccountlink' => 'Шке денет палдаре',
 'userlogin-resetlink' => 'Лӱмдам але шолыпмутдам монденда?',
 'userlogin-resetpassword-link' => 'Шолыпмутым монденат?',
 'createaccountmail' => 'Кӱчык жаплан чокым ыштыме шолыпмутым мылам e-mail дене колташ',
@@ -1004,7 +1004,7 @@ $messages = array(
 'tooltip-pt-preferences' => 'Мыйын келыштарымашем',
 'tooltip-pt-watchlist' => 'Мыйын эскерыме лаштык-влак лӱмер',
 'tooltip-pt-mycontris' => 'Тыйын пашатым эскерыме лаштык',
-'tooltip-pt-login' => 'Шке Ð´ÐµÐ½ÐµÑ\82 Ð¿Ð°Ð»Ñ\8bмÑ\8bм Ñ\8bÑ\88Ñ\82еÑ\82 Ð³Ñ\8bн Ñ\81айÑ\80ак Ð»Ð¸ÐµÑ\88; Ñ\82акÑ\88Ñ\8bм Ñ\82идÑ\8bм Ñ\8bÑ\88Ñ\82Ñ\8bдеаÑ\82 ÐºÐµÑ\80Ñ\82аÑ\82.',
+'tooltip-pt-login' => 'ТÑ\8bÑ\88Ñ\82е Ñ\80егиÑ\81Ñ\82Ñ\80аÑ\86ийÑ\8bм Ñ\8dÑ\80Ñ\82ен ÐºÐµÑ\80Ñ\82аÑ\82. Ð ÐµÐ³Ð¸Ñ\81Ñ\82Ñ\80аÑ\86ий Ð´ÐµÑ\87 Ð¿Ð¾Ñ\81нааÑ\82 Ð¿Ð°Ñ\88ам Ñ\8bÑ\88Ñ\82аÑ\88 Ð»Ð¸ÐµÑ\88.',
 'tooltip-pt-logout' => 'Системе гыч лекташ',
 'tooltip-ca-talk' => 'Лаштыкыште возымым каҥашаш',
 'tooltip-ca-edit' => 'Тый тиде лаштыкым тӧрлатен кертат. Лаштыкым аралыме деч ончыч тудым тергаш ит мондо.',
@@ -1027,7 +1027,7 @@ $messages = array(
 'tooltip-n-currentevents' => 'Мо лийме нерген нерген пытартыш увер',
 'tooltip-n-recentchanges' => 'Пытартыш вашталтымаш лӱмер',
 'tooltip-n-randompage' => 'Лаштыкым чокым ойыраш',
-'tooltip-n-help' => 'Ð\92икипедийÑ\8bм ÐºÑ\83Ñ\87Ñ\8bлÑ\82мо Ð´Ð° Ñ\82Ó§Ñ\80лаÑ\82Ñ\8bме Ñ\88оÑ\82Ñ\8bÑ\88Ñ\82о Ð¿Ð¾Ð»Ñ\88Ñ\8bк.',
+'tooltip-n-help' => 'Ð\92икипедийÑ\8bм ÐºÑ\83Ñ\87Ñ\8bлÑ\82мо Ð´Ð° Ñ\82Ó§Ñ\80лаÑ\82Ñ\8bме Ñ\88оÑ\82Ñ\8bÑ\88Ñ\82о Ð¿Ð¾Ð»Ñ\8bÑ\88.',
 'tooltip-t-whatlinkshere' => 'Тышке кондышо лаштык-влакын лӱмерышт',
 'tooltip-t-recentchangeslinked' => 'Тиде лаштык дене кылдалтше пытартыш тӧрлатымаш-влак',
 'tooltip-feed-rss' => 'Тиде лаштыклан RSS-кыл',
@@ -1101,7 +1101,7 @@ $messages = array(
 
 # External editor support
 'edit-externally' => 'Файлым ӧрдыж программыште тӧрлаташ',
-'edit-externally-help' => '(Сайрак палашлан ончал [//www.mediawiki.org/wiki/Manual:External_editors шындымаш нерген туныктымашым])',
+'edit-externally-help' => '(Сайрак палашлан ончал [https://www.mediawiki.org/wiki/Manual:External_editors шындымаш нерген туныктымашым])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'чыла',
index 1d804d0..c6ddd82 100644 (file)
@@ -1158,7 +1158,6 @@ Ingek indeks Google untuak {{SITENAME}} mungkin lah kadaluarsa.',
 'mypreferences' => 'Pangaturan',
 'prefs-edits' => 'Jumlah suntiangan:',
 'prefsnologin' => 'Alun masuak log',
-'prefsnologintext' => 'Sanak musti <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} masuak log]</span> untuak mengeset pangaturan.',
 'changepassword' => 'Tuka kato sandi',
 'prefs-skin' => 'Kulik',
 'skin-preview' => 'Caliak',
@@ -2470,7 +2469,7 @@ Nan lainnyo akan tasuruak sacaro baku.
 
 # External editor support
 'edit-externally' => 'Suntiang berkas ko jo aplikasi lua',
-'edit-externally-help' => '(Caliak [//www.mediawiki.org/wiki/Manual:External_editors instruksi pangaturan] untuak informasi lanjuiknyo)',
+'edit-externally-help' => '(Caliak [https://www.mediawiki.org/wiki/Manual:External_editors instruksi pangaturan] untuak informasi lanjuiknyo)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'kasadonyo',
@@ -2528,7 +2527,7 @@ Sanak dapek juo [[Special:EditWatchlist|manggunoan panyuntiang standarnyo]].',
 'version-other' => 'Lain-lain',
 'version-version' => '(Versi $1)',
 'version-license' => 'Lisensi',
-'version-poweredby-credits' => "Wiki ko didukuang jo '''[//www.mediawiki.org/ MediaWiki]''', hak cipta © 2001-$1 $2.",
+'version-poweredby-credits' => "Wiki ko didukuang jo '''[https://www.mediawiki.org/ MediaWiki]''', hak cipta © 2001-$1 $2.",
 'version-poweredby-others' => 'lainnyo',
 'version-credits-summary' => 'Kami nio mangakui urang-urang ko ateh kontribusinyo pado [[Special:Version|MediaWiki]].',
 'version-license-info' => 'MediaWiki adolah parangkaik lunak bebas; Sanak dapek mandistribusian dan/atau mamodfikasinyo jo syaraik Lisensi Publik Umum GNU nan dikaluaan dek Free Software Foundation; versi 2 atau nan tabaru.
@@ -2551,8 +2550,7 @@ Sanak mustilah alah manarimo [{{SERVER}}{{SCRIPTPATH}}/COPYING salinan Lisensi P
 
 # Special:SpecialPages
 'specialpages' => 'Laman istimewa',
-'specialpages-note' => '----
-* Laman istimewa normal.
+'specialpages-note' => '* Laman istimewa normal.
 * <span class="mw-specialpagerestricted">Laman istimewa talarang.</span>
 * <span class="mw-specialpagecached">Laman istimewa tasinggah (mungkin usang).</span>',
 'specialpages-group-maintenance' => 'Laporan pamaliharoan',
index 1cf0f51..af9ec37 100644 (file)
@@ -631,7 +631,7 @@ $1',
 'youhavenewmessagesfromusers' => 'Имате $1 од {{PLURAL:$3|еден корисник|$3 корисници}} ($2).',
 'youhavenewmessagesmanyusers' => 'Имате $1 од многу корисници ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|нова порака|нови пораки}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|последна промена|последни промени}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|последна промена|999=последни промени}}',
 'youhavenewmessagesmulti' => 'Имате нови пораки на $1',
 'editsection' => 'уреди',
 'editold' => 'уреди',
@@ -764,7 +764,8 @@ $2',
 'invalidtitle-knownnamespace' => 'Неважечки наслов со именски простор „$2“ и текст „$3“',
 'invalidtitle-unknownnamespace' => 'Неважечки наслов со именски простор бр. $1 и текст „$2“',
 'exception-nologin' => 'Не сте најавени',
-'exception-nologin-text' => 'Оваа страница или постапка бара да сте најавени на викито.',
+'exception-nologin-text' => '[[Special:Userlogin|Најавете се]] за да добиете пристап до страницата или дејството.',
+'exception-nologin-text-manual' => 'Треба да сте $1 за да имате пристап до страницата или дејството.',
 
 # Virus scanner
 'virus-badscanner' => "Лоша поставка: непознат проверувач на вируси: ''$1''",
@@ -1334,9 +1335,10 @@ $2
 'revdelete-text' => "'''Избришаните измени и настани сѐ уште ќе се појавуваат во историјата на страницата и дневниците, но делови од нивната содржина ќе бидат недостапни за јавноста.'''
 Други администратори на {{SITENAME}} сѐ уште ќе имаат пристап до скриената содржина и ќе можат да ја вратат преку истиот посредник, освен ако не се поставени дополнителни ограничувања.",
 'revdelete-confirm' => 'Потврдете дека сакате да го направите ова, дека ги сфаќате последиците, и дека тоа го правите во согласност со [[{{MediaWiki:Policy-url}}|правилата]].',
-'revdelete-suppress-text' => "Ограничувањето '''се користи''' само во следниве случаи:
+'revdelete-suppress-text' => "Притајувањето се користи '''само''' во следниве случаи:
+* Потенцијално клеветнички информации
 * Несоодветни лични информации
-*: ''домашни адреси и телефонски броеви, матични броеви, и.т.н.''",
+*: ''домашни адреси и телефонски броеви, матични броеви и тн.''",
 'revdelete-legend' => 'Постави ограничувања за видливост',
 'revdelete-hide-text' => 'Текст на ревизијата',
 'revdelete-hide-image' => 'Скриј содржина на податотека',
@@ -1345,8 +1347,8 @@ $2
 'revdelete-hide-user' => 'Корисничко име/IP-адреса на уредникот',
 'revdelete-hide-restricted' => 'Постави ограничувања и за администратори на ист начин како и за останатите',
 'revdelete-radio-same' => '(не менувај)',
-'revdelete-radio-set' => 'Ð\92идлива',
-'revdelete-radio-unset' => 'СкÑ\80иена',
+'revdelete-radio-set' => 'СкÑ\80иена',
+'revdelete-radio-unset' => 'Ð\92идлива',
 'revdelete-suppress' => 'Притајувај податоци и од администраторите',
 'revdelete-unsuppress' => 'Отстрани ограничувања на обновени ревизии',
 'revdelete-log' => 'Причина:',
@@ -1502,7 +1504,7 @@ $1",
 'mypreferences' => 'нагодувања',
 'prefs-edits' => 'Број на уредувања:',
 'prefsnologin' => 'Не сте најавени',
-'prefsnologintext' => 'Мора да бидете <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} најавени]</span> за да ги менувате вашите кориснички нагодувања.',
+'prefsnologintext2' => 'Треба да сте $1 за да можете да ги поставувате корисничките нагодувања.',
 'changepassword' => 'Смени лозинка',
 'prefs-skin' => 'Руво',
 'skin-preview' => 'Преглед',
@@ -2547,7 +2549,7 @@ $NEWPAGE
 е-пошта: $PAGEEDITOR_EMAIL
 вики: $PAGEEDITOR_WIKI
 
\9fовеÑ\9cе Ð½ÐµÐ¼Ð° Ð´Ð° Ð´Ð¾Ð±Ð¸Ð²Ð°Ñ\82е Ð¸Ð·Ð²ÐµÑ\81Ñ\82Ñ\83ваÑ\9aа Ð²Ð¾ Ñ\81лÑ\83Ñ\87аÑ\98 Ð½Ð° Ð´Ñ\80Ñ\83ги Ð¿Ð¾Ð½Ð°Ñ\82амоÑ\88ни Ð¿Ñ\80омени, Ð¾Ñ\81вен Ð°ÐºÐ¾ Ð½Ðµ Ñ\98а Ð¿Ð¾Ñ\81еÑ\82иÑ\82е Ð¾Ð²Ð°Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а.
\9fовеÑ\9cе Ð½ÐµÐ¼Ð° Ð´Ð° Ð´Ð¾Ð±Ð¸Ð²Ð°Ñ\82е Ð¸Ð·Ð²ÐµÑ\81Ñ\82Ñ\83ваÑ\9aа Ð²Ð¾ Ñ\81лÑ\83Ñ\87аÑ\98 Ð½Ð° Ð´Ñ\80Ñ\83ги Ð¿Ð¾Ð½Ð°Ñ\82амоÑ\88ни Ð°ÐºÑ\82ивноÑ\81Ñ\82и, Ð¾Ñ\81вен Ð°ÐºÐ¾ Ð½Ðµ Ñ\98а Ð¿Ð¾Ñ\81еÑ\82иÑ\82е Ð¾Ð²Ð°Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а Ð´Ð¾Ð´ÐµÐºÐ° Ñ\81Ñ\82е Ð½Ð°Ñ\98авени.
 Можете и да ги поништите ознаките за известување за сите набљудувани страници на вашиот список на набљудувања.
 
 Известителниот систем на {{SITENAME}}
@@ -3079,7 +3081,7 @@ $1',
 'allmessagesdefault' => 'Текст по основно',
 'allmessagescurrent' => 'Сегашен текст',
 'allmessagestext' => 'Ова е список на системските пораки расположиви за именскиот простор „МедијаВики“.
-Одете на [//www.mediawiki.org/wiki/Localisation Локализација на МедијаВики] и [//translatewiki.net translatewiki.net] ако сакате да придонесете кон општата локализација на МедијаВики.',
+Одете на [https://www.mediawiki.org/wiki/Localisation Локализација на МедијаВики] и [//translatewiki.net translatewiki.net] ако сакате да придонесете кон општата локализација на МедијаВики.',
 'allmessagesnotsupportedDB' => "Оваа страница не може да се користи бидејќи '''\$wgUseDatabaseMessages''' е исклучено.",
 'allmessages-filter-legend' => 'Филтер',
 'allmessages-filter' => 'Филтрирај по состојба на прилагодувањето:',
@@ -3244,7 +3246,7 @@ $2',
 'tooltip-undo' => '„Откажи“ го поништува ова уредување и ве носи на уредувањето во режим на преглед. Дава можност за наведување на причина во описот.',
 'tooltip-preferences-save' => 'Зачувај',
 'tooltip-summary' => 'Внесете краток опис',
-'tooltip-iwiki' => '$1 — $2',
+'interlanguage-link-title' => '$1 — $2',
 
 # Stylesheets
 'common.css' => '/* Тука поставениот CSS ќе се применува врз сите рува */',
@@ -3309,6 +3311,7 @@ $2',
 'pageinfo-length' => 'Должина на страницата (во бајти)',
 'pageinfo-article-id' => 'Назнака на страницата',
 'pageinfo-language' => 'Јазик на содржината на страницата',
+'pageinfo-content-model' => 'Модел на содржината на страницата',
 'pageinfo-robot-policy' => 'Индексирање со роботи',
 'pageinfo-robot-index' => 'Дозволено',
 'pageinfo-robot-noindex' => 'Недозволено',
@@ -3397,7 +3400,7 @@ $1',
 'svg-long-desc' => 'SVG податотека, номинално $1 × $2 пиксели, големина: $3',
 'svg-long-desc-animated' => 'Анимирана SVG-податотека, номинално: $1 × $2 пиксели, големина: $3',
 'svg-long-error' => 'Неважечка SVG-податотека: $1',
-'show-big-image' => 'Ð\92иÑ\81Ñ\82инÑ\81ка Ð³Ð¾Ð»ÐµÐ¼Ð¸Ð½а',
+'show-big-image' => 'Ð\98звоÑ\80на Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82ека',
 'show-big-image-preview' => 'Големина на овој преглед: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Друга резолуција|Други резолуции}}: $1.',
 'show-big-image-size' => '$1 × $2 пиксели',
@@ -3929,7 +3932,7 @@ Variants for Chinese language
 
 # External editor support
 'edit-externally' => 'Уреди ја податотеката со надворешен програм',
-'edit-externally-help' => '(Видете [//www.mediawiki.org/wiki/Manual:External_editors повеќе напатствија] за нагодувањето).',
+'edit-externally-help' => '(Видете [https://www.mediawiki.org/wiki/Manual:External_editors повеќе напатствија] за нагодувањето).',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'сите',
@@ -4035,6 +4038,7 @@ $5
 
 # Separators for various lists, etc.
 'percent' => '$1&#160;%',
+'quotation-marks' => '„$1“',
 
 # Multipage image navigation
 'imgmultipageprev' => '&larr; претходна страница',
@@ -4205,7 +4209,7 @@ $5
 'version-version' => '(Верзија $1)',
 'version-svn-revision' => '(рев. $2)',
 'version-license' => 'Лиценца',
-'version-poweredby-credits' => "Ова вики работи на '''[//www.mediawiki.org/ МедијаВики]''', авторски права © 2001-$1 $2.",
+'version-poweredby-credits' => "Ова вики работи на '''[https://www.mediawiki.org/ МедијаВики]''', авторски права © 2001-$1 $2.",
 'version-poweredby-others' => 'други',
 'version-poweredby-translators' => 'преведувачи на translatewiki.net',
 'version-credits-summary' => 'Би сакале да им се заблагодариме на следниве лица за нивните придонеси кон [[Special:Version|МедијаВики]].',
@@ -4248,10 +4252,9 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'Специјални страници',
-'specialpages-note' => '----
-* Нормални специјални страници.
-* <span class="mw-specialpagerestricted">Ограничени специјални страници.</span>
-* <span class="mw-specialpagecached">Кеширани специјални страници (може да се застарени).</span>',
+'specialpages-note-top' => 'Легенда',
+'specialpages-note' => '* Нормални специјални страници.
+* <span class="mw-specialpagerestricted">Ограничени специјални страници.</span>',
 'specialpages-group-maintenance' => 'Извештаи за одржување',
 'specialpages-group-other' => 'Други специјални страници',
 'specialpages-group-login' => 'Најава / регистрација',
index a229938..b383d81 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author Abhishek Jacob
+ * @author Akhilan
  * @author Anoopan
  * @author Chrisportelli
  * @author Deepugn
@@ -749,7 +750,8 @@ $2',
 'invalidtitle-knownnamespace' => 'നാമമേഖല "$2", എഴുത്ത് "$3" എന്നിവ ഉപയോഗിച്ചുള്ള അസാധുവായ തലക്കെട്ട്',
 'invalidtitle-unknownnamespace' => 'അപരിചിതമായ നാമമേഖലാ സംഖ്യ $1, എഴുത്ത് "$2" എന്നിവ ഉപയോഗിച്ചുള്ള അസാധുവായ തലക്കെട്ട്',
 'exception-nologin' => 'ലോഗിൻ ചെയ്തിട്ടില്ല',
-'exception-nologin-text' => 'ഈ വിക്കിയിൽ ഈ താൾ അല്ലെങ്കിൽ പ്രവൃത്തി ലഭ്യമാകാൻ താങ്കൾ ലോഗിൻ ചെയ്തിരിക്കേണ്ടതാണ്.',
+'exception-nologin-text' => 'ഈ വിക്കിയിൽ ഈ താൾ അല്ലെങ്കിൽ പ്രവൃത്തി ലഭ്യമാകാൻ ദയവായി [[Special:Userlogin|പ്രവേശിക്കുക]].',
+'exception-nologin-text-manual' => 'ഈ താൾ അല്ലെങ്കിൽ പ്രവൃത്തി ഉപയോഗിക്കാൻ ദയവായി $1.',
 
 # Virus scanner
 'virus-badscanner' => "തെറ്റായ ക്രമീകരണങ്ങൾ: അപരിചിതമായ വൈറസ് തിരച്ചിൽ ഉപാധി :  ''$1''",
@@ -796,7 +798,7 @@ $2',
 'gotaccount' => "താങ്കൾക്ക് അംഗത്വമുണ്ടോ? '''$1'''.",
 'gotaccountlink' => 'പ്രവേശിക്കുക',
 'userlogin-resetlink' => 'താങ്കളുടെ ലോഗിൻ വിവരങ്ങൾ മറന്നു പോയോ?',
-'userlogin-resetpassword-link' => 'താà´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´ªàµ\81à´¨à´\83à´¸à´\9càµ\8dà´\9càµ\80à´\95à´°à´¿à´\95àµ\8dà´\95àµ\81à´\95',
+'userlogin-resetpassword-link' => 'താà´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´®à´±à´¨àµ\8dà´¨àµ\8b?',
 'helplogin-url' => 'Help:പ്രവേശനം',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|പ്രവേശന സഹായം]]',
 'userlogin-loggedin' => 'താങ്കൾ ഇപ്പോൾ തന്നെ {{GENDER:$1|$1}} ആയി പ്രവേശിച്ചിരിക്കുന്നു.
@@ -860,8 +862,8 @@ $2',
 'mailerror' => 'മെയിൽ അയയ്ക്കുന്നതിൽ പിഴവ്: $1',
 'acct_creation_throttle_hit' => 'കഴിഞ്ഞ ഒരു ദിവസത്തിനുള്ളിൽ താങ്കളുടെ ഐ.പി. വിലാസത്തിൽ നിന്നുമുള്ള സന്ദർശകർ {{PLURAL:$1|1 അംഗത്വം|$1 അംഗത്വങ്ങൾ}} എടുത്തിട്ടുണ്ട്, പ്രസ്താവിത സമയത്തിനുള്ളിൽ എടുക്കാവുന്ന ഏറ്റവും കൂടിയ പരിധിയാണിത്.
 അതിന്റെ ഫലമായി, ഈ ഐ.പി.യിൽ നിന്നുള്ള സന്ദർശകർക്ക് ഇപ്പോൾ കൂടുതൽ അംഗത്വമെടുക്കാൻ കഴിയുന്നതല്ല.',
-'emailauthenticated' => 'താà´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´\87à´®àµ\86യിൽ à´µà´¿à´²à´¾à´¸à´\82 $2, $3-à´¨àµ\8d à´¸à´¾à´§àµ\81à´¤ à´¤àµ\86ളിയിച്ചതാണ്.',
-'emailnotauthenticated' => 'താà´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´\87à´®àµ\86യിൽ à´µà´¿à´²à´¾à´¸à´¤àµ\8dതിനàµ\8dà´±àµ\86 à´¸à´¾à´§àµ\81à´¤ à´\87à´¤àµ\81വരàµ\86 à´¸àµ\8dഥിരàµ\80à´\95à´°à´¿à´\95àµ\8dà´\95à´ªàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9fà´¿à´\9fàµ\8dà´\9fà´¿à´²àµ\8dà´². à´¸à´¾à´§àµ\81à´¤ à´¤àµ\86ളിയിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dനതàµ\81വരàµ\86 à´¤à´¾à´´àµ\86à´ªàµ\8dപറയàµ\81à´¨àµ\8dനവയàµ\8dà´\95àµ\8dà´\95àµ\8aà´¨àµ\8dà´¨àµ\81à´\82 à´¤à´¾à´\99àµ\8dà´\95ൾà´\95àµ\8dà´\95àµ\8d à´\87à´®àµ\86യിൽ à´\85à´¯à´\95àµ\8dà´\95àµ\81à´µാൻ സാദ്ധ്യമല്ല.',
+'emailauthenticated' => 'താà´\99àµ\8dà´\95ൾ à´\87à´®àµ\86യിൽ à´µà´¿à´²à´¾à´¸à´\82 $2, $3-à´¨àµ\8d à´¸àµ\8dഥിരàµ\80à´\95à´°ിച്ചതാണ്.',
+'emailnotauthenticated' => 'താà´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´\87à´®àµ\86യിൽ à´µà´¿à´²à´¾à´¸à´\82 à´\87à´¤àµ\81വരàµ\86 à´¸àµ\8dഥിരàµ\80à´\95à´°à´¿à´\95àµ\8dà´\95à´ªàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9fà´¿à´\9fàµ\8dà´\9fà´¿à´²àµ\8dà´². à´¤à´¾à´´àµ\86à´ªàµ\8dപറയàµ\81à´¨àµ\8dനവയàµ\8dà´\95àµ\8dà´\95àµ\8d à´\87à´®àµ\86യിലàµ\81à´\95ൾ à´\85യയàµ\8dà´\95àµ\8dà´\95ാൻ സാദ്ധ്യമല്ല.',
 'noemailprefs' => 'ഈ ക്രമീകരണങ്ങൾ പ്രവർത്തിക്കുവാൻ സാധുവായ ഒരു ഇമെയിൽ വിലാസം ഉൾപ്പെടുത്തുക.',
 'emailconfirmlink' => 'താങ്കളുടെ ഇമെയിൽ വിലാസം സ്ഥിരീകരിക്കുക',
 'invalidemailaddress' => 'ഇമെയിൽ വിലാസം സാധുവായ രൂപത്തിൽ അല്ലാത്തതിനാൽ സ്വീകാര്യമല്ല.
@@ -1292,8 +1294,8 @@ $3 അതിനു കാണിച്ചിരിക്കുന്ന കാര
 'revdelete-hide-user' => 'തിരുത്തുന്ന ആളുടെ ഉപയോക്തൃനാമം/ഐ.പി. വിലാസം',
 'revdelete-hide-restricted' => 'വിവരങ്ങളുടെ നിയന്ത്രണം മറ്റുള്ളവരെ പോലെ കാര്യനിർവാഹകർക്കും ബാധകമാക്കുക',
 'revdelete-radio-same' => '(മാറ്റം വരുത്തരുത്)',
-'revdelete-radio-set' => 'à´\95ാണണà´\82',
-'revdelete-radio-unset' => 'മറയàµ\8dà´\95àµ\8dà´\95à´£à´\82',
+'revdelete-radio-set' => 'മറയàµ\8dà´\95àµ\8dà´\95à´ªàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9fà´µ',
+'revdelete-radio-unset' => 'à´\95ാണാവàµ\81à´¨àµ\8dനവ',
 'revdelete-suppress' => 'സിസോപ്പുകളിൽ നിന്നും മറ്റുള്ളവരിൽ നിന്നും ഈ ഡാറ്റാ മറച്ചു വെക്കുക',
 'revdelete-unsuppress' => 'പുനഃസ്ഥാപിച്ച പതിപ്പുകളിലുള്ള നിയന്ത്രണങ്ങൾ ഒഴിവാക്കുക',
 'revdelete-log' => 'കാരണം:',
@@ -1448,7 +1450,7 @@ $1",
 'mypreferences' => 'ക്രമീകരണങ്ങൾ',
 'prefs-edits' => 'ആകെ തിരുത്തുകൾ:',
 'prefsnologin' => 'ലോഗിൻ ചെയ്തിട്ടില്ല',
-'prefsnologintext' => 'ഉപയോക്തൃക്രമീകരണങ്ങൾ മാറ്റാൻ താങ്കൾ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ലോഗിൻ]</span> ചെയ്തിരിക്കണം.',
+'prefsnologintext2' => 'താങ്കളുടെ ഉപയോക്തൃക്രമീകരണങ്ങൾ സജ്ജീകരിക്കാൻ ദയവായി $1.',
 'changepassword' => 'രഹസ്യവാക്ക് മാറ്റുക',
 'prefs-skin' => 'ദൃശ്യരൂപം',
 'skin-preview' => 'എങ്ങനെയുണ്ടെന്നു കാണുക',
@@ -2169,6 +2171,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 
 'pageswithprop' => 'താളിന്റെ സവിശേഷതകളുള്ള താളുകൾ',
 'pageswithprop-legend' => 'ഒരു താൾ സവിശേഷതയുള്ള താളുകൾ',
+'pageswithprop-prop' => 'ഗുണം:',
 'pageswithprop-submit' => 'പോകൂ',
 
 'doubleredirects' => 'ഇരട്ട തിരിച്ചുവിടലുകൾ',
@@ -2981,7 +2984,7 @@ $1',
 'allmessagesdefault' => 'സ്വതേയുള്ള ഉള്ളടക്കം',
 'allmessagescurrent' => 'നിലവിലുള്ള ഉള്ളടക്കം',
 'allmessagestext' => 'ഇത് മീഡിയവിക്കി നാമമേഖലയിൽ ലഭ്യമായ വ്യവസ്ഥാസന്ദേശങ്ങളുടെ ഒരു പട്ടിക ആണ്‌.
-പ്രാമാണികമായ വിധത്തിൽ മീഡിയവിക്കിയുടെ പ്രാദേശീകരണം താങ്കൾ ഉദ്ദേശിക്കുന്നുവെങ്കിൽ ദയവായി [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation], [//translatewiki.net translatewiki.net] എന്നീ താളുകൾ സന്ദർശിക്കുക.',
+പ്രാമാണികമായ വിധത്തിൽ മീഡിയവിക്കിയുടെ പ്രാദേശീകരണം താങ്കൾ ഉദ്ദേശിക്കുന്നുവെങ്കിൽ ദയവായി [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation], [//translatewiki.net translatewiki.net] എന്നീ താളുകൾ സന്ദർശിക്കുക.',
 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' ബന്ധിച്ചിരിക്കുന്നതു കാരണം ഈ താൾ ഉപയോഗിക്കുവാൻ സാദ്ധ്യമല്ല.",
 'allmessages-filter-legend' => 'അരിപ്പ',
 'allmessages-filter' => 'പുനഃക്രമീകരിച്ച ക്രമത്തിൽ തിരഞ്ഞുവെയ്ക്കുക:',
@@ -3205,6 +3208,7 @@ $1',
 'pageinfo-length' => 'താളിന്റെ നീളം (ബൈറ്റിൽ)',
 'pageinfo-article-id' => 'താളിന്റെ ഐ.ഡി.',
 'pageinfo-language' => 'താളിന്റെ ഉള്ളടക്കത്തിന്റെ ഭാഷ',
+'pageinfo-content-model' => 'താളിന്റെ ഉള്ളടക്ക രീതി',
 'pageinfo-robot-policy' => 'റോബോട്ടുകളുടെ സൂചികാവത്കരണം',
 'pageinfo-robot-index' => 'അനുവദിച്ചിരിക്കുന്നു',
 'pageinfo-robot-noindex' => 'അനുവദിച്ചിട്ടില്ല',
@@ -3290,7 +3294,7 @@ $1',
 'svg-long-desc' => 'എസ്.വി.ജി. പ്രമാണം, നാമമാത്രമായ $1 × $2 പിക്സലുകൾ, പ്രമാണത്തിന്റെ വലിപ്പം: $3',
 'svg-long-desc-animated' => 'ചലിക്കുന്ന എസ്.വി.ജി. പ്രമാണം, നാമമാത്രമായ $1 × $2 പിക്സലുകൾ, പ്രമാണത്തിന്റെ വലിപ്പം: $3',
 'svg-long-error' => 'അസാധുവായ എസ്.വി.ജി. പ്രമാണം: $1',
-'show-big-image' => 'à´ªàµ\82ർണàµ\8dà´£ à´±àµ\86സലàµ\82ഷൻ',
+'show-big-image' => 'à´ªàµ\82ർണàµ\8dà´£ à´µà´²à´¿à´ªàµ\8dà´ªà´\82',
 'show-big-image-preview' => 'ഈ പ്രിവ്യൂവിന്റെ വലിപ്പം: $1.',
 'show-big-image-other' => 'കൂടുതൽ {{PLURAL:$2|റെസലൂഷൻ}}: $1.',
 'show-big-image-size' => '$1 × $2 പിക്സലുകൾ',
@@ -3754,7 +3758,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'ഈ പ്രമാണം ഒരു ബാഹ്യ ആപ്ലിക്കേഷൻ ഉപയോഗിച്ച് തിരുത്തുക',
-'edit-externally-help' => '(കൂടുതൽ വിവരത്തിനു //www.mediawiki.org/wiki/Manual:External_editors കാണുക)',
+'edit-externally-help' => '(കൂടുതൽ വിവരത്തിനു [https://www.mediawiki.org/wiki/Manual:External_editors സജ്ജമാക്കൽ നിർദ്ദേശങ്ങൾ] കാണുക)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'എല്ലാം',
@@ -3943,7 +3947,7 @@ $5
 'version-hook-subscribedby' => 'വരിക്കാരനായത്',
 'version-version' => '(പതിപ്പ് $1)',
 'version-license' => 'അനുമതി',
-'version-poweredby-credits' => "ഈ വിക്കി പ്രവർത്തിക്കാൻ '''[//www.mediawiki.org/ മീഡിയവിക്കി]''' ഉപയോഗിക്കുന്നു. പകർപ്പവകാശം © 2001-$1 $2.",
+'version-poweredby-credits' => "ഈ വിക്കി പ്രവർത്തിക്കാൻ '''[https://www.mediawiki.org/ മീഡിയവിക്കി]''' ഉപയോഗിക്കുന്നു. പകർപ്പവകാശം © 2001-$1 $2.",
 'version-poweredby-others' => 'മറ്റുള്ളവർ',
 'version-poweredby-translators' => 'പരിഭാഷാവിക്കിയിലെ പരിഭാഷകർ',
 'version-credits-summary' => '[[Special:Version|മീഡിയവിക്കിയ്ക്ക്]] നൽകിയ സംഭാവനകളുടെ പേരിൽ താഴെക്കൊടുക്കുന്നവർക്ക് ഞങ്ങൾ നന്ദി പറയുന്നു.',
@@ -3964,7 +3968,7 @@ $5
 # Special:Redirect
 'redirect' => 'പ്രമാണത്താൽ, ഉപയോക്താവിനാൽ അഥവാ നാൾപ്പതിപ്പ് ഐ.ഡി. ചെയ്യുന്ന തിരിച്ചുവിടൽ',
 'redirect-legend' => 'ഒരു പ്രമാണത്തിലോട്ടോ താളിലോട്ടോ ഉള്ള തിരിച്ചുവിടൽ',
-'redirect-summary' => 'ഈ പ്രത്യേക താൾ ഒരു പ്രമാണത്തിലേയ്ക്കോ (പ്രമാണത്തിന്റെ പേര് തന്നിട്ടുണ്ട്), ഒരു താളിലേയ്ക്കോ (നാൾപ്പതിപ്പിന്റെ ഐഡി തന്നിട്ടുണ്ട്), അല്ലെങ്കിൽ ഒരു ഉപയോക്തൃതാളിലേയ്ക്കോ (ഉപയോക്താവിന്റെ സംഖ്യാ ഐ.ഡി. തന്നിട്ടുണ്ട്) തിരിച്ചുവിടുന്നു.',
+'redirect-summary' => 'ഈ പ്രത്യേക താൾ ഒരു പ്രമാണത്തിലേയ്ക്കോ (പ്രമാണത്തിന്റെ പേര് തന്നിട്ടുണ്ട്), ഒരു താളിലേയ്ക്കോ (നാൾപ്പതിപ്പിന്റെ ഐഡി തന്നിട്ടുണ്ട്), അല്ലെങ്കിൽ ഒരു ഉപയോക്തൃതാളിലേയ്ക്കോ (ഉപയോക്താവിന്റെ സംഖ്യാ ഐ.ഡി. തന്നിട്ടുണ്ട്) തിരിച്ചുവിടുന്നു. ഉപയോഗം Usage: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], അല്ലെങ്കിൽ [[{{#Special:Redirect}}/user/101]].',
 'redirect-submit' => 'പോകൂ',
 'redirect-lookup' => 'തേടുക:',
 'redirect-value' => 'വില:',
@@ -3986,8 +3990,8 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'പ്രത്യേക താളുകൾ',
-'specialpages-note' => '----
-* പൊതുവേ ഉപയോഗിക്കുന്ന പ്രത്യേക താളുകൾ.
+'specialpages-note-top' => 'സൂചന',
+'specialpages-note' => '* പൊതുവേ ഉപയോഗിക്കുന്ന പ്രത്യേക താളുകൾ.
 * <strong class="mw-specialpagerestricted">ഉപയോഗം പരിമിതപ്പെടുത്തിയിരിക്കുന്ന പ്രത്യേക താളുകൾ.</strong>
 * <span class="mw-specialpagecached">പ്രാദേശികമായി സംഭരിച്ചുപയോഗിക്കുന്ന പ്രത്യേക താളുകൾ.</span>',
 'specialpages-group-maintenance' => 'പരിചരണം ആവശ്യമായവ',
index a06e144..30d4020 100644 (file)
@@ -1082,7 +1082,6 @@ $1",
 'mypreferences' => 'Миний тохиргоо',
 'prefs-edits' => 'Засваруудын тоо:',
 'prefsnologin' => 'Нэвтрээгүй байна',
-'prefsnologintext' => 'Та хэрэглэгчийн тохиргоогоо тохируулахын тулд <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} нэвтэрсэн байх]</span> ёстой.',
 'changepassword' => 'Нууц үгээ солих',
 'prefs-skin' => 'Арьс',
 'skin-preview' => 'Урьдчилж харах',
@@ -2539,7 +2538,7 @@ $1',
 'allmessagesdefault' => 'Анхны',
 'allmessagescurrent' => 'Одоогийн',
 'allmessagestext' => 'Энэ бол МедиаВики дахь системийн мэдэгдлүүдийн жагсаалт юм.
-МедиаВикиг орчуулах тухай мэдээллийг [//www.mediawiki.org/wiki/Localisation МедиаВикигийн орчуулга], мөн [//translatewiki.net translatewiki.net]-с авна уу.',
+МедиаВикиг орчуулах тухай мэдээллийг [https://www.mediawiki.org/wiki/Localisation МедиаВикигийн орчуулга], мөн [//translatewiki.net translatewiki.net]-с авна уу.',
 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' нь унтарсан байгаа тул '''Special:Allmessages'''-г хэрэглэж болохгүй.",
 'allmessages-filter-legend' => 'Шүүлтүүр',
 'allmessages-filter' => 'Өөрийн болгосон байдлаар нь шүүх:',
@@ -3159,7 +3158,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'Гадны программыг ашиглан энэ файлыг засварлах',
-'edit-externally-help' => '(Нэмэлт мэдээллийг [//www.mediawiki.org/wiki/Manual:External_editors тохируулгын зааврын] хуудаснаас харна уу)',
+'edit-externally-help' => '(Нэмэлт мэдээллийг [https://www.mediawiki.org/wiki/Manual:External_editors тохируулгын зааврын] хуудаснаас харна уу)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'бүгдийг',
@@ -3327,7 +3326,7 @@ $5
 'version-hook-subscribedby' => 'Захиалсан:',
 'version-version' => '(Хувилбар $1)',
 'version-license' => 'Лиценз',
-'version-poweredby-credits' => "Энэхүү викиг '''[//www.mediawiki.org/ MediaWiki]''' програмаар ажиллуулдаг, зохиогчийн эрх © 2001-$1 $2.",
+'version-poweredby-credits' => "Энэхүү викиг '''[https://www.mediawiki.org/ MediaWiki]''' програмаар ажиллуулдаг, зохиогчийн эрх © 2001-$1 $2.",
 'version-poweredby-others' => 'бусад',
 'version-software' => 'Суулгасан программ',
 'version-software-product' => 'Бүтээгдэхүүн',
@@ -3346,8 +3345,7 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'Тусгай хуудсууд',
-'specialpages-note' => '----
-* Ердийн тусгай хуудсууд.
+'specialpages-note' => '* Ердийн тусгай хуудсууд.
 * <strong class="mw-specialpagerestricted">Хориотой тусгай хуудсууд.</strong>',
 'specialpages-group-maintenance' => 'Засвар үйлчилгээний тайлангууд',
 'specialpages-group-other' => 'Бусад тусгай хуудсууд',
index 7a462ba..928f77b 100644 (file)
@@ -563,7 +563,7 @@ $messages = array(
 $1',
 'pool-timeout' => 'ताळ्यासाठी वाट पाहण्याची वेळ संपली',
 'pool-queuefull' => 'सर्व्हरवर ताण आहे.',
-'pool-errorunknown' => 'à¤\85परिà¤\9aित à¤¤à¥\8dरà¥\82टी',
+'pool-errorunknown' => 'à¤\85परिà¤\9aित à¤¤à¥\8dरà¥\81टी',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
 'aboutsite' => '{{SITENAME}}बद्दल',
@@ -593,13 +593,13 @@ $1',
 
 'ok' => 'ठीक',
 'retrievedfrom' => '"$1" पासून हुडकले',
-'youhavenewmessages' => 'तुमच्यासाठी $1 ($2) आहे.',
+'youhavenewmessages' => 'तुमच्यासाठी $1 आहे. ($2)',
 'newmessageslink' => 'नवीन संदेश',
 'newmessagesdifflink' => 'ताजा बदल',
-'youhavenewmessagesfromusers' => 'à¤\86पलà¥\87पाशà¥\80  $1à¤\9aà¥\8dया à¤ªà¤¾à¤¸à¥\82न  {{PLURAL:$3|वà¥\87à¤\97ळà¥\87 à¤¸à¤¦à¤¸à¥\8dय|$3 à¤¸à¤¦à¤¸à¥\8dय}}($2)à¤\86हà¥\87त.',
-'youhavenewmessagesmanyusers' => ' आपलेपाशी ($2) सदस्यांपासून $1 आहेत.',
-'newmessageslinkplural' => '{{PLURAL:$1|a new message|नविन संदेश}}',
-'newmessagesdifflinkplural' => 'माà¤\97िल {{PLURAL:$1|बदल}}',
+'youhavenewmessagesfromusers' => 'तà¥\81मà¤\9aà¥\8dयासाठà¥\80 {{PLURAL:$3|à¤\87तर à¤¸à¤¦à¤¸à¥\8dयाà¤\95डà¥\82न|$3 à¤¸à¤¦à¤¸à¥\8dयाà¤\82à¤\95डà¥\82न}} $1 à¤\86हà¥\87त. ($2)',
+'youhavenewmessagesmanyusers' => 'तुमच्यासाठी बऱ्याच सदस्यांकडून $1 आहेत. ($2)',
+'newmessageslinkplural' => '{{PLURAL:$1|नवीन संदेश|नवीन संदेश}}',
+'newmessagesdifflinkplural' => 'माà¤\97à¥\80ल {{PLURAL:$1|बदल}}',
 'youhavenewmessagesmulti' => '$1 वर तुमच्यासाठी नवीन संदेश आहेत.',
 'editsection' => 'संपादन',
 'editold' => 'संपादन',
@@ -612,13 +612,13 @@ $1',
 'hidetoc' => 'लपवा',
 'collapsible-collapse' => 'निपात करा',
 'collapsible-expand' => 'विस्तार',
-'thisisdeleted' => '$1à¤\9aà¥\87 à¤\85वलà¥\8bà¤\95न à¤\95िà¤\82वा à¤ªà¥\82नर्स्थापन करायचे ?',
+'thisisdeleted' => '$1à¤\9aà¥\87 à¤\85वलà¥\8bà¤\95न à¤\95िà¤\82वा à¤ªà¥\81नर्स्थापन करायचे ?',
 'viewdeleted' => ' $1चे अवलोकन करायचे?',
 'restorelink' => '{{PLURAL:$1|एक वगळलेले संपादन|$1 वगळलेली संपादने}}',
-'feedlinks' => 'पà¥\8dरदाय (Feed):',
+'feedlinks' => 'रसद (Feed) :',
 'feed-invalid' => 'अयोग्य रसद नोंदणी (Invalid subscription feed type).',
-'feed-unavailable' => 'सिà¤\82डà¥\80à¤\95à¥\87शन à¤«à¥\80ड उपलब्ध नाहीत',
-'site-rss-feed' => '$1 à¤\86रà¤\8fसà¤\8fस à¤«à¥\80ड',
+'feed-unavailable' => 'सिà¤\82डà¥\80à¤\95à¥\87शन à¤°à¤¸à¤¦ उपलब्ध नाहीत',
+'site-rss-feed' => '$1 à¤\86रà¤\8fसà¤\8fस à¤°à¤¸à¤¦',
 'site-atom-feed' => '$1 ऍटम रसद (Atom Feed)',
 'page-rss-feed' => '"$1" आर.एस.एस.रसद (RSS Feed)',
 'page-atom-feed' => '"$1" ऍटम रसद (Atom Feed)',
@@ -801,8 +801,8 @@ $2',
 'createacct-benefit-body1' => '{{PLURAL:$1|edit|संपादने}}',
 'createacct-benefit-body2' => '{{PLURAL:$1|लेख}}',
 'createacct-benefit-body3' => 'अलीकडील {{PLURAL:$1|योगदानकर्ता|योगदानकर्ते}}',
-'badretype' => 'à¤\86पण à¤\9fाà¤\95लà¥\87ला à¤ªà¤°à¤µà¤²à¥\80à¤\9aा à¤¶à¤¬à¥\8dद à¤\9cà¥\81ळत à¤¨à¤¾à¤¹à¥\80.',
-'userexists' => 'à¤\86पण टाकलेले सदस्यनाम पूर्वीच वापरात आहे.
+'badretype' => 'तà¥\81मà¥\8dहà¥\80 à¤\9fाà¤\95लà¥\87लà¥\87 à¤ªà¤°à¤µà¤²à¥\80à¤\9aà¥\87 à¤¶à¤¬à¥\8dद à¤\9cà¥\81ळत à¤¨à¤¾à¤¹à¥\80त.',
+'userexists' => 'तà¥\81मà¥\8dहà¥\80 टाकलेले सदस्यनाम पूर्वीच वापरात आहे.
 कृपया वेगळे सदस्यनाम निवडा.',
 'loginerror' => 'सनोंद-प्रवेशात चूक झाली आहे',
 'createacct-error' => 'खाते तयार करण्यात चुकी',
@@ -1412,7 +1412,6 @@ $1",
 'mypreferences' => 'पसंतीक्रम',
 'prefs-edits' => 'संपादनांची संख्या:',
 'prefsnologin' => 'प्रवेश केलेला नाही',
-'prefsnologintext' => 'तुम्हाला सदस्य पसंती बदलण्यासाठी <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} प्रवेश]</span> करावा लागेल.',
 'changepassword' => 'परवलीचा शब्द बदला',
 'prefs-skin' => 'त्वचा',
 'skin-preview' => 'झलक',
@@ -3670,7 +3669,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'बाहेरील संगणक प्रणाली वापरून ही संचिका संपादित करा.',
-'edit-externally-help' => 'अधिक माहितीसाठी  [//www.mediawiki.org/wiki/Manual:External_editors स्थापन करण्याच्या सूचना] येथे पहा.',
+'edit-externally-help' => 'अधिक माहितीसाठी  [https://www.mediawiki.org/wiki/Manual:External_editors स्थापन करण्याच्या सूचना] येथे पहा.',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'सर्व',
@@ -3846,7 +3845,7 @@ $5
 'version-hook-subscribedby' => 'वर्गणीदार',
 'version-version' => '(आवृत्ती $1)',
 'version-license' => 'परवाना',
-'version-poweredby-credits' => "हा विकी '''[//www.mediawiki.org/ मीडियाविकी]'''द्वारे संचालित आहे, प्रताधिकारित © २००१-$1 $2.",
+'version-poweredby-credits' => "हा विकी '''[https://www.mediawiki.org/ मीडियाविकी]'''द्वारे संचालित आहे, प्रताधिकारित © २००१-$1 $2.",
 'version-poweredby-others' => 'इतर',
 'version-poweredby-translators' => 'ट्रांसलेटविकि.नेट वरील भाषांतरकार',
 'version-credits-summary' => 'आम्ही खालील व्यक्तींना, [[Special:Version|मिडियाविकि]]वर त्यांनी दिलेल्या योगदानामुळे, मान्यता देऊ ईच्छितो.',
index dfef63f..e932cfc 100644 (file)
@@ -1315,7 +1315,6 @@ Cuba berikan awalan ''all:'' untuk mencari semua kandungan (termasuk laman perbi
 'mypreferences' => 'Keutamaan',
 'prefs-edits' => 'Jumlah suntingan:',
 'prefsnologin' => 'Belum log masuk',
-'prefsnologintext' => 'Anda hendaklah <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} log masuk]</span> terlebih dahulu untuk menetapkan keutamaan.',
 'changepassword' => 'Tukar kata laluan',
 'prefs-skin' => 'Rupa',
 'skin-preview' => 'Pralihat',
@@ -2856,7 +2855,7 @@ Dalam pilihan kedua tadi, anda juga boleh menggunakan pautan, umpamanya [[{{#Spe
 'allmessagesdefault' => 'Teks mesej asal',
 'allmessagescurrent' => 'Teks pesanan semasa',
 'allmessagestext' => 'Ini ialah senarai pesanan sistem yang terdapat dalam ruang nama MediaWiki.
-Sila lawat [//www.mediawiki.org/wiki/Localisation Penyetempatan MediaWiki] dan [//translatewiki.net translatewiki.net] sekiranya anda mahu menyumbang dalam menyetempatkan dan menterjemah perisian MediaWiki.',
+Sila lawat [https://www.mediawiki.org/wiki/Localisation Penyetempatan MediaWiki] dan [//translatewiki.net translatewiki.net] sekiranya anda mahu menyumbang dalam menyetempatkan dan menterjemah perisian MediaWiki.',
 'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' tidak boleh digunakan kerana '''\$wgUseDatabaseMessages''' dipadamkan.",
 'allmessages-filter-legend' => 'Penapisan',
 'allmessages-filter' => 'Tapis berdasarkan keadaan penempahan:',
@@ -3618,7 +3617,7 @@ Ruangan-ruangan yang lain pula akan disembunyikan pada asali.
 
 # External editor support
 'edit-externally' => 'Sunting fail ini menggunakan perisian luar',
-'edit-externally-help' => '(Lihat [//www.mediawiki.org/wiki/Manual:External_editors arahan pemasangan] untuk maklumat lanjut)',
+'edit-externally-help' => '(Lihat [https://www.mediawiki.org/wiki/Manual:External_editors arahan pemasangan] untuk maklumat lanjut)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'semua',
@@ -3809,7 +3808,7 @@ Anda juga boleh [[Special:EditWatchlist|menggunakan penyunting piawai]].',
 'version-hook-subscribedby' => 'Dilanggan oleh',
 'version-version' => '(Versi $1)',
 'version-license' => 'Lesen',
-'version-poweredby-credits' => "Wiki ini dikuasakan oleh '''[//www.mediawiki.org/ MediaWiki]''', hak cipta © 2001-$1 $2.",
+'version-poweredby-credits' => "Wiki ini dikuasakan oleh '''[https://www.mediawiki.org/ MediaWiki]''', hak cipta © 2001-$1 $2.",
 'version-poweredby-others' => 'penyumbang-penyumbang lain',
 'version-poweredby-translators' => 'para penterjemah translatewiki.net',
 'version-credits-summary' => 'Kami ingin mengucapkan sekalung budi kepada mereka yang berikut atas sumbangan mereka keada [[Special:Version|MediaWiki]].',
@@ -3852,8 +3851,7 @@ Anda patut telah menerima [{{SERVER}}{{SCRIPTPATH}}/COPYING sebuah salinan bagi
 
 # Special:SpecialPages
 'specialpages' => 'Laman khas',
-'specialpages-note' => '----
-* Laman khas biasa.
+'specialpages-note' => '* Laman khas biasa.
 * <span class="mw-specialpagerestricted">Laman khas terhad.</span>
 * <span class="mw-specialpagecached">Laman khas tercache (mungkin lapuk).</span>',
 'specialpages-group-maintenance' => 'Laporan penyenggaraan',
index a1bea2d..d034f5f 100644 (file)
@@ -1319,7 +1319,6 @@ Innota però li l-werreja tal-kontenut ta' {{SITENAME}} f'dawn is-siti, jistgħu
 'mypreferences' => 'Preferenzi',
 'prefs-edits' => "Numru ta' modifiki:",
 'prefsnologin' => 'Għadek ma dħaltx ġewwa',
-'prefsnologintext' => 'Sabiex tkun tista\' tippersonalizza l-preferenzi huwa neċessarju li tidħol fil-<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} kont]</span>.',
 'changepassword' => 'Ibdel il-password',
 'prefs-skin' => 'Aspett grafiku (skin)',
 'skin-preview' => 'dehra proviżorja',
@@ -3466,7 +3465,7 @@ Oħrajn jiġu moħbija kif inhu definit oriġinarjament.
 
 # External editor support
 'edit-externally' => "Immodifika dan il-fajl b'użu ta' applikazzjoni esterna",
-'edit-externally-help' => '(Għal aktar informazzjoni ara l-[//www.mediawiki.org/wiki/Manual:External_editors istruzzjonijiet])',
+'edit-externally-help' => '(Għal aktar informazzjoni ara l-[https://www.mediawiki.org/wiki/Manual:External_editors istruzzjonijiet])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'kollha',
@@ -3666,7 +3665,7 @@ Inti tista' wkoll tuża' l-[[Special:EditWatchlist|editur bl-interfaċċa standa
 'version-hook-subscribedby' => 'Reġistrat minn',
 'version-version' => '(Verżjoni $1)',
 'version-license' => 'Liċenzja',
-'version-poweredby-credits' => "Din il-wiki hija operata minn '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Din il-wiki hija operata minn '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'oħrajn',
 'version-license-info' => "MediaWiki huwa softwer b'xejn; inti tista' tqassmu mill-ġdid u/jew timmodifikah taħt it-termini tal-GNU General Public License, kif ippubblikata mill-Free Software Foundation; jew it-2 verżjoni tal-Liċenzja, jew (skont l-għażla tiegħek) kwalunkwe verżjoni suċċessiva.
 
index 8a3fb50..d2284fc 100644 (file)
@@ -1153,7 +1153,7 @@ Causo l fexeiro tenga sido demudado a partir de l sou stado oureginal, alguns de
 
 # External editor support
 'edit-externally' => 'Eiditar este fexeiro outelizando ua aplicaçon sterna',
-'edit-externally-help' => '(Bei las [//www.mediawiki.org/wiki/Manual:External_editors anstruçones de anstalaçon] pa mais anformaçon).',
+'edit-externally-help' => '(Bei las [https://www.mediawiki.org/wiki/Manual:External_editors anstruçones de anstalaçon] pa mais anformaçon).',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'todas',
index 4edacf7..df5b28e 100644 (file)
@@ -186,11 +186,11 @@ $messages = array(
 'hidden-categories' => '{{PLURAL:$1|ဝှက်ထားသော ကဏ္ဍ|ဝှက်ထားသော ကဏ္ဍများ}}',
 'hidden-category-category' => 'ဝှက်ထားသော ကဏ္ဍများ',
 'category-subcat-count' => '{{PLURAL:$2|ဤကဏ္ဍတွင် အောက်ပါ ကဏ္ဍခွဲသာ ရှိသည်။ |ဤကဏ္ဍတွင် စုစုပေါင်း $2 ခု အနက်မှ အောက်ပါ {{PLURAL:$1|ကဏ္ဍခွဲ|ကဏ္ဍခွဲ $1 ခု}} ရှိသည်။}}',
-'category-subcat-count-limited' => 'ဤကဏ္ဍတွင် အောက်ပါ {PLURAL:$1|ကဏ္ဍခွဲ|$1 ကဏ္ဍခွဲများ}} ရှိသည်။',
+'category-subcat-count-limited' => 'ဤကဏ္ဍတွင် အောက်ပါ {{PLURAL:$1|ကဏ္ဍခွဲ|$1 ကဏ္ဍခွဲများ}} ရှိသည်။',
 'category-article-count' => '{{PLURAL:$2|ဤကဏ္ဍတွင် အောက်ပါစာမျက်နှာသာ ရှိသည်။|စုစုပေါင်း $2 အနက်မှ အောက်ပါ {{PLURAL:$1|စာမျက်နှာသည်|စာမျက်နှာ $1 ခုသည်}} ဤကဏ္ဍတွင် ရှိသည်။}}',
 'category-article-count-limited' => 'အောက်ပါ{{PLURAL:$1|စာမျက်နှာ|$1 စာမျက်နှာများ}} သည် လက်ရှိကဏ္ဍတွင် ရှိသည်။',
 'category-file-count' => '{{PLURAL:$2|ဤကဏ္ဍတွင် အောက်ပါဖိုင်သာ ရှိသည်။|စုစုပေါင်း $2 အနက်မှ အောက်ပါ {{PLURAL:$1|ဖိုင် သည်|ဖိုင် $1 ခုသည်}} ဤကဏ္ဍတွင် ရှိသည်။}}',
-'category-file-count-limited' => 'အောက်ပါ {PLURAL:$1|စာမျက်နှာ|$1 စာမျက်နှာများ}} သည် လက်ရှိစာမျက်နှာတွင် ရှိသည်။',
+'category-file-count-limited' => 'အောက်ပါ {{PLURAL:$1|စာမျက်နှာ|$1 စာမျက်နှာများ}} သည် လက်ရှိစာမျက်နှာတွင် ရှိသည်။',
 'listingcontinuesabbrev' => 'ပံ့ပိုး',
 'index-category' => 'အက္ခရာစဉ် စာမျက်နှာများ',
 'noindex-category' => 'အက္ခရာစဉ် စာမျက်နှာများမရှိ',
@@ -1783,7 +1783,7 @@ Your e-mail address is not revealed when other users contact you.
 
 # External editor support
 'edit-externally' => 'ပြင်ပ application တစ်ခုခုကိုသုံး၍ ဤဖိုင်ကို ပြင်ရန်',
-'edit-externally-help' => '(နောက်ထပ်သတင်းအချက်အလက်များအတွက်[//www.mediawiki.org/wiki/Manual:External_editors တပ်ဆင်မှု လမ်းညွှန်များ] ကို ကြည့်ရန်)',
+'edit-externally-help' => '(နောက်ထပ်သတင်းအချက်အလက်များအတွက်[https://www.mediawiki.org/wiki/Manual:External_editors တပ်ဆင်မှု လမ်းညွှန်များ] ကို ကြည့်ရန်)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'အားလုံး',
index e24ad45..b42e051 100644 (file)
@@ -890,7 +890,6 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'mypreferences' => 'Аравтомат',
 'prefs-edits' => 'Зяроксть витнезь-петнезь:',
 'prefsnologin' => 'Эзить сова',
-'prefsnologintext' => 'Эряви <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} совамс]</span> аравтоматнень ладсемга.',
 'changepassword' => 'Салавань валонь полавтома',
 'prefs-skin' => 'Неемань ладсема',
 'skin-preview' => 'Васнянь неевтезэ',
@@ -2081,7 +2080,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 
 # External editor support
 'edit-externally' => 'Витнемс-петнемс те файланть, тевс нолдазь ушо ёнксонь программанть',
-'edit-externally-help' => '(Вант [//www.mediawiki.org/wiki/Manual:External_editors аравтома инструкциятнень] седе ламо информациянть кис.)',
+'edit-externally-help' => '(Вант [https://www.mediawiki.org/wiki/Manual:External_editors аравтома инструкциятнень] седе ламо информациянть кис.)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'весе',
index a9224e7..8977481 100644 (file)
@@ -1471,8 +1471,7 @@ Niman tihuelīti [[Special:UserLogin|timocalaqui]] auh ticpactiāz huiquitica.',
 
 # Special:SpecialPages
 'specialpages' => 'Nònkuâkìskàtlaìxtlapaltìn',
-'specialpages-note' => '----
-* Yeliztli nōncuahquīzqui āmatl.
+'specialpages-note' => '* Yeliztli nōncuahquīzqui āmatl.
 * <span class="mw-specialpagerestricted">Tlaquīxtīlli nōncuahquīzqui āmatl.</span>
 * <span class="mw-specialpagecached">Tlatlātīlli nōncuahquīzqui āmatl (aocmo monemitīa).</span>',
 'specialpages-group-other' => 'Oksẻki nònkuâkìskàtlaìxtlapaltìn',
index a9eba0c..432caf8 100644 (file)
@@ -208,7 +208,7 @@ $messages = array(
 'create-this-page' => 'Khai-sí siá chit ia̍h',
 'delete' => 'Thâi',
 'deletethispage' => 'Thâi chit ia̍h',
-'undelete_short' => 'Kiù {{PLURAL:$1|$1|$1} ê siu-kái',
+'undelete_short' => 'Kiù {{PLURAL:$1|$1|$1}} ê siu-kái',
 'viewdeleted_short' => 'Khoàⁿ {{PLURAL:$1|chi̍t-ê thâi tiàu--ê pian-chi̍p|$1 ê thâi tiàu--ê pian-chi̍p}}',
 'protect' => 'Pó-hō·',
 'protect_change' => 'kái-piàn',
index 042cd49..649b386 100644 (file)
@@ -785,7 +785,7 @@ Also see [[Special:WantedCategories|wanted categories]].",
 'exif-subjectdistancerange-0' => 'Scanusciuta',
 
 # External editor support
-'edit-externally-help' => "Pe piglià cchiù nfromma veré 'e [//www.mediawiki.org/wiki/Manual:External_editors struzione] ('n ngrese)",
+'edit-externally-help' => "Pe piglià cchiù nfromma veré 'e [https://www.mediawiki.org/wiki/Manual:External_editors struzione] ('n ngrese)",
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tutte',
index cd16f34..7b5bc89 100644 (file)
@@ -324,12 +324,12 @@ $messages = array(
 'tog-hidepatrolled' => 'Skjul patruljerte redigeringer i siste endringer',
 'tog-newpageshidepatrolled' => 'Skjul patruljerte sider fra listen over nye sider',
 'tog-extendwatchlist' => 'Utvid overvåkningslisten til å vise alle endringer, ikke bare de siste',
-'tog-usenewrc' => 'Grupper endringer i siste endringer og overvåkingslistte (krever JavaScript)',
+'tog-usenewrc' => 'Gruppeendringer per side i siste endringer samt overvåkingsliste',
 'tog-numberheadings' => 'Autonummerer overskrifter',
-'tog-showtoolbar' => 'Vis verktøylinje (krever JavaScript)',
-'tog-editondblclick' => 'Rediger sider ved å dobbeltklikke (krever JavaScript)',
+'tog-showtoolbar' => 'Vis verktøylinje',
+'tog-editondblclick' => 'Rediger sider ved å dobbeltklikke',
 'tog-editsection' => 'Rediger avsnitt ved hjelp av [rediger]-lenke',
-'tog-editsectiononrightclick' => 'Rediger avsnitt ved å høyreklikke på avsnittsoverskrift (JavaScript)',
+'tog-editsectiononrightclick' => 'Rediger avsnitt ved å høyreklikke på avsnittsoverskrift',
 'tog-showtoc' => 'Vis innholdsfortegnelse (for sider med flere enn tre avsnitt)',
 'tog-rememberpassword' => 'Husk meg i denne nettleseren (i høyst $1 {{PLURAL:$1|dag|dager}})',
 'tog-watchcreations' => 'Legg til sider jeg oppretter og filer jeg laster opp i min overvåkingsliste',
@@ -347,7 +347,7 @@ $messages = array(
 'tog-shownumberswatching' => 'Vis antall brukere som overvåker',
 'tog-oldsig' => 'Nåværende signatur:',
 'tog-fancysig' => 'Behandle signaturen som wikitekst (uten automatisk lenke)',
-'tog-uselivepreview' => 'Bruk levende forhåndsvisning (eksperimentell JavaScript)',
+'tog-uselivepreview' => 'Bruk levende forhåndsvisning (eksperimentelt)',
 'tog-forceeditsummary' => 'Advar meg når jeg ikke gir noen redigeringsforklaring',
 'tog-watchlisthideown' => 'Skjul mine endringer fra overvåkningslisten',
 'tog-watchlisthidebots' => 'Skjul robotendringer fra overvåkningslisten',
@@ -564,7 +564,7 @@ $1',
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
 'aboutsite' => 'Om {{SITENAME}}',
 'aboutpage' => 'Project:Om',
-'copyright' => 'Innholdet er tilgjengelig under $1.',
+'copyright' => 'Innholdet er tilgjengelig under $1 med mindre annet er spesifikt angitt.',
 'copyrightpage' => '{{ns:project}}:Opphavsrett',
 'currentevents' => 'Aktuelt',
 'currentevents-url' => 'Project:Aktuelt',
@@ -827,13 +827,13 @@ og fortsette å bruke det gamle passordet.',
 'passwordsent' => 'Et nytt passord har blitt sendt til e-postadressen registrert for «$1».
 Logg inn når du har mottatt det nye passordet.',
 'blocked-mailpassword' => 'IP-adressen din er blokkert fra å redigere, og for å forhindre misbruk kan du heller ikke bruke funksjonen som gir deg nytt passord.',
-'eauthentsent' => 'En bekreftelsesmelding ble sendt til gitte e-postadresse. Før andre e-poster kan sendes til kontoen må du følge instruksjonene i e-posten for å bekrefte at kontoen faktisk er din.',
+'eauthentsent' => 'En bekreftelsesmelding ble sendt til oppgitt e-postadresse. Før andre e-poster kan sendes til kontoen må du følge instruksjonene i e-posten for å bekrefte at kontoen faktisk er din.',
 'throttled-mailpassword' => 'En passordtilbakestillingsepost har allerede blitt sendt for mindre enn {{PLURAL:$1|en time|$1 timer}} siden.
 For å forhindre misbruk kan kun én passordtilbakestillingsepost sendes per {{PLURAL:$1|time|$1 timer}}.',
 'mailerror' => 'Feil under sending av e-post: $1',
 'acct_creation_throttle_hit' => 'Gjester med samme IP-adresse som deg har opprettet {{PLURAL:$1|én konto|$1 kontoer}} det siste døgnet, og det er ikke tillatt å opprette flere.
 Som et resultat kan det ikke opprettes flere kontoer fra denne IP-adressen.',
-'emailauthenticated' => 'Din e-postadresse ble bekreftet $2 $3.',
+'emailauthenticated' => 'Din e-postadresse ble bekreftet den $2 kl. $3.',
 'emailnotauthenticated' => 'Din e-postadresse er ikke bekreftet. Du vil ikke kunne motta e-post for noen av følgende egenskaper.',
 'noemailprefs' => 'Oppgi en e-postadresse for at disse funksjonene skal fungere.',
 'emailconfirmlink' => 'Bekreft e-postadressen din.',
@@ -881,7 +881,7 @@ Du kan ha allerede byttet passordet, eller bedt om et nytt midlertidig passord.'
 'resetpass-abort-generic' => 'Endring av passord har blitt avbrutt av en utvidelse.',
 
 # Special:PasswordReset
-'passwordreset' => 'Passordresetting',
+'passwordreset' => 'Tilbakestilling av passord',
 'passwordreset-text-one' => 'Fyll ut skjemaet for å tilbakestille passordet',
 'passwordreset-text-many' => '{{PLURAL:$1|Fyll inn et av datafeltene for å tilbakestille passordet ditt.}}',
 'passwordreset-legend' => 'Nullstill passord',
@@ -1278,7 +1278,7 @@ Andre administratorer på {{SITENAME}} vil fortsatt kunne se det skjulte innhold
 'revdelete-hide-image' => 'Skjul filinnhold',
 'revdelete-hide-name' => 'Skjul handling og mål',
 'revdelete-hide-comment' => 'Skjul redigeringsforklaring',
-'revdelete-hide-user' => 'Skjul bidragsyters brukernavn eller IP',
+'revdelete-hide-user' => 'Skjul bidragsyters brukernavn eller IP-adresse',
 'revdelete-hide-restricted' => 'La disse begrensningene gjelde for administratorer også',
 'revdelete-radio-same' => '(ikke endre)',
 'revdelete-radio-set' => 'Ja',
@@ -1437,7 +1437,6 @@ For å søke i alle, bruk prefikset ''all:'' (inkluderer diskusjonssider, maler,
 'mypreferences' => 'Innstillinger',
 'prefs-edits' => 'Antall redigeringer:',
 'prefsnologin' => 'Ikke logget inn',
-'prefsnologintext' => 'Du må være <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} logget inn]</span> for å endre brukerinnstillingene.',
 'changepassword' => 'Endre passord',
 'prefs-skin' => 'Utseende',
 'skin-preview' => 'Forhåndsvisning',
@@ -1462,7 +1461,7 @@ For å søke i alle, bruk prefikset ''all:'' (inkluderer diskusjonssider, maler,
 'prefs-rendering' => 'Utseende',
 'saveprefs' => 'Lagre',
 'resetprefs' => 'Tilbakestill ulagrede endringer',
-'restoreprefs' => 'Tilbakestill til standardinnstillinger overalt',
+'restoreprefs' => 'Tilbakestill alt til standardinnstillinger',
 'prefs-editing' => 'Redigering',
 'rows' => 'Rader:',
 'columns' => 'Kolonner',
@@ -1708,8 +1707,8 @@ Informasjonen vil være offentlig.',
 'action-block' => 'blokkere denne brukeren fra å redigere',
 'action-protect' => 'endre denne sidens beskyttelsesnivåer',
 'action-rollback' => 'raskt tilbakestille endringene til den siste brukeren som redigerte en bestemt side',
-'action-import' => 'importere denne siden fra en annen wiki',
-'action-importupload' => 'importere denne siden fra en opplastet fil',
+'action-import' => 'importere sider fra en annen wiki',
+'action-importupload' => 'importere sider fra en filopplasting',
 'action-patrol' => 'merke andre brukeres redigeringer som patruljert',
 'action-autopatrol' => 'merke redigeringene dine som patruljert',
 'action-unwatchedpages' => 'vise listen over uovervåkede sider',
@@ -1758,7 +1757,7 @@ Informasjonen vil være offentlig.',
 'rc_categories_any' => 'Alle',
 'rc-change-size-new' => '$1 {{PLURAL:$1|byte}} etter endring',
 'newsectionsummary' => '/* $1 */ ny seksjon',
-'rc-enhanced-expand' => 'Vis detaljer (krever JavaScript)',
+'rc-enhanced-expand' => 'Vis detaljer',
 'rc-enhanced-hide' => 'Skjul detaljer',
 'rc-old-title' => 'opprinnelig opprettet som «$1»',
 
@@ -2502,9 +2501,11 @@ Se $2 for en oversikt over de siste slettingene.',
 'deleteotherreason' => 'Annen/utdypende grunn:',
 'deletereasonotherlist' => 'Annen grunn',
 'deletereason-dropdown' => '* Vanlige grunner for sletting
-** På forfatters forespørsel
+** Spam
+** Vandalisme
 ** Opphavsrettsbrudd
-** Vandalisme',
+** På forfatters forespørsel 
+** Råtten omdirigering',
 'delete-edit-reasonlist' => 'Rediger begrunnelser for sletting',
 'delete-toobig' => 'Denne siden har en stor redigeringshistorikk, med over {{PLURAL:$1|$1&nbsp;revisjon|$1&nbsp;revisjoner}}. Muligheten til å slette slike sider er begrenset for å unngå utilsiktet forstyrring av {{SITENAME}}.',
 'delete-warning-toobig' => 'Denne siden har en stor redigeringshistorikk, med over {{PLURAL:$1|$1&nbsp;revisjon|$1&nbsp;revisjoner}}. Sletting av denne siden kan forstyrre databasen til {{SITENAME}}; vær varsom.',
@@ -3735,7 +3736,7 @@ Rotert 90° mot klokka og vridd vertikalt',
 
 # External editor support
 'edit-externally' => 'Rediger denne filen med et eksternt program',
-'edit-externally-help' => '(Se [//www.mediawiki.org/wiki/Manual:External_editors oppsettsinstruksjonene] for mer informasjon)',
+'edit-externally-help' => '(Se [https://www.mediawiki.org/wiki/Manual:External_editors oppsettsinstruksjonene] for mer informasjon)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'alle',
@@ -3938,7 +3939,7 @@ Du kan også [[Special:EditWatchlist|bruke standardverktøyet]].',
 'version-hook-subscribedby' => 'Brukes av',
 'version-version' => '(versjon $1)',
 'version-license' => 'Lisens',
-'version-poweredby-credits' => "Denne wikien er drevet av '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Denne wikien er drevet av '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'andre',
 'version-poweredby-translators' => 'translatewiki.net-oversettere',
 'version-credits-summary' => 'Vi ønsker å takke følgende personer for deres bidrag til [[Special:Version|MediaWiki]].',
@@ -3979,8 +3980,7 @@ Du skal ha mottatt [{{SERVER}}{{SCRIPTPATH}}/COPYING en kopi av GNU General Publ
 
 # Special:SpecialPages
 'specialpages' => 'Spesialsider',
-'specialpages-note' => '----
-* Normale spesialsider.
+'specialpages-note' => '* Normale spesialsider.
 * <span class="mw-specialpagerestricted">Spesialsider med begrenset tilgang.</span>
 * <span class="mw-specialpagecached">Spesialsider som oppdateres periodisk (kan være foreldede).</span>',
 'specialpages-group-maintenance' => 'Vedlikeholdsrapporter',
index b981c5a..68cade5 100644 (file)
@@ -1119,7 +1119,6 @@ de aver nich jümmer den aktuellsten Stand weerspegelt.<p>',
 'mypreferences' => 'För mi Instellen',
 'prefs-edits' => 'Wo faken du in dit Wiki Sieden ännert hest:',
 'prefsnologin' => 'Nich anmellt',
-'prefsnologintext' => 'Du musst <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} anmellt]</span> wesen, dat du dien Instellen ännern kannst.',
 'changepassword' => 'Passwoort ännern',
 'prefs-skin' => 'Utsehn vun de Steed',
 'skin-preview' => 'Vörschau',
@@ -2859,7 +2858,7 @@ Wiedere warrt standardmatig nich anwiest:
 
 # External editor support
 'edit-externally' => 'Änner disse Datei mit en extern Programm',
-'edit-externally-help' => '(Lees de [//www.mediawiki.org/wiki/Manual:External_editors Installatschoonshelp] wenn du dor mehr to weten wullt)',
+'edit-externally-help' => '(Lees de [https://www.mediawiki.org/wiki/Manual:External_editors Installatschoonshelp] wenn du dor mehr to weten wullt)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'alle',
@@ -3003,7 +3002,7 @@ Du kannst ok de [[Special:EditWatchlist|normale Sied to’n Ännern]] bruken.',
 'version-hook-subscribedby' => 'Opropen vun',
 'version-version' => '(Version $1)',
 'version-license' => 'Lizenz',
-'version-poweredby-credits' => "Dit Wiki bruukt '''[//www.mediawiki.org/ MediaWiki]''', Copyright © 2001–$1 $2.",
+'version-poweredby-credits' => "Dit Wiki bruukt '''[https://www.mediawiki.org/ MediaWiki]''', Copyright © 2001–$1 $2.",
 'version-poweredby-others' => 'annere',
 'version-software' => 'Installeerte Software',
 'version-software-product' => 'Produkt',
@@ -3022,8 +3021,7 @@ Du kannst ok de [[Special:EditWatchlist|normale Sied to’n Ännern]] bruken.',
 
 # Special:SpecialPages
 'specialpages' => 'Sünnerliche Sieden',
-'specialpages-note' => '----
-* Normale Spezialsieden
+'specialpages-note' => '* Normale Spezialsieden
 * <strong class="mw-specialpagerestricted">Spezialsieden för Brukers mit mehr Rechten</strong>',
 'specialpages-group-maintenance' => 'Pleeglisten',
 'specialpages-group-other' => 'Annere Spezialsieden',
index a7dd270..2b9accd 100644 (file)
@@ -759,7 +759,7 @@ Vergeet niet joew [[Special:Preferences|veurkeuren veur {{SITENAME}}]] an te pas
 'gotaccount' => "Stao'j al in-eschreven? '''$1'''.",
 'gotaccountlink' => 'Anmelden',
 'userlogin-resetlink' => "Bi'j de anmeldgegevens kwiet?",
-'userlogin-resetpassword-link' => 'Joew wachtwoord opniej instellen',
+'userlogin-resetpassword-link' => 'Joew wachtwoord vergeten?',
 'helplogin-url' => 'Help:Anmelden',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hulpe bie t anmelden]]',
 'userlogin-loggedin' => 'Je bin al an-emeld as {{GENDER:$1|$1}}.
@@ -827,7 +827,7 @@ en blief joew bestaonde wachtwoord gebruken.',
 'noemailcreate' => 'Je mutten n geldig netpostadres opgeven',
 'passwordsent' => 'Der is n niej wachtwoord verstuurd naor t netpostadres van gebruker "$1". Meld an, a\'j t wachtwoord ontvangen.',
 'blocked-mailpassword' => "Dit IP-adres is eblokkeerd. Dit betekent da'j niet bewarken kunnen en dat {{SITENAME}} joew wachtwoord niet weerummehaolen kan, dit wörden edaon um misbruuk tegen te gaon.",
-'eauthentsent' => "Der is n bevestigingsberich naor t op-egeven netpostadres verstuurd. Veurdat der veerdere berichten naor dit netpostadres verstuurd kunnen wörden, mu'j de instruksies volgen in t toe-esturen berich, um te bevestigen da'j joe eigen daodwarkelik an-emeld hebben.",
+'eauthentsent' => "Der is n bevestigingsbericht naor t op-egeven netpostadres verstuurd. Veurdat der veerdere berichten naor dit netpostadres verstuurd kunnen wörden, mu'j de instruksies volgen in t toe-estuurden bericht, um te bevestigen da'j joew eigen daodwarkelik an-emeld hebben.",
 'throttled-mailpassword' => 'In {{PLURAL:$1|t veurbieje ure|de veurbieje $1 uren}} is der al n wachtwoordherinnering estuurd.
 Um misbruuk te veurkoemen wörden der mer één wachtwoordherinnering per {{PLURAL:$1|ure|$1 uren}} verstuurd.',
 'mailerror' => 'Fout bie t versturen van bericht: $1',
@@ -1262,15 +1262,15 @@ Beheerders van {{SITENAME}} kunnen de verbörgen inhoud bekieken en t weerummepl
 * Ongepassen persoonlike informasie
 *: ''adressen en tillefoonnummers, burgerservicenummers, en gao zo mer deur.''",
 'revdelete-legend' => 'Stel versiebeparkingen in:',
-'revdelete-hide-text' => 'Verbarg de bewarken tekste',
+'revdelete-hide-text' => 'Versietekste',
 'revdelete-hide-image' => 'Verbarg bestaandsinhoud',
 'revdelete-hide-name' => 'Verbarg logboekaksie',
-'revdelete-hide-comment' => 'Verbarg bewarkingssamenvatting',
-'revdelete-hide-user' => 'Verbarg gebrukersnamen en IP-adressen van aandere luui.',
+'revdelete-hide-comment' => 'Bewarkingssamenvatting',
+'revdelete-hide-user' => 'Gebrukersnaam/IP-adres van disse gebruker',
 'revdelete-hide-restricted' => 'Gegevens veur beheerders en aander volk onderdrokken',
 'revdelete-radio-same' => '(niet wiezigen)',
-'revdelete-radio-set' => 'Ja',
-'revdelete-radio-unset' => 'Nee',
+'revdelete-radio-set' => 'Zichtbaor',
+'revdelete-radio-unset' => 'Verbörgen',
 'revdelete-suppress' => 'Gegevens veur beheerders en aander volk onderdrokken',
 'revdelete-unsuppress' => 'Beparkingen veur weerummezetten versies vortdoon',
 'revdelete-log' => 'Reden:',
@@ -1424,7 +1424,6 @@ Waorschienlik ku'j der meer gegevens over vienen in t [{{fullurl:{{#Special:Log}
 'mypreferences' => 'Mien veurkeuren',
 'prefs-edits' => 'Antal bewarkingen:',
 'prefsnologin' => 'Niet an-meld',
-'prefsnologintext' => 'Je mutten <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} an-emeld]</span> ween um joew veurkeuren in te kunnen stellen.',
 'changepassword' => 'Wachtwoord wiezigen',
 'prefs-skin' => '{{SITENAME}}-uterlik',
 'skin-preview' => 'bekieken',
@@ -2953,7 +2952,7 @@ A'j dat leste doon willen dan ku'j oek n verwiezing gebruken, bieveurbeeld [[{{#
 'allmessagesdefault' => 'Standardtekste',
 'allmessagescurrent' => 'De leste versie',
 'allmessagestext' => "Hieronder steet n lieste mit alle systeemteksten in de MediaWiki-naamruumte.
-Kiek oek effen bie [//www.mediawiki.org/wiki/Localisation MediaWiki-lokalisasie] en [//translatewiki.net translatewiki.net] a'j biedragen willen an de algemene vertaling veur MediaWiki.",
+Kiek oek effen bie [https://www.mediawiki.org/wiki/Localisation MediaWiki-lokalisasie] en [//translatewiki.net translatewiki.net] a'j biedragen willen an de algemene vertaling veur MediaWiki.",
 'allmessagesnotsupportedDB' => "Disse zied kan niet gebruukt wörden umdat '''\$wgUseDatabaseMessages''' uutezet is.",
 'allmessages-filter-legend' => 'Filter',
 'allmessages-filter' => 'Filtreer op wiezigingen:',
@@ -3119,7 +3118,7 @@ De tiedelike map is niet anwezig.',
 Iej könt in de bewearkingssamenvatting n reden opgeven.',
 'tooltip-preferences-save' => 'Vuurkeuren opsloan',
 'tooltip-summary' => 'Voer ne korte samenvatting in',
-'tooltip-iwiki' => '$1 – $2',
+'interlanguage-link-title' => '$1 – $2',
 
 # Metadata
 'notacceptable' => 'De wikiserver kan de gegevens niet leveren in n vorm die joew kliënt kan lezen.',
@@ -3160,6 +3159,7 @@ Hier '''NIKS''' invullen!",
 'pageinfo-length' => 'Ziedlengte (in bytes)',
 'pageinfo-article-id' => 'Zied-ID',
 'pageinfo-language' => 'Taal veur de zied',
+'pageinfo-content-model' => 'Ziedinhoudsmodel',
 'pageinfo-robot-policy' => 'Indexering deur bots',
 'pageinfo-robot-index' => 'Toe-estaon',
 'pageinfo-robot-noindex' => 'Niet toe-estaon',
@@ -3712,7 +3712,7 @@ Aandere velden wörden verbörgen.
 
 # External editor support
 'edit-externally' => 'Wiezig dit bestaand mit n extern programma',
-'edit-externally-help' => '(Zie de [//www.mediawiki.org/wiki/Manual:External_editors installasie-instruksies] veur meer informasie)',
+'edit-externally-help' => '(Zie de [https://www.mediawiki.org/wiki/Manual:External_editors installasie-instruksies] veur meer informasie)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'alles',
@@ -3801,6 +3801,9 @@ De bevestigingskode zal verlopen op $4.',
 'confirm-unwatch-button' => 'Oké',
 'confirm-unwatch-top' => 'Disse zied van joew volglieste aofhaolen?',
 
+# Separators for various lists, etc.
+'quotation-marks' => '"$1"',
+
 # Multipage image navigation
 'imgmultipageprev' => '&larr; veurige',
 'imgmultipagenext' => 'volgende &rarr;',
@@ -3892,7 +3895,7 @@ Je kunnen oek [[Special:EditWatchlist|t standardbewarkingsscharm gebruken]].',
 'version-hook-subscribedby' => 'In-eschreven deur',
 'version-version' => '(Versie $1)',
 'version-license' => 'Lisensie',
-'version-poweredby-credits' => "Disse wiki wörden an-estuurd deur '''[//www.mediawiki.org/ MediaWiki]''', auteursrecht © 2001-$1 $2.",
+'version-poweredby-credits' => "Disse wiki wörden an-estuurd deur '''[https://www.mediawiki.org/ MediaWiki]''', auteursrecht © 2001-$1 $2.",
 'version-poweredby-others' => 'aanderen',
 'version-poweredby-translators' => 'vertalers van translatewiki.net',
 'version-credits-summary' => 'Wulen erkennen grege de volgende personen veur der biedrage an [[Special:Version|MediaWiki]].',
@@ -3911,7 +3914,7 @@ Samen mit dit programma heur je n [{{SERVER}}{{SCRIPTPATH}}/COPYING kopie van de
 # Special:Redirect
 'redirect' => 'Deurverwiezen op bestaandsnaam, gebrukersnummer of versienummer',
 'redirect-legend' => 'Deurverwiezen naor n bestaand of zied',
-'redirect-summary' => 'Disse spesiale zied verwis deur naor n bestaand (as n bestaandsnaam op-egeven wörden), n zied (as n versienummer op-egeven wörden) of n gebrukerszied (as t gebrukersnummer op-egeven wörden).',
+'redirect-summary' => 'Disse spesiale zied verwis deur naor n bestaand (as de bestaandsnaam op-egeven wörden), n zied (as n versienummer op-egeven wörden) of n gebrukerszied (as t gebrukersnummer op-egeven wörden). Gebruuk: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], of [[{{#Special:Redirect}}/user/101]].',
 'redirect-submit' => 'Zeuk',
 'redirect-lookup' => 'Opzeuken:',
 'redirect-value' => 'Weerde:',
@@ -3933,8 +3936,7 @@ Samen mit dit programma heur je n [{{SERVER}}{{SCRIPTPATH}}/COPYING kopie van de
 
 # Special:SpecialPages
 'specialpages' => 'Spesiale ziejen',
-'specialpages-note' => '----
-* Normale spesiale ziejen.
+'specialpages-note' => '* Normale spesiale ziejen.
 * <strong class="mw-specialpagerestricted">Beparkt toegankelike spesiale ziejen.</strong>
 * <span class="mw-specialpagecached">Spesiale ziejen mit allinnig gegevens uut t tussengeheugen (kunnen verouwerd ween).</span>',
 'specialpages-group-maintenance' => 'Onderhoudsliesten',
index 99a16bf..7ac459c 100644 (file)
@@ -849,6 +849,11 @@ $2
 'edit-already-exists' => 'नयाँ पृष्ठ बनाउन सकिएन ।
 यो पहिले देखि नै रहेको छ।',
 
+# Content models
+'content-model-wikitext' => 'विकिपाठ',
+'content-model-text' => 'साधारण पाठ',
+'content-model-javascript' => 'जाभास्क्रिप्ट',
+
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''चेतावनी:''' यस पृष्टका अति धेरै संख्याका महँगा पार्सर फंक्सन कल्स (expensive parser function calls)  छन्।
 यसमा $2 भन्दा कम {{PLURAL:$2|कल|कल्स}} हुनुपर्छ,  यहाँ {{PLURAL:$1|अहिले $1 कल छ|अहिले $1 कल्स छ्न्}}.",
@@ -952,10 +957,10 @@ $2
 'revdelete-selected' => "'''[[:$1]]को {{PLURAL:$2|छानिएको संस्करण|छानिएका संस्करणहरु}}  :'''",
 'logdelete-selected' => "'''{{PLURAL:$1|छानिएको लग घटना|छानिएका लग घटनाहरु}}:'''",
 'revdelete-legend' => 'दृष्टि बन्देज मिलाउने',
-'revdelete-hide-text' => 'पुनरावलोकन पाठ लुकाउने',
+'revdelete-hide-text' => 'पुनरावलोकन पाठ',
 'revdelete-hide-image' => 'फाइल कमेन्ट लुकाउने',
 'revdelete-hide-name' => 'कार्य र गन्तब्य लुकाउने',
-'revdelete-hide-comment' => 'सम्पादन टिप्पणी लुकाउने',
+'revdelete-hide-comment' => 'सम्पादन टिप्पणी',
 'revdelete-hide-user' => 'सम्पादकको प्रयोगकर्ता नाम/IP लुकाउने',
 'revdelete-hide-restricted' => 'प्रवन्धक वा अरुबाट डेटा कम लिने',
 'revdelete-radio-same' => '(परिवर्तन नगर्नुहोस्)',
@@ -1107,7 +1112,6 @@ $1",
 'mypreferences' => 'प्राथमिकताहरु',
 'prefs-edits' => 'सम्पादन संख्या:',
 'prefsnologin' => 'प्रवेश (लग ईन) नगरिएको',
-'prefsnologintext' => 'प्रयोगकर्ता अभिरूचि निर्धारण गर्न <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ]</span>तपाईंले प्रवेश गरेको हुनुपर्छ।',
 'changepassword' => 'पासवर्ड परिवर्तन गर्नुहोस्',
 'prefs-skin' => 'काँचुली',
 'skin-preview' => 'पूर्वावलोकन',
@@ -1115,6 +1119,7 @@ $1",
 'prefs-beta' => 'बिटा गुणहरु',
 'prefs-datetime' => 'मिति र समय',
 'prefs-labs' => 'प्रयोगशाला गुणहरु',
+'prefs-user-pages' => 'प्रयोगकर्ता पृष्ठहरू',
 'prefs-personal' => 'प्रयोगकर्ताको विवरण',
 'prefs-rc' => 'नयाँ परिवर्तनहरु',
 'prefs-watchlist' => 'अवलोकन पृष्ठ',
@@ -1207,6 +1212,8 @@ HTML ट्यागहरु जाँच्नुहोस् ।',
 'prefs-dateformat' => 'मिति ढाँचा',
 'prefs-timeoffset' => 'समय अफसेट',
 'prefs-advancedediting' => 'सामान्य विकल्पहरू',
+'prefs-editor' => 'सम्पादक',
+'prefs-preview' => 'पूर्वावलोकन',
 'prefs-advancedrc' => 'उन्नत विकल्पहरू',
 'prefs-advancedrendering' => 'उन्नत विकल्पहरु',
 'prefs-advancedsearchoptions' => 'उन्नत विकल्पहरू',
@@ -1214,6 +1221,7 @@ HTML ट्यागहरु जाँच्नुहोस् ।',
 'prefs-displayrc' => 'प्रदर्शन विकल्पहरू',
 'prefs-displaysearchoptions' => 'प्रदर्शन विकल्पहरू',
 'prefs-displaywatchlist' => 'प्रदर्शन विकल्पहरू',
+'prefs-tokenwatchlist' => 'टोकन',
 'prefs-diffs' => 'diffs(भिन्नता)',
 
 # User preference: email validation using jQuery
@@ -1372,6 +1380,7 @@ HTML ट्यागहरु जाँच्नुहोस् ।',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|परिवर्तन|परिवर्तनहरु}}',
+'enhancedrc-history' => 'इतिहास',
 'recentchanges' => 'नयाँ परिवर्तनहरु',
 'recentchanges-legend' => 'हालैको परिवर्तन विकल्पहरु',
 'recentchanges-summary' => 'विकिका भर्खरका परिवर्तनहरुलाई यस पृष्ठमा पहिल्याउने',
@@ -1587,6 +1596,8 @@ $1',
 'listfiles_size' => 'आकार',
 'listfiles_description' => 'वर्णन',
 'listfiles_count' => 'संस्करणहरु',
+'listfiles-latestversion-yes' => 'हो',
+'listfiles-latestversion-no' => 'हैन',
 
 # File description page
 'file-anchor-link' => 'फाईल',
@@ -1901,7 +1912,7 @@ $1',
 'notanarticle' => 'सामाग्री सहितको पेज हैन',
 'notvisiblerev' => 'पूर्वावलोकन हटाइयो',
 'watchlist-details' => 'तपाईको निगरानी सूचीमा रहेका{{PLURAL:$1|$1 पृष्ठ|$1 पृष्ठहरु}}वार्तालापमा पृष्ठमा गनिएका छैनन् ।',
-'wlheader-enotif' => 'ईमेलद्वारा जानकारी गराउने तरिका सक्रिय गरियो ।',
+'wlheader-enotif' => 'ईमेल जानकारी सक्रिय गरियो ।',
 'wlheader-showupdated' => "तपाइले पछिल्लो पल्ट भ्रमण गरेपछि परिवर्तन भएका पृष्ठहरूलाई '''गाढा''' गरेर देखाइएको छ ।",
 'watchmethod-recent' => 'निगरानी सुचीमा रहेका पृष्ठमा गरिएका सम्पादनहरु जाँच्दै',
 'watchmethod-list' => 'सम्पदान गरिएका निगरानी सुचीमा रहेका पृष्ठहरुको सम्पादन जाँच्दै',
@@ -2399,7 +2410,7 @@ $1को बन्देजको कारण : "$2" हो',
 'allmessagesdefault' => 'डिफल्ट सन्देश पाठ',
 'allmessagescurrent' => 'वर्तमान सन्देश पाठ',
 'allmessagestext' => 'यो मीडियाविकि नेमस्पेसमा पाइने सिस्टम सन्देशहरूको सूची हो।
-यदि तपाईं व्यापक मीडिया विकि स्थानीयकरणमा योगदान गर्न चाहनुहुन्छ भनें कृपया [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation]मा र [//translatewiki.net translatewiki.net]मा जानुहोस्।',
+यदि तपाईं व्यापक मीडिया विकि स्थानीयकरणमा योगदान गर्न चाहनुहुन्छ भनें कृपया [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation]मा र [//translatewiki.net translatewiki.net]मा जानुहोस्।',
 'allmessages-filter-legend' => 'फिल्टर',
 'allmessages-filter-unmodified' => 'असंशोधित',
 'allmessages-filter-all' => 'सबै',
@@ -3065,7 +3076,7 @@ $8',
 
 # External editor support
 'edit-externally' => 'यो फाइललाई बाह्य अनुप्रयोग प्रयोग गरेर सम्पादन गर्ने',
-'edit-externally-help' => '(थप जानकारीको लागि [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] मा हेर्नुहोस् )',
+'edit-externally-help' => '(थप जानकारीको लागि [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] मा हेर्नुहोस् )',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'सबै',
@@ -3316,7 +3327,7 @@ $5
 'version-version' => '(संस्करण $1)',
 'version-svn-revision' => '(r$2)',
 'version-license' => 'इजाजतपत्र',
-'version-poweredby-credits' => "यो विकी '''[//www.mediawiki.org/ मिडियाविकि]''' द्वारा सशक्तिकरण गरिएको छ, copyright © सन् २००१-$1 $2.",
+'version-poweredby-credits' => "यो विकी '''[https://www.mediawiki.org/ मिडियाविकि]''' द्वारा सशक्तिकरण गरिएको छ, copyright © सन् २००१-$1 $2.",
 'version-poweredby-others' => 'अन्य',
 'version-software' => 'स्थापना गरिएको सफ्टवेयर',
 'version-software-product' => 'उत्पादन',
@@ -3335,8 +3346,7 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'विशेष पृष्ठ',
-'specialpages-note' => '----
-* साधारण विशेष पृष्ठहरु।
+'specialpages-note' => '* साधारण विशेष पृष्ठहरु।
 * <span class="mw-specialpagerestricted">निषेधित विशेष पृष्ठहरु।</span>
 * <span class="mw-specialpagecached">क्याश गरिएका विशेष पृष्ठहरु (अध्यावधिक नहुन सक्छ)।</span>',
 'specialpages-group-maintenance' => 'मर्मत प्रतिवेदनहरु',
index 4ec34de..54e018d 100644 (file)
@@ -11,6 +11,7 @@
  * @author AvatarTeam
  * @author B4bol4t
  * @author Basvb
+ * @author Breghtje
  * @author DasRakel
  * @author Effeietsanders
  * @author Erwin
@@ -784,7 +785,8 @@ De opgegeven reden is "\'\'$3\'\'".',
 'invalidtitle-knownnamespace' => 'Ongeldige titel met naamruimte "$2" en tekst "$3"',
 'invalidtitle-unknownnamespace' => 'Ongeldige titel met onbekend naamruimtenummer $1 en tekst "$2"',
 'exception-nologin' => 'Niet aangemeld',
-'exception-nologin-text' => 'Om deze pagina te bekijken of deze handeling uit te kunnen voeren moet u aangemeld zijn bij deze wiki.',
+'exception-nologin-text' => 'Om deze pagina te bekijken of deze handeling uit te kunnen voeren moet u [[Special:Userlogin|aangemeld]] zijn bij deze wiki.',
+'exception-nologin-text-manual' => 'U moet $1 om deze pagina te kunnen bekijken of de handeling uit te voeren.',
 
 # Virus scanner
 'virus-badscanner' => "Onjuiste configuratie: onbekende virusscanner: ''$1''.",
@@ -916,7 +918,7 @@ Om misbruik te voorkomen wordt er slechts één wachtwoordherinnering per {{PLUR
 Daarom kunt u vanaf uw IP-adres op dit moment geen nieuwe gebruikers registreren.',
 'emailauthenticated' => 'Uw e-mailadres is bevestigd op $2 om $3.',
 'emailnotauthenticated' => 'Uw e-mailadres is niet bevestigd.
-U ontvangt geen e-mail voor de onderstaande functies.',
+De volgende functies verzenden nog geen e-mail.',
 'noemailprefs' => 'Geef een e-mailadres op in uw voorkeuren om deze functies te gebruiken.',
 'emailconfirmlink' => 'Bevestig uw e-mailadres',
 'invalidemailaddress' => 'Het e-mailadres is niet aanvaard, omdat het een ongeldige opmaak heeft.
@@ -1213,7 +1215,7 @@ U kunt reeds bestaande pagina's wijzigen of u kunt [[Special:UserLogin|zich aanm
 'sectioneditnotsupported-text' => 'Het is op deze pagina niet mogelijk om paragrafen te bewerken.',
 'permissionserrors' => 'Fouten in rechten',
 'permissionserrorstext' => 'U hebt geen rechten om dit te doen om de volgende {{PLURAL:$1|reden|redenen}}:',
-'permissionserrorstext-withaction' => 'U hebt geen rechten om $2 om de volgende {{PLURAL:$1|reden|redenen}}:',
+'permissionserrorstext-withaction' => 'U hebt geen rechten om $2, {{PLURAL:$1|want}}:',
 'recreate-moveddeleted-warn' => "'''Waarschuwing: u bent bezig met het aanmaken van een pagina die in het verleden verwijderd is.'''
 
 Overweeg of het terecht is dat u verder werkt aan deze pagina.
@@ -1370,8 +1372,8 @@ Andere beheerders van {{SITENAME}} kunnen de verborgen inhoud benaderen en de ve
 'revdelete-hide-user' => 'Gebruikersnaam/IP-adres van de gebruiker verbergen',
 'revdelete-hide-restricted' => 'Deze beperkingen ook op beheerders toepassen',
 'revdelete-radio-same' => '(niet wijzigen)',
-'revdelete-radio-set' => 'Ja',
-'revdelete-radio-unset' => 'Nee',
+'revdelete-radio-set' => 'Verborgen',
+'revdelete-radio-unset' => 'Zichtbaar',
 'revdelete-suppress' => 'Gegevens voor zowel beheerders als anderen onderdrukken',
 'revdelete-unsuppress' => 'Beperkingen op teruggeplaatste wijzigingen verwijderen',
 'revdelete-log' => 'Reden:',
@@ -1533,7 +1535,7 @@ De gegevens over {{SITENAME}} zijn mogelijk niet bijgewerkt.',
 'mypreferences' => 'Voorkeuren',
 'prefs-edits' => 'Aantal bewerkingen:',
 'prefsnologin' => 'Niet aangemeld',
-'prefsnologintext' => 'U moet <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} aangemeld]</span> zijn om uw voorkeuren te kunnen instellen.',
+'prefsnologintext2' => 'U moet $1 om voorkeuren in te stellen.',
 'changepassword' => 'Wachtwoord wijzigen',
 'prefs-skin' => 'Vormgeving',
 'skin-preview' => 'Voorvertoning',
@@ -1726,7 +1728,7 @@ Als u deze opgeeft, kan deze naam gebruikt worden om u erkenning te geven voor u
 'right-bot' => 'Behandeld worden als een geautomatiseerd proces',
 'right-nominornewtalk' => "Kleine bewerkingen aan een overlegpagina leiden niet tot een melding 'nieuwe berichten'",
 'right-apihighlimits' => 'Hogere limieten in API-zoekopdrachten gebruiken',
-'right-writeapi' => 'Bewerken via de API',
+'right-writeapi' => 'Via de API bewerkingen uitvoeren',
 'right-delete' => "Pagina's verwijderen",
 'right-bigdelete' => "Pagina's met een grote geschiedenis verwijderen",
 'right-deletelogentry' => 'Specifieke logboekregels verwijderen en terugplaatsen',
@@ -1757,7 +1759,7 @@ Als u deze opgeeft, kan deze naam gebruikt worden om u erkenning te geven voor u
 'right-viewmyprivateinfo' => 'Uw eigen privégegevens bekijken (bijvoorbeeld e-mailadres, echte naam)',
 'right-editmyprivateinfo' => 'Uw eigen privégegevens bewerken (bijvoorbeeld e-mailadres, echte naam)',
 'right-editmyoptions' => 'Uw eigen voorkeuren bewerken',
-'right-rollback' => 'Snel de laatste bewerking(en) van een gebruiker van een pagina terugdraaien',
+'right-rollback' => 'De bewerkingen van de laatste gebruiker die een pagina heeft bewerkt snel terugdraaien',
 'right-markbotedits' => 'Teruggedraaide bewerkingen markeren als botbewerkingen',
 'right-noratelimit' => 'Tijdsafhankelijke beperkingen negeren',
 'right-import' => "Pagina's uit andere wiki's importeren",
@@ -1797,7 +1799,7 @@ Als u deze opgeeft, kan deze naam gebruikt worden om u erkenning te geven voor u
 'action-reupload' => 'dit bestaande bestand te overschrijven',
 'action-reupload-shared' => 'dit bestand te uploaden, terwijl er al een bestand met dezelfde naam in de gedeelde mediadatabank staat',
 'action-upload_by_url' => 'dit bestand vanaf een URL te uploaden',
-'action-writeapi' => 'via de API te bewerken',
+'action-writeapi' => 'via de API bewerkingen uit te voeren',
 'action-delete' => 'deze pagina te verwijderen',
 'action-deleterevision' => 'deze versie te verwijderen',
 'action-deletedhistory' => 'de verwijderde versies van deze pagina te bekijken',
@@ -1807,7 +1809,7 @@ Als u deze opgeeft, kan deze naam gebruikt worden om u erkenning te geven voor u
 'action-suppressionlog' => 'dit beschermde logboek te bekijken',
 'action-block' => 'deze gebruiker een bewerkingsblokkade op te leggen',
 'action-protect' => 'het beveiligingsniveau van deze pagina aan te passen',
-'action-rollback' => 'bewerkingen van de laatste gebruiker die een pagina heeft bewerkt snel terugdraaien',
+'action-rollback' => 'de bewerkingen van de laatste gebruiker die een pagina heeft bewerkt snel terug te draaien',
 'action-import' => "pagina's te importeren van een andere wiki",
 'action-importupload' => "pagina's te importeren uit een bestandsupload",
 'action-patrol' => 'bewerkingen van anderen als gecontroleerd te markeren',
@@ -2588,7 +2590,7 @@ Contactgegevens van de auteur:
 E-mailadres: $PAGEEDITOR_EMAIL
 Wiki: $PAGEEDITOR_WIKI
 
-Tenzij u deze pagina bezoekt, komen er geen verdere berichten. Op uw volglijst kunt u voor alle gevolgde pagina\'s de waarschuwingsinstellingen opschonen.
+Tenzij u deze pagina bezoekt, komen er geen verdere berichten. Als u bent aangemeld, kunt u op uw volglijst voor alle gevolgde pagina\'s de waarschuwingsinstellingen opschonen.
 
 Groet van uw {{SITENAME}}-waarschuwingssysteem.
 
@@ -3120,7 +3122,7 @@ In het laatste geval kunt u ook een koppeling gebruiken, bijvoorbeeld [[{{#Speci
 'allmessagesdefault' => 'Standaardinhoud',
 'allmessagescurrent' => 'Huidige inhoud',
 'allmessagestext' => 'Hieronder staan de systeemberichten uit de MediaWiki-naamruimte.
-Ga naar [//www.mediawiki.org/wiki/Localisation MediaWiki-lokalisatie] en [//translatewiki.net translatewiki.net] als u wilt bijdragen aan de algemene vertaling voor MediaWiki.',
+Ga naar [https://www.mediawiki.org/wiki/Localisation MediaWiki-lokalisatie] en [//translatewiki.net translatewiki.net] als u wilt bijdragen aan de algemene vertaling voor MediaWiki.',
 'allmessagesnotsupportedDB' => "Deze pagina kan niet worden gebruikt, omdat '''\$wgUseDatabaseMessages''' is uitgeschakeld.",
 'allmessages-filter-legend' => 'Filter',
 'allmessages-filter' => 'Filteren op aangepast:',
@@ -3286,7 +3288,7 @@ U kunt wel de broncode bekijken.',
 'tooltip-undo' => 'Met "ongedaan maken" draait u deze bewerking terug en komt in het bewerkingsvenster. U kunt in de bewerkingssamenvatting een reden opgeven.',
 'tooltip-preferences-save' => 'Voorkeuren opslaan',
 'tooltip-summary' => 'Voer een korte samenvatting in',
-'tooltip-iwiki' => '$1 – $2',
+'interlanguage-link-title' => '$1 – $2',
 
 # Stylesheets
 'common.css' => '/** CSS die hier wordt geplaatst heeft invloed op alle skins */',
@@ -3351,6 +3353,7 @@ Vul dit veld '''NIET''' in!",
 'pageinfo-length' => 'Paginalengte (in bytes)',
 'pageinfo-article-id' => 'Paginanummer',
 'pageinfo-language' => 'Taal voor de pagina',
+'pageinfo-content-model' => 'Paginainhoudmodel',
 'pageinfo-robot-policy' => 'Indexering door robots',
 'pageinfo-robot-index' => 'Toegestaan',
 'pageinfo-robot-noindex' => 'Niet toegestaan',
@@ -3437,7 +3440,7 @@ $1',
 'svg-long-desc' => 'SVG-bestand, nominaal $1 × $2 pixels, bestandsgrootte: $3',
 'svg-long-desc-animated' => 'Bewegend SVG-bestand, nominaal $1 × $2 pixels, bestandsgrootte: $3',
 'svg-long-error' => 'Ongeldig SVG-bestand: $1',
-'show-big-image' => 'Volledige resolutie',
+'show-big-image' => 'Oorspronkelijk bestand',
 'show-big-image-preview' => 'Grootte van deze voorvertoning: $1.',
 'show-big-image-other' => 'Andere {{PLURAL:$2|resolutie|resoluties}}: $1.',
 'show-big-image-size' => '$1 × $2 pixels',
@@ -3477,13 +3480,13 @@ $1',
 'hours-ago' => '$1 {{PLURAL:$1|uur}} geleden',
 'minutes-ago' => '$1 {{PLURAL:$1|minuut|minuten}} geleden',
 'seconds-ago' => '$1 {{PLURAL:$1|seconde|seconden}} geleden',
-'monday-at' => 'Maandag om $1',
-'tuesday-at' => 'Dinsdag om $1',
-'wednesday-at' => 'Woensdag om $1',
-'thursday-at' => 'Donderdag om $1',
-'friday-at' => 'Vrijdag om $1',
-'saturday-at' => 'Zaterdag om $1',
-'sunday-at' => 'Zondag om $1',
+'monday-at' => 'maandag om $1',
+'tuesday-at' => 'dinsdag om $1',
+'wednesday-at' => 'woensdag om $1',
+'thursday-at' => 'donderdag om $1',
+'friday-at' => 'vrijdag om $1',
+'saturday-at' => 'zaterdag om $1',
+'sunday-at' => 'zondag om $1',
 'yesterday-at' => 'Gisteren om $1',
 
 # Bad image list
@@ -3906,7 +3909,7 @@ Andere velden worden verborgen.
 
 # External editor support
 'edit-externally' => 'Dit bestand in een extern programma bewerken',
-'edit-externally-help' => '(zie de [//www.mediawiki.org/wiki/Manual:External_editors handleiding voor instellingen] voor meer informatie)',
+'edit-externally-help' => '(zie de [https://www.mediawiki.org/wiki/Manual:External_editors handleiding voor instellingen] voor meer informatie)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'alles',
@@ -4004,6 +4007,9 @@ Bevestig dat u de pagina opnieuw wilt aanmaken.',
 'confirm-unwatch-button' => 'OK',
 'confirm-unwatch-top' => 'Deze pagina verwijderen uit uw volglijst?',
 
+# Separators for various lists, etc.
+'quotation-marks' => '"$1"',
+
 # Multipage image navigation
 'imgmultipageprev' => '← vorige pagina',
 'imgmultipagenext' => 'volgende pagina →',
@@ -4109,7 +4115,7 @@ U kunt ook [[Special:EditWatchlist|het standaard bewerkingsscherm gebruiken]].',
 'version-hook-subscribedby' => 'Geabonneerd door',
 'version-version' => '(Versie $1)',
 'version-license' => 'Licentie',
-'version-poweredby-credits' => "Deze wiki wordt aangedreven door '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Deze wiki wordt aangedreven door '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'anderen',
 'version-poweredby-translators' => 'translatewiki.net-vertalers',
 'version-credits-summary' => 'We erkennen graag de volgende personen voor hun bijdrage aan [[Special:Version|MediaWiki]].',
@@ -4130,7 +4136,7 @@ Samen met dit programma hoort u een [{{SERVER}}{{SCRIPTPATH}}/COPYING kopie van
 # Special:Redirect
 'redirect' => 'Doorverwijzen op bestandsnaam, gebruikersnummer of versienummer',
 'redirect-legend' => 'Doorverwijzen naar een bestand of pagina',
-'redirect-summary' => 'Deze speciale pagina verwijst door naar een bestand (als een bestandsnaam wordt opgegeven), een pagina (als een versienummer wordt opgegeven) of een gebruikerspagina (als een gebruikersnummer wordt opgegeven).',
+'redirect-summary' => 'Deze speciale pagina verwijst door naar een bestand (als een bestandsnaam wordt opgegeven), een pagina (als een versienummer wordt opgegeven) of een gebruikerspagina (als een gebruikersnummer wordt opgegeven). Gebruik: [[{{#Special:Redirect}}/file/Voorbeeld.jpg]], [[{{#Special:Redirect}}/revision/328429]] of [[{{#Special:Redirect}}/user/101]].',
 'redirect-submit' => 'OK',
 'redirect-lookup' => 'Opzoeken:',
 'redirect-value' => 'Waarde:',
@@ -4152,10 +4158,9 @@ Samen met dit programma hoort u een [{{SERVER}}{{SCRIPTPATH}}/COPYING kopie van
 
 # Special:SpecialPages
 'specialpages' => "Speciale pagina's",
-'specialpages-note' => '----
-* Normale speciale pagina\'s
-* <strong class="mw-specialpagerestricted">Beperkt toegankelijke speciale pagina\'s</strong>
-* <span class="mw-specialpagecached">Speciale pagina\'s met alleen gegevens uit de cache (mogelijk verouderd)</span>',
+'specialpages-note-top' => 'Legenda',
+'specialpages-note' => '* Normale speciale pagina\'s
+* <span class="mw-specialpagerestricted">Beperkt toegankelijke speciale pagina\'s</span>',
 'specialpages-group-maintenance' => 'Onderhoudsrapporten',
 'specialpages-group-other' => "Overige speciale pagina's",
 'specialpages-group-login' => 'Aanmelden / registreren',
index 47bc87c..b8ff13a 100644 (file)
@@ -326,10 +326,10 @@ $messages = array(
 'tog-extendwatchlist' => 'Utvid overvakingslista til å vise alle endringane, ikkje berre dei siste',
 'tog-usenewrc' => 'Grupper endringar etter side i siste endringane og på overvakingslista mi (krev JavaScript)',
 'tog-numberheadings' => 'Vis nummererte overskrifter',
-'tog-showtoolbar' => 'Vis endringsknappar (JavaScript)',
-'tog-editondblclick' => 'Endre sider med dobbeltklikk (JavaScript)',
+'tog-showtoolbar' => 'Vis endringsverktøyline',
+'tog-editondblclick' => 'Endre sider med dobbeltklikk',
 'tog-editsection' => 'Endre avsnitt ved hjelp av [endre]-lenkje',
-'tog-editsectiononrightclick' => 'Endre avsnitt ved å høgreklikke på avsnittsoverskrift (JavaScript)',
+'tog-editsectiononrightclick' => 'Endre avsnitt ved å høgreklikke på avsnittsoverskrifter',
 'tog-showtoc' => 'Vis innhaldsliste (for sider med meir enn tre bolkar)',
 'tog-rememberpassword' => 'Hugs innlogginga mi med denne nettlesaren (for høgst {{PLURAL:$1|éin dag|$1 dagar}})',
 'tog-watchcreations' => 'Legg til sidene eg opprettar og filene eg lastar opp på overvakingslista mi',
@@ -347,7 +347,7 @@ $messages = array(
 'tog-shownumberswatching' => 'Vis kor mange som overvakar sida',
 'tog-oldsig' => 'Noverande signatur:',
 'tog-fancysig' => 'Handsam signaturar som wikitekst (utan automatisk lenking)',
-'tog-uselivepreview' => 'Bruk levande førehandsvising (eksperimentelt JavaScript)',
+'tog-uselivepreview' => 'Bruk levande førehandsvising (eksperimentelt)',
 'tog-forceeditsummary' => 'Spør meg når eg ikkje har skrive noko i endringssamandraget',
 'tog-watchlisthideown' => 'Gøym endringane mine i overvakingslista',
 'tog-watchlisthidebots' => 'Gøym endringar gjorde av robotar i overvakingslista',
@@ -763,7 +763,7 @@ Gløym ikkje å endra [[Special:Preferences|innstillingane dine for {{SITENAME}}
 'gotaccount' => "Har du ein brukarkonto? '''$1'''.",
 'gotaccountlink' => 'Logg inn',
 'userlogin-resetlink' => 'Har du gløymd påloggingsopplysingane dine?',
-'userlogin-resetpassword-link' => 'Attendestill passordet ditt',
+'userlogin-resetpassword-link' => 'Gløymt passordet ditt?',
 'helplogin-url' => 'Help:Innlogging',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hjelp med innlogging]]',
 'createacct-join' => 'Skriv inn informasjonen din under.',
@@ -1033,7 +1033,7 @@ Endringane dine er ikkje lagra enno!",
 
 '''Dersom dette er eit heilt vanleg forsøk på endring, prøv ein gong til. Dersom det framleis ikkje går, prøv å logge deg ut og inn att.'''",
 'token_suffix_mismatch' => "'''Endringa di vart avvist fordi klienten/nettlesaren din lagar teiknfeil i teksten. Dette vart gjort for å hindre øydelegging av teksten på sida. Slikt kan av og til hende når ein brukar feilprogrammerte og vevbaserte anonyme proxytenester.'''",
-'edit_form_incomplete' => 'Delar av redigeringsskjemaet nådde ikkje fram til tenaren; dobbelsjekk at redigeringa er korrekt, og prøv om att.',
+'edit_form_incomplete' => 'Delar av endringsskjemaet nådde ikkje fram til tenaren; dobbelsjekk at endringa er korrekt og prøv om att.',
 'editing' => 'Endrar $1',
 'creating' => 'Opprettar $1',
 'editingsection' => 'Endrar $1 (bolk)',
@@ -1095,7 +1095,7 @@ Sletteloggen for sida finn du her:",
 'edit-gone-missing' => 'Kunne ikkje oppdatere sida.
 Det ser ut til at ho er sletta.',
 'edit-conflict' => 'Endringskonflikt.',
-'edit-no-change' => 'Redigeringa di vart ignorert fordi det ikkje vart gjort endringar i teksten.',
+'edit-no-change' => 'Endringa di vart ignorert fordi det ikkje vart gjort endringar i teksten.',
 'postedit-confirmation' => 'Endringa di vart lagra.',
 'edit-already-exists' => 'Kunne ikkje opprette ny side fordi ho alt eksisterer.',
 'defaultmessagetext' => 'Standard meldingstekst',
@@ -1134,7 +1134,8 @@ Desse parameterane har vorte utelatne.',
 'converter-manual-rule-error' => 'Det vart oppdaga ein feil i ein manuell språkkonverteringsregel',
 
 # "Undo" feature
-'undo-success' => 'Endringa kan attenderullast. Ver venleg og sjå over skilnadene nedanfor for å vere sikker på at du vil attenderulle. Deretter kan du lagre attenderullinga.',
+'undo-success' => 'Endringa kan angrast.
+Sjå på samanlikninga under for å stadfesta at dette er det du ynskjer å gjera. Deretter kan du lagra desse endringane for å fullføra angringa.',
 'undo-failure' => 'Endringa kunne ikkje attenderullast grunna konflikt med endringar som er gjorde i mellomtida.',
 'undo-norev' => 'Endringa kunne ikkje fjernast fordi han ikkje finst eller vart sletta',
 'undo-summary' => 'Rullar attende versjon $1 av [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusjon]])',
@@ -1221,7 +1222,8 @@ Du kan sjå skilnaden; detaljar finst i [{{fullurl:{{#Special:Log}}/suppcess|pag
 'revdelete-text' => "Sletta versjonar og oppføringar vert framleis synlege i sidehistorikken og loggane, men delar av innhaldet deira vert ikkje lenger offentleggjort.'''
 Andre administratorar på {{SITENAME}} kan framleis sjå det gøymde innhaldet og attopprette det, med mindre fleire avgrensingar vert lagde inn av sideoperatørane.",
 'revdelete-confirm' => 'Stadfest at du ynskjer å gjera dette, at du skjønar konsekvensane, og at du gjer det i samsvar med [[{{MediaWiki:Policy-url}}|retningslinene]].',
-'revdelete-suppress-text' => "Løyning av sideversjonar bør '''berre''' verta nytta i dei fylgjande tilfella:
+'revdelete-suppress-text' => "Løyning av sideversjonar bør '''berre''' nyttast i desse tilfella:
+* Mogeleg ærekrenkjande informasjon
 * Upassanda personleg informasjon
 *: ''heimeadresser og -telefonnummer,  personnummer, osb.''",
 'revdelete-legend' => 'Vel avgrensing for synlegdom',
@@ -1299,7 +1301,7 @@ Pass på at den nye sida også har innhald frå den innfletta sida.',
 'mergehistory-reason' => 'Årsak:',
 
 # Merge log
-'mergelog' => 'Flettingslogg',
+'mergelog' => 'Flettelogg',
 'pagemerge-logentry' => 'fletta [[$1]] til [[$2]] (versjonar fram til $3)',
 'revertmerge' => 'Fjern fletting',
 'mergelogpagetext' => 'Nedanfor finn du ei liste over dei siste flettingane av ein sidehistorikk til ein annan.',
@@ -1391,7 +1393,6 @@ Ver merksam på at registra deira kan vera utdaterte.',
 'mypreferences' => 'Innstillingar',
 'prefs-edits' => 'Tal på endringar:',
 'prefsnologin' => 'Ikkje innlogga',
-'prefsnologintext' => 'Du må vere <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} logga inn]</span> for å endre brukarinnstillingane.',
 'changepassword' => 'Skift passord',
 'prefs-skin' => 'Drakt',
 'skin-preview' => 'førehandsvis',
@@ -1416,7 +1417,7 @@ Ver merksam på at registra deira kan vera utdaterte.',
 'prefs-rendering' => 'Utsjånad',
 'saveprefs' => 'Lagre',
 'resetprefs' => 'Rull attende',
-'restoreprefs' => 'Hent attende alle standardinnstillingane',
+'restoreprefs' => 'Hent attende alle standardinnstillingane (i alle bolkane)',
 'prefs-editing' => 'Endring',
 'rows' => 'Rekkjer',
 'columns' => 'Kolonnar',
@@ -1522,7 +1523,7 @@ Denne informasjonen vil vera offentleg.',
 'userrights-no-interwiki' => 'Du har ikkje tilgang til å endre brukartilgangar på andre wikiar.',
 'userrights-nodatabase' => 'Databasen $1 finst ikkje eller er ikkje lokal.',
 'userrights-nologin' => 'Du må [[Special:UserLogin|logge inn]] med ein administrator- og/eller byråkratkonto for å endre brukartilgangar.',
-'userrights-notallowed' => 'Kontoen din har ikkje løyve til å leggja til eller fjerna brukarrettar.',
+'userrights-notallowed' => 'Du har ikkje løyve til å leggja til eller fjerna brukarrettar.',
 'userrights-changeable-col' => 'Grupper du kan endre',
 'userrights-unchangeable-col' => 'Grupper du ikkje kan endre',
 
@@ -1696,7 +1697,7 @@ Denne informasjonen vil vera offentleg.',
 'rc_categories_any' => 'Alle',
 'rc-change-size-new' => '$1 {{PLURAL:$1|byte}} etter endringa',
 'newsectionsummary' => '/* $1 */ ny bolk',
-'rc-enhanced-expand' => 'Vis detaljar (krev JavaScript)',
+'rc-enhanced-expand' => 'Vis detaljar',
 'rc-enhanced-hide' => 'Skjul detaljar',
 'rc-old-title' => 'opphavleg oppretta som «$1»',
 
@@ -2056,7 +2057,7 @@ Du vil kan henda endra skildringa på [$2 filskildringssida] hennar der.',
 
 # Random page
 'randompage' => 'Tilfeldig side',
-'randompage-nopages' => 'Det finst ingen sider i {{PLURAL:$2|det fylgjande namneromet|dei fylgjande namneroma}}: $1.',
+'randompage-nopages' => 'Det finst ingen sider i {{PLURAL:$2|dette namnerommet|desse namneromma}}: $1.',
 
 # Random redirect
 'randomredirect' => 'Tilfeldig omdirigering',
@@ -2165,9 +2166,9 @@ Du vil kan henda endra skildringa på [$2 filskildringssida] hennar der.',
 'ancientpages' => 'Eldste sider',
 'move' => 'Flytt',
 'movethispage' => 'Flytt denne sida',
-'unusedimagestext' => 'Dei fylgjande filene finst, men vert ikkje nytta på noka side.
+'unusedimagestext' => 'Desse filene finst, men vert ikkje nytta på noka side.
 Merk at andre internettsider kan ha direkte lenkjer til filer, og difor kan filene vera nytta aktivt trass i at dei er lista opp her.',
-'unusedcategoriestext' => 'Dei følgjande kategorisidene er oppretta, sjølv om ingen artikkel eller kategori brukar dei.',
+'unusedcategoriestext' => 'Desse kategorisidene er oppretta, sjølv om ingen artikkel eller kategori brukar dei.',
 'notargettitle' => 'Inkje mål',
 'notargettext' => 'Du har ikkje spesifisert noka målside eller nokon brukar å bruke denne funksjonen på.',
 'nopagetitle' => 'Målsida finst ikkje',
@@ -2568,7 +2569,7 @@ $1',
 'contributions' => '{{GENDER:$1|Brukarbidrag}}',
 'contributions-title' => 'Bidrag av $1',
 'mycontris' => 'Bidrag',
-'contribsub2' => 'For $1 ($2)',
+'contribsub2' => 'For {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'Det vart ikkje funne nokon endringar gjorde av denne brukaren.',
 'uctop' => '(gjeldande)',
 'month' => 'Månad:',
@@ -2706,7 +2707,7 @@ IP-adresser som blir automatisk blokkerte er ikkje lista her. Sjå [[Special:Blo
 'block-log-flags-noemail' => 'sending av e-post blokkert',
 'block-log-flags-nousertalk' => 'kan ikkje endre eiga diskusjonsside',
 'block-log-flags-angry-autoblock' => 'utvida autoblokkering aktivert',
-'block-log-flags-hiddenname' => 'brukarnamn gøymt',
+'block-log-flags-hiddenname' => 'brukarnamn løynt',
 'range_block_disabled' => 'Funksjonen for blokkering av IP-adresse-seriar er inaktivert på tenaren.',
 'ipb_expiry_invalid' => 'Ugyldig opphørstid.',
 'ipb_expiry_temp' => 'For å skjule brukarnamnet må blokkeringa vere permanent.',
@@ -2864,7 +2865,7 @@ Dersom du berre vil ha noverande versjon, kan du også bruke ei lenkje, til døm
 'allmessagesdefault' => 'Standardtekst',
 'allmessagescurrent' => 'Gjeldande meldingstekst',
 'allmessagestext' => 'Dette er ei liste over systemmeldingar i MediaWiki-namnerommet.
-Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//translatewiki.net translatewiki.net] om du ynskjer å bidra til den generelle omsetjinga av MediaWiki.',
+Vitja [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//translatewiki.net translatewiki.net] om du ynskjer å bidra til den generelle omsetjinga av MediaWiki.',
 'allmessagesnotsupportedDB' => "Denne sida kan ein ikkje bruka fordi «'''\$wgUseDatabaseMessages'''» er slått av.",
 'allmessages-filter-legend' => 'Filtrer',
 'allmessages-filter' => 'Filtrer etter tilpassingsgrad:',
@@ -3073,13 +3074,13 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'pageinfo-length' => 'Sidelengd (i byte)',
 'pageinfo-article-id' => 'Side-ID',
 'pageinfo-language' => 'Sideinnhaldsspråk',
-'pageinfo-robot-policy' => 'Søkjemotorstode',
-'pageinfo-robot-index' => 'Kan indekserast',
-'pageinfo-robot-noindex' => 'Kan ikkje indekserast',
+'pageinfo-robot-policy' => 'Botindeksering',
+'pageinfo-robot-index' => 'Tillate',
+'pageinfo-robot-noindex' => 'Ikkje tillate',
 'pageinfo-views' => 'Tal på visningar',
 'pageinfo-watchers' => 'Tal på overvakarar av sida',
 'pageinfo-few-watchers' => 'Færre enn $1 {{PLURAL:$1|som overvakar}}',
-'pageinfo-redirects-name' => 'Omdirigeringar til sida',
+'pageinfo-redirects-name' => 'Tal på omdirigeringar til sida',
 'pageinfo-subpages-name' => 'Undersider av sida',
 'pageinfo-subpages-value' => '$1 ({{PLURAL:$2|éi omdirigering|$2 omdirigeringar}}; {{PLURAL:$3|éi ikkje-omdirigering|$3 ikkje-omdirigeringar}})',
 'pageinfo-firstuser' => 'Sideopprettar',
@@ -3122,7 +3123,7 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'markedaspatrollederror' => 'Kan ikkje merke sida som patruljert',
 'markedaspatrollederrortext' => 'Du må markere ein versjon for å kunne godkjenne.',
 'markedaspatrollederror-noautopatrol' => 'Ein har ikkje høve til å merkje sine eigne endringar som godkjende.',
-'markedaspatrollednotify' => 'Denne endringa på $1 vart merkt som patruljert.',
+'markedaspatrollednotify' => 'Endringa på $1 vart merkt som patruljert.',
 'markedaspatrollederrornotify' => 'Det gjekk ikkje å merkja endringa som patruljert.',
 
 # Patrol log
@@ -3419,7 +3420,7 @@ Andre er gøymde som standard.
 'exif-compression-4' => 'CCITT Gruppe 4 faks-koding',
 
 'exif-copyrighted-true' => 'Verna av opphavsrett',
-'exif-copyrighted-false' => 'Ikkje verna av opphavsrett',
+'exif-copyrighted-false' => 'Opphavsrettsstode er ikkje oppgjeven',
 
 'exif-unknowndate' => 'Ukjend dato',
 
@@ -3625,7 +3626,7 @@ Andre er gøymde som standard.
 
 # External editor support
 'edit-externally' => 'Endre denne fila med eit eksternt program',
-'edit-externally-help' => '(Sjå [//www.mediawiki.org/wiki/Manual:External_editors oppsettsinstruksjonane] for meir informasjon)',
+'edit-externally-help' => '(Sjå [https://www.mediawiki.org/wiki/Manual:External_editors oppsettsinstruksjonane] for meir informasjon)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'alle',
@@ -3805,7 +3806,7 @@ Du kan òg [[Special:EditWatchlist|nytte standardverktøyet]].',
 'version-hook-subscribedby' => 'Brukt av',
 'version-version' => '(versjon $1)',
 'version-license' => 'Lisens',
-'version-poweredby-credits' => "Denne wikien er driven av '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Denne wikien er driven av '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'andre',
 'version-poweredby-translators' => 'translatewiki.net-omsetjarar',
 'version-credits-summary' => 'Me ynskjer godskriva desse personane for tilskotet deira til [[Special:Version|MediaWiki]].',
@@ -3846,8 +3847,7 @@ Du skal ha motteke [{{SERVER}}{{SCRIPTPATH}}/COPYING ein kopi av GNU General Pub
 
 # Special:SpecialPages
 'specialpages' => 'Spesialsider',
-'specialpages-note' => '----
-* Vanlege spesialsider.
+'specialpages-note' => '* Vanlege spesialsider.
 * <span class="mw-specialpagerestricted">Spesialsider med avgrensa tilgang.</span>',
 'specialpages-group-maintenance' => 'Vedlikehaldsrapportar',
 'specialpages-group-other' => 'Andre spesialsider',
@@ -3912,7 +3912,7 @@ Du skal ha motteke [{{SERVER}}{{SCRIPTPATH}}/COPYING ein kopi av GNU General Pub
 'dberr-info' => '(Kan ikkje kontakta databasetenaren: $1)',
 'dberr-usegoogle' => 'Du kan søkja gjennom Google i mellomtida.',
 'dberr-outofdate' => 'Merk at versjonane deira av innhaldet vårt kan vera forelda.',
-'dberr-cachederror' => 'Fylgjande er ein mellomlagra kopi av den etterspurde sida, og er, kan henda, ikkje den siste versjonen av ho.',
+'dberr-cachederror' => 'Dette er ein mellomlagra kopi av den etterspurde sida og er mogelegvis ikkje den gjeldande versjonen av henne.',
 
 # HTML forms
 'htmlform-invalid-input' => 'Det finst problem med innskrivinga di',
@@ -3947,7 +3947,7 @@ Du skal ha motteke [{{SERVER}}{{SCRIPTPATH}}/COPYING ein kopi av GNU General Pub
 'logentry-suppress-revision-legacy' => '$1 {{GENDER:$2|endra}} i løyndom synlegdomen til versjonar på sida $3',
 'revdelete-content-hid' => 'innhald løynt',
 'revdelete-summary-hid' => 'endringsamandrag løynt',
-'revdelete-uname-hid' => 'brukarnamn gøymt',
+'revdelete-uname-hid' => 'brukarnamn løynt',
 'revdelete-content-unhid' => 'innhald gjort synleg',
 'revdelete-summary-unhid' => 'endringssamandrag gjort synleg',
 'revdelete-uname-unhid' => 'brukarnamn gjort synleg',
index 99cea76..c22a78b 100644 (file)
@@ -1214,7 +1214,7 @@ letlakala la seswantšho ge tafola ya metadata e bulwa. Tše dingwe tša di ''fi
 
 # External editor support
 'edit-externally' => 'Fetola faele ye o šumiša thulusi ya ka ntle',
-'edit-externally-help' => '(Lebelela [//www.mediawiki.org/wiki/Manual:External_editors Taelo ya go thoma] go humana sedi)',
+'edit-externally-help' => '(Lebelela [https://www.mediawiki.org/wiki/Manual:External_editors Taelo ya go thoma] go humana sedi)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ka moka',
index caa64ac..9b8e1db 100644 (file)
@@ -698,7 +698,8 @@ L'administrator que l'a varrolhat a provesit aqueste motiu : « $3 ».",
 'invalidtitle-knownnamespace' => "Títol invalid amb l'espaci de noms « $2 » e l'intitulat « $3 »",
 'invalidtitle-unknownnamespace' => "Títol invalid amb lo numèro d'espaci de noms $1 e l'intitulat « $2 » desconeguts",
 'exception-nologin' => 'Pas connectat',
-'exception-nologin-text' => "Aquesta pagina o aquesta accion necessita d'èsser connectada sus aqueste wiki.",
+'exception-nologin-text' => '[[Special:Userlogin|Connectatz-vos]] per poder accedir a aquesta pagina o aquesta accion.',
+'exception-nologin-text-manual' => '$1 per poder accedir a aquesta pagina o aquesta accion.',
 
 # Virus scanner
 'virus-badscanner' => "Marrida configuracion : escaner de virús desconegut : ''$1''",
@@ -745,7 +746,7 @@ Doblidetz pas de modificar [[Special:Preferences|vòstras preferéncias per {{SI
 'gotaccount' => "Ja avètz un compte ? '''$1'''.",
 'gotaccountlink' => 'Identificatz-vos',
 'userlogin-resetlink' => 'Avètz doblidat vòstres detalhs de connexion ?',
-'userlogin-resetpassword-link' => 'Reïnicializar lo senhal',
+'userlogin-resetpassword-link' => 'Senhal doblidat ?',
 'helplogin-url' => 'Help:Connexion',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Ajuda a la connexion]]',
 'userlogin-loggedin' => 'Sètz ja connectat en tant que {{GENDER:$1|$1}}.
@@ -816,8 +817,8 @@ Abans qu’un autre corrièr sià mandat a aqueste compte, vos caldrà seguir la
 'mailerror' => 'Error en mandant lo corrièr electronic : $1',
 'acct_creation_throttle_hit' => "De visitors d'aqueste wiki qu'utilizan vòstra adreça IP an creat $1 {{PLURAL:$1|compte|comptes}} lo jorn darrièr, aquò es lo limit maximum autorizat pendent aqueste periòde.
 Atal los visitors qu'utilizan aquesta adreça IP pòdon pas crear mai de compte novèl pel moment.",
-'emailauthenticated' => 'Vòstra adreça de corrièr electronic es estada autentificada lo $2 a $3.',
-'emailnotauthenticated' => 'Vòstra adreça de corrièr electronic es <strong>pas encara autentificada</strong>. Cap corrièr serà pas mandat per caduna de las foncions seguentas.',
+'emailauthenticated' => 'Vòstra adreça de corrièr electronic es estada confirmada lo $2 a $3.',
+'emailnotauthenticated' => 'Vòstra adreça de corrièr electronic es pas encara confirmada. Cap de corrièr serà pas mandat per caduna de las foncions seguentas.',
 'noemailprefs' => "Cap d'adreça electronica es pas estada indicada, las foncions seguentas seràn pas disponiblas.",
 'emailconfirmlink' => 'Confirmatz vòstra adreça de corrièr electronic',
 'invalidemailaddress' => "Aquesta adreça de corrièr electronic pòt pas èsser acceptada perque sembla qu'a un format incorrècte.
@@ -1232,6 +1233,7 @@ Podètz veire aquesta diff ; i pòt aver mai de detalhs dins lo [{{fullurl:{{#Sp
 D’autres administrators sus {{SITENAME}} poiràn totjorn accedir al contengut amagat e lo restablir tornamai a travèrs d'aquesta meteissa interfàcia, a mens qu’una restriccion suplementària siá mesa en plaça pels operators del site.",
 'revdelete-confirm' => "Confirmatz que volètz efectuar aquesta accion, que ne comprenètz las consequéncias, e qu'o fasètz en acòrd amb [[{{MediaWiki:Policy-url}}|las règlas]].",
 'revdelete-suppress-text' => "La supression deu èsser utilizada '''sonque''' dins los cases seguents :
+* Informacions potencialament difamatòrias
 * Informacions personalas inapropriadas
 *: ''adreça, numèro de telefòn, numèro de seguretat sociala, ...''",
 'revdelete-legend' => 'Metre en plaça de restriccions de version :',
@@ -1242,8 +1244,8 @@ D’autres administrators sus {{SITENAME}} poiràn totjorn accedir al contengut
 'revdelete-hide-user' => 'Nom d’utilizaire/Adreça IP de l’editor',
 'revdelete-hide-restricted' => 'Suprimir aquestas donadas als administrators e mai als autres',
 'revdelete-radio-same' => '(cambiar pas)',
-'revdelete-radio-set' => 'Visible',
-'revdelete-radio-unset' => 'Amagat',
+'revdelete-radio-set' => 'Amagat',
+'revdelete-radio-unset' => 'Visible',
 'revdelete-suppress' => 'Suprimir las donadas dels administrators e tanben dels autres utilizaires',
 'revdelete-unsuppress' => 'Levar las restriccions sus las versions restablidas',
 'revdelete-log' => 'Motiu :',
@@ -1400,7 +1402,7 @@ Atencion, lor indexacion de contengut {{SITENAME}} benlèu es pas a jorn.',
 'mypreferences' => 'Preferéncias',
 'prefs-edits' => 'Nombre d’edicions :',
 'prefsnologin' => 'Vos sètz pas identificat(ada)',
-'prefsnologintext' => 'Vos cal èsser <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} connectat(ada)]</span> per modificar vòstras preferéncias d’utilizaire.',
+'prefsnologintext2' => "$1 per definir las preferéncias d'utilizaire.",
 'changepassword' => 'Modificacion del senhal',
 'prefs-skin' => 'Aparéncia',
 'skin-preview' => 'Previsualizar',
@@ -1437,6 +1439,9 @@ Atencion, lor indexacion de contengut {{SITENAME}} benlèu es pas a jorn.',
 'recentchangesdays-max' => '(maximum $1 {{PLURAL:$1|jorn|jorns}})',
 'recentchangescount' => "Nombre de modificacions d'afichar per defaut :",
 'prefs-help-recentchangescount' => 'Aquò inclutz las modificacions recentas, las paginas d’istorics e los jornals.',
+'prefs-help-watchlist-token2' => 'Aquí la clau secreta del flux Web de vòstra lista de seguiment.
+Tota persona que la coneis poirà legir vòstra lista de seguiment, doncas, la comuniquetz pas.
+[[Special:ResetTokens|Clicatz aicí se la vos cal reïnicializar]].',
 'savedprefs' => 'Las preferéncias son estadas salvadas.',
 'timezonelegend' => 'Fus orari :',
 'localtime' => 'Ora locala :',
@@ -1538,6 +1543,7 @@ Tanben podètz causir de permetre a d’autres de vos contactar per vòstra pagi
 'userrights-changeable-col' => 'Los gropes que podètz cambiar',
 'userrights-unchangeable-col' => 'Los gropes que podètz pas cambiar',
 'userrights-conflict' => "Conflicte de modificacion de dreches d'utilizaire ! Relegissètz e confirmatz vòstras modificacions.",
+'userrights-removed-self' => 'Avètz suprimit vòstres pròpris dreches corrèctament. Del còp, podètz pas mai accedir a aquela pagina.',
 
 # Groups
 'group' => 'Grop :',
@@ -1612,6 +1618,7 @@ Tanben podètz causir de permetre a d’autres de vos contactar per vòstra pagi
 'right-editmyusercss' => 'Modificar vòstres pròpris fichièrs CSS utilizaire',
 'right-editmyuserjs' => 'Modificar vòstres pròpris fichièrs JavaScript utilizaire',
 'right-viewmywatchlist' => 'Afichar vòstra pròpria lista de seguiment',
+'right-editmywatchlist' => 'Modificar vòstra pròpria lista de seguiment. Remarcatz que certanas accions apondràn encara de paginas sens aqueste drech.',
 'right-viewmyprivateinfo' => 'Veire vòstras donadas personalas (exemple adreça, nom vertadièr)',
 'right-editmyprivateinfo' => 'Modificar vòstras donadas personalas (exemple adreça, nom vertadièr)',
 'right-editmyoptions' => 'Modificar vòstras preferéncias',
@@ -1688,6 +1695,7 @@ Tanben podètz causir de permetre a d’autres de vos contactar per vòstra pagi
 'recentchanges' => 'Darrièrs cambiaments',
 'recentchanges-legend' => 'Opcions dels darrièrs cambiaments',
 'recentchanges-summary' => 'Vaquí sus aquesta pagina, los darrièrs cambiaments de {{SITENAME}}.',
+'recentchanges-noresult' => 'Pas cap de modificacion que correspond a aqueles critèris sul periòde indicat.',
 'recentchanges-feed-description' => "Seguissètz los darrièrs cambiaments d'aqueste wiki dins un flux.",
 'recentchanges-label-newpage' => 'Aquesta modificacion a creat una pagina novèla',
 'recentchanges-label-minor' => 'Aqueste cambiament es menor',
@@ -1773,8 +1781,8 @@ Vejatz la [[Special:NewFiles|galariá dels imatges novèls]] per una presentacio
 'filetype-bad-ie-mime' => 'Lo fichièr pòt pas èsser importat perque serià detectat coma « $1 » per Internet Explorer, tipe de fichièr interdich perque potencialament dangierós.',
 'filetype-unwanted-type' => "«.$1»''' es un format de fichièr pas desirat.
 {{PLURAL:$3|Lo tipe de fichièr preconizat es|Los tipes de fichièrs preconizats son}} $2.",
-'filetype-banned-type' => "''' « .$1 » '''{{PLURAL:$4|est pas un tipe de fichièr autorizat|son pas de tipes de fichièrs autorizats}}. 
-{{PLURAL:$3|lo tipe de fichièr autorizat es |los tipes de fichièrs autorizats son}} $2.",
+'filetype-banned-type' => "''' « .$1 » '''{{PLURAL:$4|es pas un tipe de fichièr autorizat|son pas de tipes de fichièrs autorizats}}. 
+{{PLURAL:$3|Lo tipe de fichièr autorizat es|Los tipes de fichièrs autorizats son}} $2.",
 'filetype-missing' => "Lo fichièr a pas cap d'extension (coma « .jpg » per exemple).",
 'empty-file' => "Lo fichièr qu'avètz somés èra void.",
 'file-too-large' => "Lo fichièr qu'avètz somés èra tròp grand.",
@@ -2099,6 +2107,7 @@ Doblidetz pas de verificar se i a pas d’autre ligam cap als modèls abans de l
 'statistics-edits' => 'Modificacions de paginas dempuèi que {{SITENAME}} foguèt installat',
 'statistics-edits-average' => 'Modificacions mejanas per pagina',
 'statistics-views-total' => 'Visitas totalas',
+'statistics-views-total-desc' => 'Las vistas de las paginas non existentas e de las paginas especialas son pas inclusas',
 'statistics-views-peredit' => 'Visitas per modificacions',
 'statistics-users' => '[[Special:ListUsers|Utilizaires]] enregistrats',
 'statistics-users-active' => 'Utilizaires actius',
@@ -2107,6 +2116,7 @@ Doblidetz pas de verificar se i a pas d’autre ligam cap als modèls abans de l
 
 'pageswithprop' => 'Paginas amb una proprietat de pagina',
 'pageswithprop-legend' => 'Paginas amb una proprietat de pagina',
+'pageswithprop-text' => "Aquesta pagina fa la lista de las paginas qu'utilizan una proprietat de pagina particulara.",
 'pageswithprop-prop' => 'Nom de la proprietat :',
 'pageswithprop-submit' => 'Anar',
 'pageswithprop-prophidden-long' => 'valor de proprietat de tèxte long amagada ($1)',
@@ -2200,6 +2210,7 @@ Notatz que d’autres sites pòdon aver un ligam dirècte cap a un fichièr, e d
 'pager-newer-n' => '{{PLURAL:$1|1 mai recenta|$1 mai recentas}}',
 'pager-older-n' => '{{PLURAL:$1|1 mai anciana|$1 mai ancianas}}',
 'suppress' => 'Supervisor',
+'querypage-disabled' => 'Aquesta pagina especiala es desactivada per de rasons de performàncias.',
 
 # Book sources
 'booksources' => 'Obratges de referéncia',
@@ -2373,6 +2384,7 @@ per modificar vòstra lista de seguiment.',
 # Displayed when you click the "watch" button and it is in the process of watching
 'watching' => 'Seguit...',
 'unwatching' => 'Fin del seguit...',
+'watcherrortext' => "Una error s'es producha al moment de la modificacion dels paramètres de vòstra lista de seguiment per « $1 ».",
 
 'enotif_mailer' => 'Sistèma d’expedicion de notificacion de {{SITENAME}}',
 'enotif_reset' => 'Marcar totas las paginas coma visitadas',
@@ -2669,6 +2681,7 @@ Donatz çaijós un motiu precís (per exemple en citant las paginas que son esta
 ** Temptativa d’intimidacion o agarriment
 ** Abús d’utilizacion de comptes multiples
 ** Nom d’utilizaire inacceptable, injuriós o difamant',
+'ipb-hardblock' => 'Empachar los utilizaires connectats de modificar en utilizant aquesta adreça IP',
 'ipbcreateaccount' => 'Empachar la creacion de compte',
 'ipbemailban' => 'Empachar l’utilizaire de mandar de corrièrs electronics',
 'ipbenableautoblock' => 'Blocar automaticament las adreças IP utilizadas per aqueste utilizaire',
@@ -2679,6 +2692,7 @@ Donatz çaijós un motiu precís (per exemple en citant las paginas que son esta
 'ipbotherreason' => 'Motiu diferent o suplementari',
 'ipbhidename' => 'Amagar lo nom d’utilizaire de las modificacions e de las listas',
 'ipbwatchuser' => "Seguir las paginas d'utilizaire e de discussion d'aqueste utilizaire",
+'ipb-disableusertalk' => "Empachar l'utilizaire de modificar sa pagina de discussion pendent lo blocatge",
 'ipb-change-block' => 'Tornar blocar aqueste utilizaire amb aquestes paramètres',
 'ipb-confirm' => 'Confirmar lo blocatge',
 'badipaddress' => "L'adreça IP es incorrècta",
@@ -2892,7 +2906,7 @@ Dins aqueste darrièr cas, podètz tanben utilizar un ligam, coma [[{{#Special:E
 'allmessagesdefault' => 'Messatge per defaut',
 'allmessagescurrent' => 'Messatge actual',
 'allmessagestext' => 'Aquò es la lista de totes los messatges disponibles dins l’espaci MediaWiki.
-Visitatz la [//www.mediawiki.org/wiki/Localisation Localizacion MediaWiki] e [//translatewiki.net translatewiki.net] se desiratz contribuir a la localizacion MediaWiki generica.',
+Visitatz la [https://www.mediawiki.org/wiki/Localisation Localizacion MediaWiki] e [//translatewiki.net translatewiki.net] se desiratz contribuir a la localizacion MediaWiki generica.',
 'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' es pas disponible perque '''\$wgUseDatabaseMessages''' es desactivat.",
 'allmessages-filter-legend' => 'Filtre',
 'allmessages-filter' => 'Filtrar per estat de modificacion :',
@@ -2960,6 +2974,7 @@ Salvatz-lo sus vòstre disc dur puèi importatz-lo aicí.",
 'import-invalid-interwiki' => "Impossible d'importar dempuèi lo wiki especificat.",
 'import-error-edit' => 'La pagina « $1 » es pas estada importada perque sètz pas autorizat a la modificar.',
 'import-error-create' => 'La pagina « $1 » es pas estada importada perque sètz pas autorizat a la crear.',
+'import-error-invalid' => 'Pagina « $1 » es pas importada perque son nom es pas valid.',
 'import-options-wrong' => '{{PLURAL:$2|Marrida opcion|Marridas opcions}} : <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'La pagina raiç provesida es un títol invalid.',
 
@@ -3103,6 +3118,7 @@ Inscriviscatz '''PAS RES''' dedins !",
 'pageinfo-length' => 'Talha de la pagina (en octets)',
 'pageinfo-article-id' => 'Numèro de la pagina',
 'pageinfo-language' => 'Lenga del contengut de la pagina',
+'pageinfo-content-model' => 'Modèl de contengut de la pagina',
 'pageinfo-robot-policy' => 'Indexacion per robòts',
 'pageinfo-robot-index' => 'Autorizada',
 'pageinfo-robot-noindex' => 'Interdicha',
@@ -3187,7 +3203,7 @@ Se l'executatz, vòstre sistèma pòt èsser compromés.",
 'svg-long-desc' => 'Fichièr SVG, resolucion de $1 × $2 pixèls, talha : $3',
 'svg-long-desc-animated' => 'Fichièr SVG animat, talha $1 x $2 pixèls, talha del fichièr : $3',
 'svg-long-error' => 'Fichièr SVG invalid : $1',
-'show-big-image' => 'Imatge en resolucion mai nauta',
+'show-big-image' => "Fichièr d'origina",
 'show-big-image-preview' => "Talha d'aqueste apercebut : $1.",
 'show-big-image-other' => '{{PLURAL:$2|Autra resolucion|Autras resolucions}} : $1.',
 'show-big-image-size' => '$1 × $2 pixèls',
@@ -3657,7 +3673,7 @@ Los autres ligams sus la meteissa linha son considerats coma d'excepcions, per e
 
 # External editor support
 'edit-externally' => 'Modificar aqueste fichièr en utilizant una aplicacion extèrna',
-'edit-externally-help' => "(Consultatz [//www.mediawiki.org/wiki/Manual:External_editors/oc las instruccions d'installacion] per mai d’entresenhas)",
+'edit-externally-help' => "(Consultatz [https://www.mediawiki.org/wiki/Manual:External_editors/oc las instruccions d'installacion] per mai d’entresenhas)",
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tot',
@@ -3753,6 +3769,7 @@ Confirmatz que desiratz tornar crear aqueste article.",
 
 # Separators for various lists, etc.
 'colon-separator' => '&nbsp;:&#32;',
+'quotation-marks' => '« $1 »',
 
 # Multipage image navigation
 'imgmultipageprev' => '← pagina precedenta',
@@ -3842,7 +3859,7 @@ Ensajatz la previsualizacion normala.',
 'version-hook-subscribedby' => 'Definit per',
 'version-version' => '(Version $1)',
 'version-license' => 'Licéncia',
-'version-poweredby-credits' => "Aqueste wiki fonciona gràcias a '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Aqueste wiki fonciona gràcias a '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'autres',
 'version-poweredby-translators' => 'traductors de translatewiki.net',
 'version-software' => 'Logicial installat',
@@ -3876,8 +3893,7 @@ Ensajatz la previsualizacion normala.',
 
 # Special:SpecialPages
 'specialpages' => 'Paginas especialas',
-'specialpages-note' => '----
-* Paginas especialas normalas.
+'specialpages-note' => '* Paginas especialas normalas.
 * <span class="mw-specialpagerestricted">Paginas especialas restrenchas.</span>
 * <span class="mw-specialpagecached">Paginas especialas solament en escondedor (poirián èsser obsolètas).</span>',
 'specialpages-group-maintenance' => 'Rapòrts de mantenença',
@@ -4010,7 +4026,9 @@ Ensajatz la previsualizacion normala.',
 'feedback-error1' => "Error : Resultat de l'IPA pas reconegut",
 'feedback-error2' => 'Error : la modificacion a fracassat',
 'feedback-error3' => "Error : pas cap de responsa de l'API",
+'feedback-thanks' => 'Mercé ! Vòstre comentari es estat publicat sus la pagina "[$2 $1]".',
 'feedback-close' => 'Fach',
+'feedback-bugcheck' => "Remirable ! Verificatz simplament qu'es pas un dels [$1 bugs ja coneguts].",
 'feedback-bugnew' => 'Ai verificat. Senhalar un bug novèl',
 
 # Search suggestions
@@ -4021,6 +4039,8 @@ Ensajatz la previsualizacion normala.',
 'api-error-badaccess-groups' => 'Sètz pas autorizat a cargar de fichièrs sus aqueste wiki.',
 'api-error-badtoken' => 'Error intèrna : marrit « geton ».',
 'api-error-copyuploaddisabled' => 'Los cargaments via URL son desactivats sus aqueste servidor.',
+'api-error-duplicate' => "I a ja {{PLURAL:$1|[$2 un autre fichièr present]|[$2 d'autres fichièrs presents]}} sul site amb lo meteis contengut.",
+'api-error-duplicate-archive' => "I aviá ja {{PLURAL:$1|[$2 un autre fichièr present]|[$2 d'autres fichièrs presents]}} sul site amb lo meteis contengut, mas {{PLURAL:$1|es estat suprimit|son estats suprimits}}.",
 'api-error-duplicate-archive-popup-title' => 'Duplicar {{PLURAL:$1|lo fichièr|los fichièrs}} que {{PLURAL:$1|ja es estat suprimit|je son estats suprimits}}',
 'api-error-duplicate-popup-title' => '{{PLURAL:$1|fichièr|fichièrs}} en doble',
 'api-error-empty-file' => "Lo fichièr qu'avètz somés èra void.",
@@ -4030,20 +4050,31 @@ Ensajatz la previsualizacion normala.',
 'api-error-file-too-large' => "Lo fichièr qu'avètz somés èra tròp grand.",
 'api-error-filename-tooshort' => 'Lo nom del fichièr es tròp cort.',
 'api-error-filetype-banned' => 'Aqueste tipe de fichièr es interdich',
+'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|es pas un tipe de fichièr autorizat|son pas de tipes de fichièrs autorizats}}. 
+{{PLURAL:$3|Lo tipe de fichièr autorizat es|Los tipes de fichièrs autorizats son}} $2.',
 'api-error-filetype-missing' => "L'extension del fichièr es mancanta.",
 'api-error-hookaborted' => "La modificacion qu'avètz ensajat de realizar es estada anullada per una extension.",
+'api-error-http' => 'Error intèrna : se pòt pas connectar al servidor.',
 'api-error-illegal-filename' => 'Lo nom del fichièr es pas autorizat.',
+'api-error-internal-error' => "Error intèrna : Quicòm s'es mal passat al moment del tractament de vòstre impòrt sul wiki.",
+'api-error-invalid-file-key' => "Error intèrna : cap de fichièr pas trobat dins l'emmagazinatge temporari.",
+'api-error-missingparam' => 'Error intèrna : Manca de paramètres dins la requèsta.',
+'api-error-missingresult' => 'Error intèrna : Avèm pas pogut determinar se la còpia aviá capitat.',
 'api-error-mustbeloggedin' => 'Vos cal èsser connectat per telecargar de fichièrs.',
 'api-error-mustbeposted' => 'Error intèrna : aquesta requèsta necessita lo metòde HTTP POST.',
 'api-error-nomodule' => 'Error intèrna : cap de modul de versament pas definit.',
 'api-error-ok-but-empty' => 'Error intèrna : Lo servidor a pas respondut.',
 'api-error-overwrite' => 'Espotir un fichièr existent es pas autorizat.',
 'api-error-stashfailed' => 'Error intèrna : lo servidor a pas pogut enregistrar lo fichièr temporari.',
+'api-error-publishfailed' => 'Error intèrna: Lo servidor a pas pogut publicar lo fichièr temporari.',
+'api-error-timeout' => 'Lo servidor a pas respondut dins lo relambi pervist.',
 'api-error-unclassified' => "Una error desconeguda s'es producha.",
 'api-error-unknown-code' => 'Error desconeguda : « $1 »',
+'api-error-unknown-error' => 'Error intèrna : Quicòm a mal virat al moment del mandadís de vòstre fichièr.',
 'api-error-unknown-warning' => 'Avertiment desconegut : $1',
 'api-error-unknownerror' => 'Error desconeguda : « $1 »',
 'api-error-uploaddisabled' => 'Lo cargament es desactivat sus aqueste wiki.',
+'api-error-verification-error' => 'Aqueste fichièr pòt èsser corromput, o son extension es incorrècta.',
 
 # Durations
 'duration-seconds' => '$1 segonda{{PLURAL:$1||s}}',
index 4d8a75b..f2b8fb2 100644 (file)
@@ -1373,7 +1373,6 @@ $1",
 'mypreferences' => 'ପସନ୍ଦ',
 'prefs-edits' => 'ସମ୍ପାଦନା ସଂଖ୍ୟା:',
 'prefsnologin' => 'ଲଗ‌‌ ଇନ କରିନାହାନ୍ତି',
-'prefsnologintext' => 'ବ୍ୟବହାରକାରୀଙ୍କ ପସନ୍ଦସବୁ ବଦଳାଇବା ପାଇଁ ଆପଣଙ୍କୁ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ଲଗ ଇନ]</span> କରିବାକୁ ପଡ଼ିବ ।',
 'changepassword' => 'ପାସୱର୍ଡ଼ ବଦଳାନ୍ତୁ',
 'prefs-skin' => 'ବହିରାବରଣ',
 'skin-preview' => 'ସାଇତା ଆଗରୁ ଦେଖଣା',
@@ -2890,7 +2889,7 @@ MediaWiki ବ୍ୟବହାର କରି [[Special:Import|ପୃଷ୍ଠା 
 'allmessagesdefault' => 'ଆପେଆପେ ଚିଠିରେ ରହିବା କଥା',
 'allmessagescurrent' => 'ଏବେକର ସନ୍ଦେଶ ଲେଖା',
 'allmessagestext' => 'ଏଥିରେ ମିଡ଼ିଆଉଇକି ନେମସ୍ପେସରେ ଥିବା ସିଷ୍ଟମ ସନ୍ଦେଶର ଏକ ତାଲିକା ଦିଆଗଲା ।
-ଯଦି ଆପଣ ମୂଳ ଦୟାକରି ମିଡ଼ିଆଉଇକି ଆଞ୍ଚଳିକୀକରଣରେ ଭାଗ ନେବା ପାଇଁ ଚାହାନ୍ତି ତେବେ [//www.mediawiki.org/wiki/Localisation ମିଡ଼ିଆଉଇକି ଆଞ୍ଚଳିକୀକରଣ] ଓ [//translatewiki.net translatewiki.net] ଦେଖନ୍ତୁ ।',
+ଯଦି ଆପଣ ମୂଳ ଦୟାକରି ମିଡ଼ିଆଉଇକି ଆଞ୍ଚଳିକୀକରଣରେ ଭାଗ ନେବା ପାଇଁ ଚାହାନ୍ତି ତେବେ [https://www.mediawiki.org/wiki/Localisation ମିଡ଼ିଆଉଇକି ଆଞ୍ଚଳିକୀକରଣ] ଓ [//translatewiki.net translatewiki.net] ଦେଖନ୍ତୁ ।',
 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' ଅଚଳ କରାଯାଇଥିବାରୁ ଏହି ପୃଷ୍ଠାଟି ବ୍ୟବହାର କରାଯାଇପାରିବ ନାହିଁ ।",
 'allmessages-filter-legend' => 'ଛାଣିବା',
 'allmessages-filter' => 'ଆପଣା ପସନ୍ଦରେ ଛାଣିବେ:',
@@ -3633,7 +3632,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'ଏକ ବାହାର ଆପ୍ଲିକେସନ ବ୍ୟବହାର କରି ଏହି ଫାଇଲଟିକୁ ବଦଳାଇବା',
-'edit-externally-help' => '(ଆହୁରି ବି [//www.mediawiki.org/wiki/Manual:External_editors ସଜାଡିବା ନିର୍ଦେଶ] ଦେଖନ୍ତୁ)',
+'edit-externally-help' => '(ଆହୁରି ବି [https://www.mediawiki.org/wiki/Manual:External_editors ସଜାଡିବା ନିର୍ଦେଶ] ଦେଖନ୍ତୁ)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ସବୁ',
@@ -3817,7 +3816,7 @@ $5
 'version-hook-subscribedby' => 'କାହା ଦେଇ ମଗାଯାଇଛି',
 'version-version' => '(ଭାଗ $1)',
 'version-license' => 'ଲାଇସେନ୍ସ',
-'version-poweredby-credits' => "ଏହି ଉଇକିଟି '''[//www.mediawiki.org/ ମିଡ଼ିଆଉଇକି]''' ଦେଇ ପରିଚାଳିତ, ସତ୍ଵାଧିକାର © ୨୦୦୧-$1 $2 ।",
+'version-poweredby-credits' => "ଏହି ଉଇକିଟି '''[https://www.mediawiki.org/ ମିଡ଼ିଆଉଇକି]''' ଦେଇ ପରିଚାଳିତ, ସତ୍ଵାଧିକାର © ୨୦୦୧-$1 $2 ।",
 'version-poweredby-others' => 'ବାକିସବୁ',
 'version-credits-summary' => 'ଆମେ ଏହି ଲୋକମାନଙ୍କୁ [[Special:Version|MediaWiki]]ରେ ସେମାନକର ଅବଦାନ ପାଇଁ ଚିହ୍ନିବାକୁ ଚାହୁଁଛୁ ।',
 'version-license-info' => 'MediaWiki ଏକ ମାଗଣା ସଫ୍ଟୱାର; ଆପଣ ଏହାକୁ ପୁନବଣ୍ଟନ କରିପାରିବେ ବା GNU ଜେନେରାଲ ପବ୍ଲିକ ଲାଇସେନ୍ସ ଅଧିନରେ ବଦଳାଇପାରିବେ ଯାହା ଫ୍ରି ସଫ୍ଟୱାର ଫାଉଣ୍ଡେସନ ଦେଇ ପ୍ରକାଶିତ ହୋଇଥିବ।
@@ -3845,8 +3844,7 @@ MediaWiki ଉପଯୋଗୀ ହେବା ଲକ୍ଷରେ ବଣ୍ଟାଯ
 
 # Special:SpecialPages
 'specialpages' => 'ବିଶେଷ ପୃଷ୍ଠା',
-'specialpages-note' => '----
-* ସାଧାରଣ ବିଶେଷ ପୃଷ୍ଠାମାନ ।
+'specialpages-note' => '* ସାଧାରଣ ବିଶେଷ ପୃଷ୍ଠାମାନ ।
 * <span class="mw-specialpagerestricted">କିଳାଯାଇଥିବା ବିଶେଷ ପୃଷ୍ଠାମାନ ।</span>',
 'specialpages-group-maintenance' => 'ରକ୍ଷଣାବେକ୍ଷଣା ବିବରଣୀ',
 'specialpages-group-other' => 'ବାକି ବିଶେଷ ପୃଷ୍ଠା',
index c14f4d6..ead85ea 100644 (file)
@@ -1724,7 +1724,7 @@ $3',
 
 # External editor support
 'edit-externally' => 'Ивын ацы файл æддаг программæйæ',
-'edit-externally-help' => '(Кæс [//www.mediawiki.org/wiki/Manual:External_editors сывæрыны уагæвæрдтæ] фылдæр базонынæн)',
+'edit-externally-help' => '(Кæс [https://www.mediawiki.org/wiki/Manual:External_editors сывæрыны уагæвæрдтæ] фылдæр базонынæн)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'иууылдæр',
@@ -1789,7 +1789,7 @@ $3',
 'version-other' => 'Æндæр',
 'version-version' => '(Фæлтæр $1)',
 'version-license' => 'Лицензи',
-'version-poweredby-credits' => "Ацы викийæн тых радта '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Ацы викийæн тых радта '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'æндæртæ',
 'version-software-version' => 'Верси',
 
index 171475b..84fd688 100644 (file)
@@ -14,6 +14,7 @@
  * @author Babanwalia
  * @author Gman124
  * @author Guglani
+ * @author Jimidar
  * @author Kaganer
  * @author Raj Singh
  * @author Saurabh123
@@ -630,7 +631,7 @@ $2',
 'gotaccount' => 'ਖਾਤਾ ਪਹਿਲਾਂ ਹੀ ਹੈ? $1',
 'gotaccountlink' => 'ਲਾਗਇਨ',
 'userlogin-resetlink' => 'ਆਪਣੀ ਲਾਗਇਨ ਜਾਣਕਾਰੀ ਭੁੱਲ ਗਏ ਹੋ?',
-'userlogin-resetpassword-link' => 'à¨\86ਪਣਾ à¨ªà¨¾à¨¸à¨µà¨°à¨¡ à¨«à©\87ਰ à¨¬à¨£à¨¾à¨\93',
+'userlogin-resetpassword-link' => 'à¨\86ਪਣਾ à¨ªà¨¾à¨¸à¨µà¨°à¨¡ à¨­à©\81ੱਲ à¨\97à¨\8f à¨¹à©\8b?',
 'helplogin-url' => 'Help: ਲਾਗਇਨ ਕਰਨਾ',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|ਲਾਗਇਨ ਹੋਣ ਲਈ ਮੱਦਦ]]',
 'createacct-join' => 'ਆਪਣੀ ਜਾਣਕਾਰੀ ਹੇਠਾਂ ਦਿਉ।',
@@ -1033,8 +1034,8 @@ page={{FULLPAGENAMEE}}}} ਜ਼ਬਤੀ ਦੇ ਚਿੱਠੇ] ਵਿਚ ਵ
 'revdelete-hide-user' => 'ਸੋਧਣ ਵਾਲ਼ੇ ਦਾ ਮੈਂਬਰ-ਨਾਂ/IP ਪਤਾ ਲੁਕਾਓ',
 'revdelete-hide-restricted' => 'ਪ੍ਰਸ਼ਾਸਕਾਂ ਅਤੇ ਹੋਰਾਂ ਦੀ ਸਮੱਗਰੀ ਲੁਕਾਓ',
 'revdelete-radio-same' => '(ਨਾ ਬਦਲੋ)',
-'revdelete-radio-set' => 'ਹਾਂ',
-'revdelete-radio-unset' => 'ਨਹà©\80à¨\82',
+'revdelete-radio-set' => 'ਲà©\81à¨\95ਵਾਂ',
+'revdelete-radio-unset' => 'ਪਰà¨\97à¨\9f',
 'revdelete-suppress' => 'ਪ੍ਰਸ਼ਾਸਕਾਂ ਅਤੇ ਹੋਰਾਂ ਦੀ ਸਮੱਗਰੀ ਲੁਕਾਓ',
 'revdelete-unsuppress' => 'ਮੁੜ ਬਹਾਲ ਕੀਤੀਆਂ ਰੀਵਿਜ਼ਨਾਂ ਤੋਂ ਰੋਕਾਂ ਹਟਾਓ',
 'revdelete-log' => 'ਕਾਰਨ:',
@@ -1157,7 +1158,6 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'mypreferences' => 'ਪਸੰਦਾਂ',
 'prefs-edits' => 'ਸੋਧਾਂ ਦੀ ਗਿਣਤੀ:',
 'prefsnologin' => 'ਦਾਖ਼ਲ ਨਹੀਂ ਹੋ',
-'prefsnologintext' => 'ਵਰਤੋਂਕਾਰ ਪਸੰਦਾਂ ਸੈੱਟ ਕਰਨ ਲਈ ਤੁਹਾਨੂੰ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ਲਾਗਇਨ]</span> ਕਰਨਾ ਪਵੇਗਾ।',
 'changepassword' => 'ਪਾਸਵਰਡ ਬਦਲੋ',
 'prefs-skin' => 'ਸਕਿਨ',
 'skin-preview' => 'ਝਲਕ',
@@ -2290,7 +2290,7 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 'file-info-size' => '$1 × $2 ਪਿਕਸਲ, ਫ਼ਾਈਲ ਅਕਾਰ: $3, MIME ਕਿਸਮ: $4',
 'file-nohires' => 'ਇਸ ਤੋਂ ਵੱਡੀ ਤਸਵੀਰ ਮੌਜੂਦ ਨਹੀਂ ਹੈ।',
 'svg-long-desc' => 'SVG ਫ਼ਾਈਲ, ਆਮ ਤੌਰ ’ਤੇ $1 × $2 ਪਿਕਸਲ, ਫ਼ਾਈਲ ਦਾ ਅਕਾਰ: $3',
-'show-big-image' => 'ਪà©\82ਰਾ à¨°à©\88à¨\9cà©\8bਲà©\87ਸ਼ਨ',
+'show-big-image' => 'à¨\85ਸਲ à¨«à¨¾à¨\88ਲ',
 
 # Special:NewFiles
 'newimages' => 'ਨਵੀਆਂ ਫ਼ਾਈਲਾਂ ਦੀ ਗੈਲਰੀ',
@@ -2547,7 +2547,7 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 
 # External editor support
 'edit-externally' => 'ਬਾਹਰੀ ਐਪਲੀਕੇਸ਼ਨ ਵਰਤ ਕੇ ਇਸ ਫ਼ਾਈਲ ਨੂੰ ਸੋਧੋ',
-'edit-externally-help' => '(ਹੋਰ ਜਾਣਕਾਰੀ ਲਈ [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] ਵੇਖੋ)',
+'edit-externally-help' => '(ਹੋਰ ਜਾਣਕਾਰੀ ਲਈ [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] ਵੇਖੋ)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ਸਭ',
index 0788b05..f12a2ed 100644 (file)
@@ -786,7 +786,6 @@ Pakitandanan mung maliaring e no makapanaun deng karelang index king kalamnan ni
 'mypreferences' => '↓Deng pinili ku',
 'prefs-edits' => 'Bilang da reng edit:',
 'prefsnologin' => 'ekamaka log',
-'prefsnologintext' => 'Kailangan kang [[Special:UserLogin|maka-login]] ba mong apagana deng pinili ning talagamit (user preferences).',
 'changepassword' => 'Alilan ya ing password',
 'prefs-skin' => 'Balat',
 'skin-preview' => 'I-preview',
@@ -2175,7 +2174,7 @@ Detang aliwa tambing (by default) lang makasalikut.
 
 # External editor support
 'edit-externally' => 'I-edit me ing simpan a ini kapamilatan ning aplikasiun o program a ibat king kilual.',
-'edit-externally-help' => '(Lon me ing [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] para king karagdagang informacion)',
+'edit-externally-help' => '(Lon me ing [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] para king karagdagang informacion)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'eganagana',
index a7a62e8..7c1b11e 100644 (file)
@@ -1026,7 +1026,7 @@ Chés eutes cans is s'ront muchés pèr défeut.
 
 # External editor support
 'edit-externally' => "Éditer ch'fichié-lo aveuc eune éstérne aplicachon",
-'edit-externally-help' => '(Vir [//www.mediawiki.org/wiki/Manual:External_editors/fr chés instruccions d’installachon] pou pus d’informachons)',
+'edit-externally-help' => '(Vir [https://www.mediawiki.org/wiki/Manual:External_editors/fr chés instruccions d’installachon] pou pus d’informachons)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tertous',
@@ -1057,8 +1057,7 @@ Chés eutes cans is s'ront muchés pèr défeut.
 
 # Special:SpecialPages
 'specialpages' => 'Paches éspéchiales',
-'specialpages-note' => '----
-* Paches éspéchiales conformes.
+'specialpages-note' => '* Paches éspéchiales conformes.
 * <span class="mw-specialpagerestricted">Paches éspéchiales réstrintes.</span>
 * <span class="mw-specialpagecached">Paches éspéchiales seulemint in muche (pétète des viuseries).</span>',
 'specialpages-group-maintenance' => "Rapports d'maintenanche",
index 4d12a58..8d65c50 100644 (file)
@@ -9,6 +9,7 @@
  *
  * @author Kaganer
  * @author Krinkle
+ * @author Shirayuki
  * @author Xqt
  * @author לערי ריינהארט
  */
index 9d774d0..606ff5c 100644 (file)
@@ -1181,7 +1181,7 @@ Wonn die Dadai vaännad worre isch, donn konns soi, daß zusedzlischi Õgawe fa
 
 # External editor support
 'edit-externally' => 'Die Dadai midm õnnare Weagzaisch beawaide',
-'edit-externally-help' => '(Gugg uff [//www.mediawiki.org/wiki/Manual:External_editors Inschdallazionsõwaisunge] fa mea Auskinfd)',
+'edit-externally-help' => '(Gugg uff [https://www.mediawiki.org/wiki/Manual:External_editors Inschdallazionsõwaisunge] fa mea Auskinfd)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'alle',
index 54fe1db..d72d1ea 100644 (file)
@@ -903,7 +903,7 @@ Być może właśnie zmienił{{GENDER:|eś|aś|eś(‐aś)}} swoje hasło lub po
 'passwordreset-domain' => 'Domena',
 'passwordreset-capture' => 'Czy pokazywać treść wiadomości e‐mail?',
 'passwordreset-capture-help' => 'Jeśli zaznaczysz to pole, zobaczysz treść wiadomości e‐mail z tymczasowym hasłem, w tej samej formie w jakiej jest wysyłana do użytkownika.',
-'passwordreset-email' => 'Adres e‐mail',
+'passwordreset-email' => 'Adres e‐mail:',
 'passwordreset-emailtitle' => 'Dane konta w {{GRAMMAR:MS.lp|{{SITENAME}}}}',
 'passwordreset-emailtext-ip' => 'Ktoś (prawdopodobnie Ty, spod adresu IP $1) poprosił o zresetowanie twojego hasła w {{GRAMMAR:MS.lp{{SITENAME}}}} ($4). Z tym adresem e‐mailowym powiązane {{PLURAL:$3|jest konto użytkownika|są następujące konta użytkowników:}}
 
@@ -928,10 +928,10 @@ Tymczasowe hasło – $2',
 'changeemail-header' => 'Zmiana adresu e‐mail',
 'changeemail-text' => 'Wypełnij formularz, jeśli chcesz zmienić swój adres poczty elektronicznej. Będziesz musiał wprowadzić hasło, aby potwierdzić tę zmianę.',
 'changeemail-no-info' => 'Musisz być zalogowany, by uzyskać bezpośredni dostęp do tej strony.',
-'changeemail-oldemail' => 'Obecny adres e‐mail',
-'changeemail-newemail' => 'Nowy adres e-mail',
+'changeemail-oldemail' => 'Obecny adres e‐mail:',
+'changeemail-newemail' => 'Nowy adres e-mail:',
 'changeemail-none' => '(brak)',
-'changeemail-password' => 'Hasło {{SITENAME}}:',
+'changeemail-password' => 'Twoje hasło:',
 'changeemail-submit' => 'Zapisz nowy',
 'changeemail-cancel' => 'Anuluj',
 
@@ -1449,7 +1449,6 @@ Jednak informacje o treści {{GRAMMAR:D.lp|{{SITENAME}}}} mogą być w Google ni
 'mypreferences' => 'Preferencje',
 'prefs-edits' => 'Liczba edycji',
 'prefsnologin' => 'Nie jesteś zalogowany',
-'prefsnologintext' => 'Musisz się <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} zalogować]</span> przed zmianą swoich preferencji.',
 'changepassword' => 'Zmiana hasła',
 'prefs-skin' => 'Skórka',
 'skin-preview' => 'podgląd',
@@ -3003,7 +3002,7 @@ Możesz również użyć linku, np. [[{{#Special:Export}}/{{MediaWiki:Mainpage}}
 'allmessagesdefault' => 'Tekst domyślny',
 'allmessagescurrent' => 'Tekst obecny',
 'allmessagestext' => 'Lista wszystkich komunikatów systemowych dostępnych w przestrzeni nazw MediaWiki.
-Odwiedź [//www.mediawiki.org/wiki/Localisation Tłumaczenie MediaWiki] oraz [//translatewiki.net translatewiki.net], jeśli chcesz uczestniczyć w tłumaczeniu oprogramowania MediaWiki.',
+Odwiedź [https://www.mediawiki.org/wiki/Localisation Tłumaczenie MediaWiki] oraz [//translatewiki.net translatewiki.net], jeśli chcesz uczestniczyć w tłumaczeniu oprogramowania MediaWiki.',
 'allmessagesnotsupportedDB' => "Ta strona nie może być użyta, ponieważ zmienna '''\$wgUseDatabaseMessages''' jest wyłączona.",
 'allmessages-filter-legend' => 'Filtr',
 'allmessages-filter' => 'Filtrowanie według stanu modyfikacji:',
@@ -3227,6 +3226,7 @@ Najprawdopodobniej zostało to spowodowane przez link do zewnętrznej strony int
 'pageinfo-length' => 'Długość strony (w bajtach)',
 'pageinfo-article-id' => 'Identyfikator strony',
 'pageinfo-language' => 'Język zawartości strony',
+'pageinfo-content-model' => 'Model zawartości',
 'pageinfo-robot-policy' => 'Indeksowanie przez roboty',
 'pageinfo-robot-index' => 'Dozwolone',
 'pageinfo-robot-noindex' => 'Niedozwolone',
@@ -3789,7 +3789,7 @@ Pozostałe pola zostaną domyślnie ukryte.
 
 # External editor support
 'edit-externally' => 'Edytuj plik, używając zewnętrznej aplikacji',
-'edit-externally-help' => '(Więcej informacji o używaniu [//www.mediawiki.org/wiki/Manual:External_editors zewnętrznych edytorów]).',
+'edit-externally-help' => '(Więcej informacji o używaniu [https://www.mediawiki.org/wiki/Manual:External_editors zewnętrznych edytorów]).',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'wszystkie',
@@ -3894,6 +3894,7 @@ Czy na pewno chcesz ją ponownie utworzyć?",
 
 # Separators for various lists, etc.
 'percent' => '$1&#160;%',
+'quotation-marks' => '„$1”',
 
 # Multipage image navigation
 'imgmultipageprev' => '← poprzednia strona',
@@ -4024,7 +4025,7 @@ Możesz także użyć [[Special:EditWatchlist|standardowego edytora obserwowanyc
 'version-hook-subscribedby' => 'Zapotrzebowany przez',
 'version-version' => '(Wersja $1)',
 'version-license' => 'Licencja',
-'version-poweredby-credits' => "Ta wiki korzysta z oprogramowania '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001‐$1 $2.",
+'version-poweredby-credits' => "Ta wiki korzysta z oprogramowania '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001‐$1 $2.",
 'version-poweredby-others' => 'inni',
 'version-poweredby-translators' => 'tłumacze translatewiki.net',
 'version-credits-summary' => 'Następujące osoby wniosły istotny wkład w rozwój oprogramowania [[Special:Version|MediaWiki]].',
@@ -4043,7 +4044,7 @@ Powinieneś otrzymać [{{SERVER}}{{SCRIPTPATH}}/COPYING kopię licencji GNU Gene
 # Special:Redirect
 'redirect' => 'Przekierowanie według pliku, użytkownika albo identyfikatora wersji',
 'redirect-legend' => 'Przekieruj do pliku lub strony',
-'redirect-summary' => 'Ta strona specjalna przekierowuje do: pliku (o podanej nazwie), do strony (o podanym numerze wersji) albo do strony użytkownika (o podanym identyfikatorze numerycznym). Sposób użycia: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]] albo [[{{#Special:Redirect}}/user/103]].',
+'redirect-summary' => 'Ta strona specjalna przekierowuje do: pliku (o podanej nazwie), do strony (o podanym numerze wersji) albo do strony użytkownika (o podanym identyfikatorze numerycznym). Sposób użycia: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]] albo [[{{#Special:Redirect}}/user/101]].',
 'redirect-submit' => 'Przejdź',
 'redirect-lookup' => 'Wyszukaj:',
 'redirect-value' => 'Wartość:',
@@ -4065,8 +4066,7 @@ Powinieneś otrzymać [{{SERVER}}{{SCRIPTPATH}}/COPYING kopię licencji GNU Gene
 
 # Special:SpecialPages
 'specialpages' => 'Strony specjalne',
-'specialpages-note' => '----
-* Normalne strony specjalne.
+'specialpages-note' => '* Normalne strony specjalne.
 * <span class="mw-specialpagerestricted">Zastrzeżone strony specjalne.</span>',
 'specialpages-group-maintenance' => 'Raporty konserwacyjne',
 'specialpages-group-other' => 'Inne strony specjalne',
index ee5e336..ef6ac50 100644 (file)
@@ -449,7 +449,8 @@ L'aministrator ch'a l'ha blocalo a l'ha lassà sta spiegassion: «$3».",
 'invalidtitle-knownnamespace' => "Tìtol ch'a va nen bin con lë spassi nominal «$2» e ël test «$3»",
 'invalidtitle-unknownnamespace' => 'Tìtol pa bon con nùmer dë spassi nominal $1 e test «$2» sconossù',
 'exception-nologin' => 'Nen rintrà ant ël sistema',
-'exception-nologin-text' => "Costa pàgina o assion a l'ha damanca ch'a sia rintrà an costa wiki.",
+'exception-nologin-text' => "Për piasì, [[Special:Userlogin|ch'a rintra ant ël sistema]] për podèj acede a costa pàgina o a costa assion.",
+'exception-nologin-text-manual' => "Për piasì, ch'a $1 për podèj acede a costa pàgina o costa assion.",
 
 # Virus scanner
 'virus-badscanner' => "Configurassion falà: antivìrus nen conossù: ''$1''",
@@ -999,8 +1000,9 @@ Chiel a peul ancora s-ciairé costa diferensa; a peulo essje pì 'd detaj ant ë
 'revdelete-text' => "Le version scancelà e j'event a së s-ciaireran sempe ant la stòria dla pàgina e ant ij registr, ma sò test al pùblich a j'andrà pì nen.'''
 J'àutri aministrator dzora a {{SITENAME}} a saran ancó sempe bon a s-ciairé ël contnù stërmà e a podran disdëscancelelo andré con la midema antërfacia, sempe che a sia nen stàita butà na restrission adissional.",
 'revdelete-confirm' => "Për piasì, ch'a confema ch'a veul fé sòn, ch'as rend cont dle conseguense, e ch'a lo fa an acòrd con [[{{MediaWiki:Policy-url}}|le régole]].",
-'revdelete-suppress-text' => "La scancelassion a dovrìa '''mach''' esse dovrà për cost cas:
-* Anformassion përsonaj nen aproprià
+'revdelete-suppress-text' => "La scancelassion a dovrìa '''mach''' esse dovrà an costi cas:
+* Anformassion ch'a podrìo esse difamatòrie
+* Anformassion përsonaj inapropià
 *: ''adrësse ëd ca e nùmer ëd teléfon, còdes fiscaj, e via fòrt''",
 'revdelete-legend' => 'But-je coste limitassion-sì a le version scancelà:',
 'revdelete-hide-text' => 'Test dla revision',
@@ -1010,8 +1012,8 @@ J'àutri aministrator dzora a {{SITENAME}} a saran ancó sempe bon a s-ciairé 
 'revdelete-hide-user' => "Stranòm/adrëssa IP dl'utent",
 'revdelete-hide-restricted' => "Stërmé j'anformassion a j'aministrator tan-me a j'àutri",
 'revdelete-radio-same' => '(cambia pa)',
-'revdelete-radio-set' => 'Visìbil',
-'revdelete-radio-unset' => 'Stërmà',
+'revdelete-radio-set' => 'Stërmà',
+'revdelete-radio-unset' => 'Visìbil',
 'revdelete-suppress' => "Smon-je pa ij dat gnanca a j'aministrator",
 'revdelete-unsuppress' => "Gava le limitassion da 'nt le version ciapà andaré",
 'revdelete-log' => 'Rason:',
@@ -1167,7 +1169,7 @@ Ch'a preuva a gionté dnans a soa arserca ël prefiss ''all:'' për sërché an
 'mypreferences' => 'Gust',
 'prefs-edits' => 'Nùmer ëd modìfiche fàite:',
 'prefsnologin' => "A l'é ancó pa rintrà ant ël sistema",
-'prefsnologintext' => 'A deuv esse <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} intrà ant ël sistema]</span> për amposté ij sò gust.',
+'prefsnologintext2' => "Për piasì, ch'a $1 për definì ij gust d'utent.",
 'changepassword' => 'Cangé la ciav',
 'prefs-skin' => 'Facia',
 'skin-preview' => 'Preuva',
@@ -2203,7 +2205,7 @@ Për contaté l\'editor:
 pòsta eletrònica: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-A-i sarà pì gnun-a notìfica ëd modìfiche se chiel a vìsita nen costa pàgina. Che as visa che a peul cangeje la configurassion dle notìfiche a le pàgine che as ten sot-euj ansima a soa lista dla ròba ch\'as ten sot-euj.
+A-i sarà pì gnun-a notìfica an cas d\'àutre atività se chiel a vìsita nen costa pàgina da colegà. Che as visa che a peul cangeje la configurassion dle notìfiche a le pàgine che as ten sot-euj ansima a soa lista dla ròba ch\'as ten sot-euj.
 
 Comunicassion dël sistema ëd notìfica da {{SITENAME}}
 
@@ -2726,7 +2728,7 @@ Se costa ùltima possibilità a fussa lòn che a-j serv, a podrìa ëdcò dovré
 'allmessagesdefault' => "Test che a-i sarìa se a-i fusso pa 'd modìfiche",
 'allmessagescurrent' => 'Test corent',
 'allmessagestext' => "Costa-sì a l'é na lista dij mëssagi ëd sistema disponìbij ant lë spassi nominal MediaWiki.
-Për piasì, ch'a vìsita la [//www.mediawiki.org/wiki/Localisation Localisassion ëd MediaWiki] e [//translatewiki.net translatewiki.net] se a veul contribuì a la localisassion general ëd MediaWiki.",
+Për piasì, ch'a vìsita la [https://www.mediawiki.org/wiki/Localisation Localisassion ëd MediaWiki] e [//translatewiki.net translatewiki.net] se a veul contribuì a la localisassion general ëd MediaWiki.",
 'allmessagesnotsupportedDB' => "Sta pàgina-sì a peul pa esse dovrà përchè '''\$wgUseDatabaseMessages''' a l'é stàit disabilità.",
 'allmessages-filter-legend' => 'Filtr',
 'allmessages-filter' => 'Filtré për stat ëd përsonalisassion:',
@@ -2939,6 +2941,7 @@ Compilé '''NEN''' sòn!",
 'pageinfo-length' => 'Longheur ëd la pàgina (an byte)',
 'pageinfo-article-id' => 'Identificativ ëd la pàgina',
 'pageinfo-language' => 'Lenga dël contnù dla pàgina',
+'pageinfo-content-model' => 'Model dël contnù ëd le pàgine',
 'pageinfo-robot-policy' => 'Indicisassion con robò',
 'pageinfo-robot-index' => 'Autorisà',
 'pageinfo-robot-noindex' => 'Vietà',
@@ -3019,7 +3022,7 @@ An fasend-lo marcé ansima a sò ordinator chiel a podrìa porteje ëd dann a s
 'svg-long-desc' => "archivi an forma SVG, amzure nominaj $1 × $2 pontin, amzura dl'archivi: $3",
 'svg-long-desc-animated' => "Archivi SVG animà, dimension $1 × $2 pontin, amzura dl'archivi: $3",
 'svg-long-error' => 'Archivi SVG nen bon: $1',
-'show-big-image' => 'Version a arzolussion pien-a',
+'show-big-image' => 'Archivi original',
 'show-big-image-preview' => 'Amzure dë sta preuva: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Àutra arzolussion|Àutre arzolussion}}: $1.',
 'show-big-image-size' => '$1 × $2 pontin',
@@ -3491,7 +3494,7 @@ J'àutri a saran stërmà coma stàndard.
 
 # External editor support
 'edit-externally' => "Modifiché st'archivi con un programa estern",
-'edit-externally-help' => "(Lese [//www.mediawiki.org/wiki/Manual:External_editors j'anstrussion d'anstalassion] për avèj pì d'anformassion)",
+'edit-externally-help' => "(Lese [https://www.mediawiki.org/wiki/Manual:External_editors j'anstrussion d'anstalassion] për avèj pì d'anformassion)",
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tute',
@@ -3592,6 +3595,9 @@ Për piasì, che an conferma che da bon a veul torna creélo.",
 'confirm-unwatch-button' => 'Va bin',
 'confirm-unwatch-top' => 'Gavé sta pàgina-sì da la lista dle ròbe che as ten-o sot euj?',
 
+# Separators for various lists, etc.
+'quotation-marks' => '«$1»',
+
 # Multipage image navigation
 'imgmultipageprev' => '← pàgina andré',
 'imgmultipagenext' => 'pàgina anans →',
@@ -3697,7 +3703,7 @@ As peul ëdcò [[Special:EditWatchlist|dovré l'editor sòlit]].",
 'version-hook-subscribedby' => 'A son scrivusse',
 'version-version' => '(Version $1)',
 'version-license' => 'Licensa',
-'version-poweredby-credits' => "Costa wiki-sì a marcia mersì a '''[//www.mediawiki.org/ MediaWiki]''', licensa © 2001-$1 $2.",
+'version-poweredby-credits' => "Costa wiki-sì a marcia grassie a '''[https://www.mediawiki.org/ MediaWiki]''', licensa © 2001-$1 $2.",
 'version-poweredby-others' => 'àutri',
 'version-poweredby-translators' => 'tradutor ëd translatewiki.net',
 'version-credits-summary' => 'I tnoma a aringrassié le përson-e sì-dapress për soa contribussion a [[Special:Version|MediaWiki]].',
@@ -3739,10 +3745,9 @@ A dovrìa avèj arseivù [{{SERVER}}{{SCRIPTPATH}}/COPYING na còpia dla Licensa
 
 # Special:SpecialPages
 'specialpages' => 'Pàgine Speciaj',
-'specialpages-note' => '----
-* Pàgine speciaj normaj.
-* <span class="mw-specialpagerestricted">Pàgine speciaj riservà.</span>
-* <span class="mw-specialpagecached">Pàgine speciaj mach an memòria local (a peulo esse veje).</span>',
+'specialpages-note-top' => 'Legenda',
+'specialpages-note' => '* Pàgine speciaj normaj.
+* <span class="mw-specialpagerestricted">Pàgine speciaj riservà.</span>',
 'specialpages-group-maintenance' => 'Rapòrt ëd manutension',
 'specialpages-group-other' => 'Àutre pàgine speciaj',
 'specialpages-group-login' => 'Intré ant ël sistema / creé un cont',
index 01de94d..2fe655f 100644 (file)
@@ -1008,7 +1008,6 @@ $1",
 'mypreferences' => 'میریاں تانگاں',
 'prefs-edits' => 'تبدیلیاں دی گنتی:',
 'prefsnologin' => 'لاگ ان نئیں او',
-'prefsnologintext' => 'تسیں لازمی <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} لاگ ان]</span> ورتن تانگاں سیٹ کرنا.',
 'changepassword' => 'کنجی بدلو',
 'prefs-skin' => 'چھاڑ',
 'skin-preview' => 'کچا کم',
@@ -2478,7 +2477,7 @@ $1',
 'allmessagesdefault' => 'ڈیفالٹ لکھائی',
 'allmessagescurrent' => 'موجودہ لکھائی',
 'allmessagestext' => 'ایہ لسٹ اے پربندھ سنیعیاں دی  جیہڑے میڈیاوکی دی ناں تھاں تے ہیگے نیں۔
-مہربانی کرکے [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] تے [//translatewiki.net translatewiki.net] تے جاؤ۔
+مہربانی کرکے [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] تے [//translatewiki.net translatewiki.net] تے جاؤ۔
 اگر تسیں میڈیا وکی دے بولی وٹاندرے چ کم کرنا چاندے او۔',
 'allmessagesnotsupportedDB' => "اے صفہ نئیں ورتیا جاسکدا کیوں جے '''\$wgUseDatabaseMessages''' روک دتا گیا اے۔",
 'allmessages-filter-legend' => 'فلٹر',
@@ -3162,7 +3161,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'بارلا سافٹ ویئر استعال کردے ہوۓ اے فائل لکھو',
-'edit-externally-help' => 'زیادہ معلومات آسطے اے [//www.mediawiki.org/wiki/Manual:External_editors] ویکھو۔',
+'edit-externally-help' => 'زیادہ معلومات آسطے اے [https://www.mediawiki.org/wiki/Manual:External_editors] ویکھو۔',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'سارے',
@@ -3345,7 +3344,7 @@ $5
 'version-hook-subscribedby' => 'جینے لئی',
 'version-version' => '(ورین $1)',
 'version-license' => 'لائیسنس',
-'version-poweredby-credits' => "ایس وکی نوں '''[//www.mediawiki.org/ میڈیاوکی]''', copyright © 2001-$1 $2. چلاندا اے۔",
+'version-poweredby-credits' => "ایس وکی نوں '''[https://www.mediawiki.org/ میڈیاوکی]''', copyright © 2001-$1 $2. چلاندا اے۔",
 'version-poweredby-others' => 'دوجے',
 'version-license-info' => 'میڈیاوکی اک مفت سوفٹویر اے؛ تسیں اینوں ونڈ سکدے اوہ تے گنو جنرل پبلک لسنس دیاں شرطاں تے جیہڑیاں فری سوفٹویر فاؤنڈیشن نے چھاپیاں نیں ایدے چ تبدیلی کرسکدے اوہ لسنس دے ورین 2 نال، یا اپنی مرضی نال کسے وی ہور ورین فیر بنن والے ورین نوں۔
 
@@ -3370,8 +3369,7 @@ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 
 # Special:SpecialPages
 'specialpages' => 'خاص صفے',
-'specialpages-note' => '----
-* نارمل خاص صفے.
+'specialpages-note' => '* نارمل خاص صفے.
 * <span class="mw-specialpagerestricted">روکے گۓ خاص صفے.</span>
 * <span class="mw-specialpagecached">کاشے خاص صفے (پرانے ہوگۓ ہون).</span>',
 'specialpages-group-maintenance' => 'مرمت رپورٹ',
index ad44e5a..36e3486 100644 (file)
@@ -1348,7 +1348,7 @@ $messages = array(
 
 # External editor support
 'edit-externally' => "Αλλαγήν τ' αρχείου με προγράμματα ασα εξ μερέα",
-'edit-externally-help' => '(Τερέστεν τα [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] και θα ευρίετε κι άλλα πληροφορίας)',
+'edit-externally-help' => '(Τερέστεν τα [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] και θα ευρίετε κι άλλα πληροφορίας)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ούλαι',
index ebbde80..9310b2e 100644 (file)
@@ -1969,7 +1969,7 @@ Ni mazīngi praskajjintun pāusan en din subban.',
 'allmessagesdefault' => 'Auprestamins teksts',
 'allmessagescurrent' => 'Bigānts teksts',
 'allmessagestext' => 'Sta ast listi wisēisan waīstin preiēiminan en MediaWikis tītelin plattibin.
-Madli kāimalukeis [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] be [//translatewiki.net translatewiki.net] ik tu kwaitēi delīkan īmtun en MediaWikis prōgraminin tulkausnai.',
+Madli kāimalukeis [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] be [//translatewiki.net translatewiki.net] ik tu kwaitēi delīkan īmtun en MediaWikis prōgraminin tulkausnai.',
 'allmessagesnotsupportedDB' => "Šī pāusan ni mazzi būtwei tērpautan, beggi wariābli '''\$wgUseDatabaseMessages''' ast izklaūtan.",
 'allmessages-filter-legend' => 'Filtrīs',
 'allmessages-filter' => 'Filtrīs pa būsenin:',
@@ -2451,7 +2451,7 @@ Kitāi wīrst būwusis kliptan auprestaminai.
 
 # External editor support
 'edit-externally' => 'Redigīs šin pāusan tērpawintei izwinaīnan prōgraman',
-'edit-externally-help' => '(Skaitāis [//www.mediawiki.org/wiki/Manual:External_editors instrukciōnins], kāi gaūlai tūls infōrmaciōnins).',
+'edit-externally-help' => '(Skaitāis [https://www.mediawiki.org/wiki/Manual:External_editors instrukciōnins], kāi gaūlai tūls infōrmaciōnins).',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'wisāi',
@@ -2595,8 +2595,7 @@ Tu mazzi dīgi [[Special:EditWatchlist|tērpautun stāndardiskan editōran]].',
 
 # Special:SpecialPages
 'specialpages' => 'Speciālai pāusai',
-'specialpages-note' => '----
-* Nōrmalai speciālai pāusai.
+'specialpages-note' => '* Nōrmalai speciālai pāusai.
 * <strong class="mw-specialpagerestricted">Speciālai pāusai sen arāikintan preiēisenin.</strong>',
 'specialpages-group-maintenance' => 'Kōnserwaciōnis repōrtai',
 'specialpages-group-other' => 'Kitāi speciālai pāusai',
index e55b989..ecc9892 100644 (file)
@@ -1043,7 +1043,6 @@ $1',
 'mypreferences' => 'غوره توبونه',
 'prefs-edits' => 'د سمونو شمېر:',
 'prefsnologin' => 'غونډال کې نه ياست ننوتي',
-'prefsnologintext' => 'د دې لپاره چې خپل غوره توبونه مو وټاکی، نو پکار ده چې لومړی تاسو غونډال کې <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ننوځی]</span>.',
 'changepassword' => 'پټنوم بدلول',
 'prefs-skin' => 'پوښۍ',
 'skin-preview' => 'مخکتنه',
@@ -1151,6 +1150,7 @@ $1',
 'userrights-lookup-user' => 'کارن ډلې سمبالول',
 'userrights-user-editname' => 'يو کارن نوم وليکۍ:',
 'editusergroup' => 'کارن ډلې سمول',
+'editinguser' => '',
 'userrights-editusergroup' => 'کارن ډلې سمول',
 'saveusergroups' => 'کارن ډلې خوندي کول',
 'userrights-groupsmember' => 'غړی د:',
@@ -2095,7 +2095,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'allmessagesdefault' => 'تلواليزه پيغام متن',
 'allmessagescurrent' => 'اوسنی پيغام متن',
 'allmessagestext' => 'دا د مېډياويکي په نوم-تشيال کې د غونډال د پيغامونو لړليک دی.
-که چېرته تاسې د ميډياويکي په ځايتابه کې ونډې ترسره کول غواړۍ نو لطفاً [//www.mediawiki.org/wiki/Localisation د ميډياويکي ځايتابه] او [//translatewiki.net translatewiki.net] څخه ليدنه وکړۍ.',
+که چېرته تاسې د ميډياويکي په ځايتابه کې ونډې ترسره کول غواړۍ نو لطفاً [https://www.mediawiki.org/wiki/Localisation د ميډياويکي ځايتابه] او [//translatewiki.net translatewiki.net] څخه ليدنه وکړۍ.',
 'allmessagesnotsupportedDB' => "'''Special:Allmessages''' ترېنه کار نه اخيستل کېږي ځکه چې '''\$wgUseDatabaseMessages''' مړ دی.",
 'allmessages-filter-legend' => 'چاڼگر',
 'allmessages-filter-unmodified' => 'نابدلېدلي',
@@ -2487,7 +2487,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'د باندنيو پروګرامونو په کارولو سره دا دوتنه سمول',
-'edit-externally-help' => 'د نورو مالوماتو لپاره [//www.mediawiki.org/wiki/Manual:External_editors د امستنو لارښوونې] وگورۍ.',
+'edit-externally-help' => 'د نورو مالوماتو لپاره [https://www.mediawiki.org/wiki/Manual:External_editors د امستنو لارښوونې] وگورۍ.',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ټول',
@@ -2646,7 +2646,7 @@ $5
 'version-other' => 'بل',
 'version-version' => '(بڼه $1)',
 'version-license' => 'منښتليک',
-'version-poweredby-credits' => "دا ويکي د '''[//www.mediawiki.org/ مېډياويکي]''' په سېک چلېږي، ټولې رښتې خوندي دي © 2001-$1 $2.",
+'version-poweredby-credits' => "دا ويکي د '''[https://www.mediawiki.org/ مېډياويکي]''' په سېک چلېږي، ټولې رښتې خوندي دي © 2001-$1 $2.",
 'version-poweredby-others' => 'نور',
 'version-license-info' => 'مېډياويکي يو وړيا ساوتری دی؛ تاسې يې په ډاډه زړه د GNU د ټولگړو کارېدنو د منښتليک چې د وړيا ساوتريو د بنسټ له مخې خپور شوی، خپرولی او/يا بدلولی شی؛ د منښتليک ۲ بڼه او يا (ستاسې د خوښې) هر يوه وروستۍ بڼه.
 
@@ -2668,8 +2668,7 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'ځانگړي مخونه',
-'specialpages-note' => '----
-* نورماله ځانگړي مخونه.
+'specialpages-note' => '* نورماله ځانگړي مخونه.
 * <strong class="mw-specialpagerestricted">محدوده ځانگړي مخونه.</strong>
 * <span class="mw-specialpagecached">رانيولي ځانگړي مخونه (کېدای شي منسوخ شوی وي).</span>',
 'specialpages-group-maintenance' => 'د څارنې راپورونه',
index 5b26b1b..fcfa787 100644 (file)
@@ -729,6 +729,7 @@ O administrador que efetuou o bloqueio deu a seguinte explicação: "$3".',
 'invalidtitle-unknownnamespace' => 'Título inválido com número de espaço nominal $1 desconhecido e texto "$2"',
 'exception-nologin' => 'Não está autenticado',
 'exception-nologin-text' => 'Esta página ou operação requer que esteja autenticado nesta wiki.',
+'exception-nologin-text-manual' => 'Por favor  $1  para poder aceder a esta página ou acção.',
 
 # Virus scanner
 'virus-badscanner' => "Má configuração: antivírus desconhecido: ''$1''",
@@ -1470,7 +1471,6 @@ Note, no entanto, que a indexação da {{SITENAME}} neste motor de busca pode es
 'mypreferences' => 'Preferências',
 'prefs-edits' => 'Número de edições:',
 'prefsnologin' => 'Não autenticado',
-'prefsnologintext' => 'Precisa de estar <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} autenticado]</span> para definir as suas preferências.',
 'changepassword' => 'Alterar palavra-chave',
 'prefs-skin' => 'Tema',
 'skin-preview' => 'Antever tema',
@@ -3027,7 +3027,7 @@ Se desejar, pode utilizar um link (por exemplo, [[{{#Special:Export}}/{{MediaWik
 'allmessagesdefault' => 'Texto padrão',
 'allmessagescurrent' => 'Texto atual',
 'allmessagestext' => 'Esta é a lista das mensagens de sistema disponíveis no espaço nominal MediaWiki.
-Se deseja colaborar na localização genérica do MediaWiki, visite [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e a [//translatewiki.net translatewiki.net].',
+Se deseja colaborar na localização genérica do MediaWiki, visite [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e a [//translatewiki.net translatewiki.net].',
 'allmessagesnotsupportedDB' => "Esta página não pode ser utilizada, uma vez que '''\$wgUseDatabaseMessages''' foi desativado.",
 'allmessages-filter-legend' => 'Filtro',
 'allmessages-filter' => 'Filtrar pelo estado de personalização:',
@@ -3802,7 +3802,7 @@ Caso o ficheiro tenha sido modificado a partir do seu estado original, alguns de
 
 # External editor support
 'edit-externally' => 'Editar este ficheiro utilizando uma aplicação externa',
-'edit-externally-help' => '(Consulte as [//www.mediawiki.org/wiki/Manual:External_editors instruções de instalação] para mais informações)',
+'edit-externally-help' => '(Consulte as [https://www.mediawiki.org/wiki/Manual:External_editors instruções de instalação] para mais informações)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'todas',
@@ -3995,7 +3995,7 @@ Também pode [[Special:EditWatchlist|editar a lista da maneira convencional]].',
 'version-hook-subscribedby' => 'Subscrito por',
 'version-version' => '(Versão $1)',
 'version-license' => 'Licença',
-'version-poweredby-credits' => "Esta é uma wiki '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Esta é uma wiki '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'outros',
 'version-credits-summary' => 'Gostaríamos de reconhecer as seguintes pessoas pela sua contribuição para o [[Special:Version|MediaWiki]].',
 'version-license-info' => 'O MediaWiki é software livre; pode redistribuí-lo e/ou modificá-lo nos termos da licença GNU General Public License, tal como publicada pela Free Software Foundation; tanto a versão 2 da Licença, como (por opção sua) qualquer versão posterior.
@@ -4035,8 +4035,8 @@ Em conjunto com este programa deve ter recebido [{{SERVER}}{{SCRIPTPATH}}/COPYIN
 
 # Special:SpecialPages
 'specialpages' => 'Páginas especiais',
-'specialpages-note' => '----
-* Páginas especiais normais.
+'specialpages-note-top' => 'Legenda',
+'specialpages-note' => '* Páginas especiais normais.
 * <span class="mw-specialpagerestricted">Páginas especiais restritas.</span>',
 'specialpages-group-maintenance' => 'Relatórios de manutenção',
 'specialpages-group-other' => 'Outras páginas especiais',
index 16b0d6f..5c44e2d 100644 (file)
@@ -1463,7 +1463,6 @@ Note que os índices do sistema de busca externo poderão conter referências de
 'mypreferences' => 'Preferências',
 'prefs-edits' => 'Número de edições:',
 'prefsnologin' => 'Não autenticado',
-'prefsnologintext' => 'É necessário estar <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} autenticado]</span> para definir as suas preferências.',
 'changepassword' => 'Alterar senha',
 'prefs-skin' => 'Tema',
 'skin-preview' => 'Pré-visualização',
@@ -3014,7 +3013,7 @@ Para o último caso, é possível obter o XML a partir de um link direto (por ex
 'allmessagesdefault' => 'Texto padrão',
 'allmessagescurrent' => 'Texto atual',
 'allmessagestext' => 'Esta é uma lista de todas as mensagens de sistema disponíveis no espaço nominal {{ns:mediawiki}}.
-Acesse [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] caso deseje contribuir para traduções do MediaWiki feitas para uso geral.',
+Acesse [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] caso deseje contribuir para traduções do MediaWiki feitas para uso geral.',
 'allmessagesnotsupportedDB' => "Esta página não pode ser utilizada, uma vez que '''\$wgUseDatabaseMessages''' foi desativado.",
 'allmessages-filter-legend' => 'Filtro',
 'allmessages-filter' => 'Filtrar por estado de personalização:',
@@ -3781,7 +3780,7 @@ Por padrão, outros campos estarão ocultos.
 
 # External editor support
 'edit-externally' => 'Editar este arquivo a partir de um programa externo',
-'edit-externally-help' => '(Consulte as [//www.mediawiki.org/wiki/Manual:External_editors instruções de instalação] para maiores informações)',
+'edit-externally-help' => '(Consulte as [https://www.mediawiki.org/wiki/Manual:External_editors instruções de instalação] para maiores informações)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'todas',
@@ -3970,7 +3969,7 @@ Você também pode [[Special:EditWatchlist|editar a lista da maneira convenciona
 'version-hook-subscribedby' => 'Subscrito por',
 'version-version' => '(Versão $1)',
 'version-license' => 'Licença',
-'version-poweredby-credits' => "Este é um wiki '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Este é um wiki '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'outros',
 'version-poweredby-translators' => 'tradutores da translatewiki.net',
 'version-credits-summary' => 'Gostaríamos de agradecer às seguintes pessoas por suas contribuições no [[Special:Version|MediaWiki]]',
@@ -4011,8 +4010,7 @@ Em conjunto com este programa deve ter recebido [{{SERVER}}{{SCRIPTPATH}}/COPYIN
 
 # Special:SpecialPages
 'specialpages' => 'Páginas especiais',
-'specialpages-note' => '----
-* Páginas especiais normais.
+'specialpages-note' => '* Páginas especiais normais.
 * <span class="mw-specialpagerestricted">Páginas especiais restritas.</span>',
 'specialpages-group-maintenance' => 'Relatórios de manutenção',
 'specialpages-group-other' => 'Outras páginas especiais',
index f9a6556..f1da92f 100644 (file)
@@ -70,6 +70,7 @@
  * @author Lejonel
  * @author Li-sung
  * @author Liangent
+ * @author Liuxinyu970226
  * @author Lloffiwr
  * @author MF-Warburg
  * @author Malafaya
@@ -820,24 +821,13 @@ Parameters:
 * $1 - a link back to the current page: {{FULLURL:{{FULLPAGENAME}}}}',
 'youhavenewmessages' => 'The yellow message appearing when someone edited your user talk page.
 
-The format is: "{{int:youhavenewmessages| [[MediaWiki:Newmessageslink/{{SUBPAGENAME}}|{{int:newmessageslink}}]] |[[MediaWiki:Newmessagesdifflink/{{SUBPAGENAME}}|{{int:newmessagesdifflink}}]]}}"
+The format is: "{{int:youhavenewmessages| [[MediaWiki:Newmessageslinkplural/{{SUBPAGENAME}}|{{int:newmessageslinkplural}}]] |[[MediaWiki:Newmessagesdifflinkplural/{{SUBPAGENAME}}|{{int:newmessagesdifflinkplural}}]]}}"
 
 Parameters:
-* $1 - a link points to new messages. Its text is {{msg-mw|Newmessageslink}}
-* $2 - a link points to new messages diff. Its text is {{msg-mw|Newmessagesdifflink}}
+* $1 - a link points to new messages. Its text is {{msg-mw|Newmessageslinkplural}}
+* $2 - a link points to new messages diff. Its text is {{msg-mw|Newmessagesdifflinkplural}}
 See also:
 * {{msg-mw|Youhavenewmessagesmanyusers}}',
-'newmessageslink' => 'This is the first link displayed in an orange rectangle when a user gets a message on their talk page.
-
-Used as <code>$1</code> in message {{msg-mw|Youhavenewmessages}}.
-{{Identical|New messages}}',
-'newmessagesdifflink' => 'This is the second link displayed in an orange rectangle when a user gets a message on his talk page.
-
-Used as <code>$2</code> in message {{msg-mw|Youhavenewmessages}}.
-
-See also:
-* {{msg-mw|Newmessagesdifflinkplural}}
-{{Identical|Last change}}',
 'youhavenewmessagesfromusers' => 'New talk indicator message: the message appearing when someone edited your user talk page. Parameters:
 * $1 - defined as {{msg-mw|newmessageslinkplural}}
 * $2 - defined as {{msg-mw|newmessagesdifflinkplural}}
@@ -851,28 +841,30 @@ Parameters:
 * $2 - {{msg-mw|newmessagesdifflinkplural}}
 See also:
 * {{msg-mw|Youhavenewmessages}}',
-'newmessageslinkplural' => "Like {{msg-mw|Newmessageslink}} but supporting pluralization.
+'newmessageslinkplural' => "This is the first link displayed in an orange rectangle when a user gets a message on their talk page.
 
-Used as <code>$1</code> in {{msg-mw|Youhavenewmessagesfromusers}}.
+Used as <code>$1</code> in messages {{msg-mw|youhavenewmessagesfromusers}}, {{msg-mw|youhavenewmessagesmanyusers}}, {{msg-mw|youhavenewmessages}}.
 
 Parameters:
-* $1 - 1 or 2:
+* $1 - 1 or 999:
 ** 1 - if there was '''one''' new edit since the last time the user has seen their talk page
-** 2 - if there was '''more than one''' new edit since the last time the user has seen their talk page
+** 999 - if there was '''more than one''' new edit since the last time the user has seen their talk page
 {{Identical|New messages}}",
-'newmessagesdifflinkplural' => 'Parameters:
-* $1 - the number of new edits since the last time the user has seen their talk page: it should be used only for correct [[plural]] as in the source text, as the exact number is not relevant.
+'newmessagesdifflinkplural' => "This is the second link displayed in an orange rectangle when a user gets a message on his talk page.
 
-Like {{msg-mw|Newmessagesdifflink}} but supporting pluralization.
+Used as <code>$2</code> in messages {{msg-mw|youhavenewmessagesfromusers}}, {{msg-mw|youhavenewmessagesmanyusers}}, {{msg-mw|youhavenewmessages}}.
 
-Used as <code>$2</code> in message {{msg-mw|Youhavenewmessagesfromusers}}.
-{{Identical|Last change}}',
+Parameters:
+* $1 - 1 or 999:
+** 1 - if there was '''one''' new edit since the last time the user has seen their talk page
+** 999 - if there was '''more than one''' new edit since the last time the user has seen their talk page
+{{Identical|Last change}}",
 'youhavenewmessagesmulti' => 'The alternative of {{msg-mw|youhavenewmessages}} as used on wikis with a special setup so they can receive the "new message" notice on other wikis as well. Used on [http://www.wikia.com/ Wikia].
 
-The format is: "{{int:youhavenewmessagesmulti| [[MediaWiki:Newmessageslink/{{SUBPAGENAME}}|{{int:newmessageslink}}]]}}"
+The format is: "{{int:youhavenewmessagesmulti| [[MediaWiki:Newmessageslinkplural/{{SUBPAGENAME}}|{{int:newmessageslinkplural}}]]}}"
 
 Parameters:
-* $1 - a link points to new messages. Its text is {{msg-mw|Newmessageslink}}',
+* $1 - a link points to new messages. Its text is {{msg-mw|Newmessageslinkplural}}',
 'editsection' => 'Display name of link to edit a section on a content page. Example: [{{MediaWiki:Editsection}}].
 
 {{Identical|Edit}}',
@@ -2030,7 +2022,7 @@ See also:
 Parameters:
 * \$1 - number of categories",
 'edittools' => '{{optional}}
-This text will be shown below edit and upload forms. It can be used to offer special characters not present on most keyboards for copying/pasting, and also often makes them clickable for insertion via a javascript. Since these are seen as specific to a wiki, however, this message should not contain anything but an html comment explaining how it should be used once the wiki has been installed.',
+This text will be shown below edit and upload forms. It can be used to offer special characters not present on most keyboards for copying/pasting, and also often makes them clickable for insertion via a JavaScript. Since these are seen as specific to a wiki, however, this message should not contain anything but an html comment explaining how it should be used once the wiki has been installed.',
 'edittools-upload' => '{{optional}}
 This text will be shown below upload forms. It will default to the contents of edittools.',
 'nocreatetext' => 'Used as error message.
@@ -2452,14 +2444,14 @@ There are three radio buttons in each row, and the captions above each column re
 * {{msg-mw|Revdelete-radio-same}}
 * {{msg-mw|Revdelete-radio-set}}
 * {{msg-mw|Revdelete-radio-unset}}
-{{Identical|Visible}}',
+{{Identical|Hidden}}',
 'revdelete-radio-unset' => 'This message is a part of the [[mw:RevisionDelete|RevisionDelete]] feature. The message is a caption for a column of radioboxes inside a box with {{msg-mw|Revdelete-legend}} as a title.
 [[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]
 There are three radio buttons in each row, and the captions above each column read:
 * {{msg-mw|Revdelete-radio-same}}
 * {{msg-mw|Revdelete-radio-set}}
 * {{msg-mw|Revdelete-radio-unset}}
-{{Identical|Hidden}}',
+{{Identical|Visible}}',
 'revdelete-suppress' => 'Option for oversight; used in [[Special:RevisionDelete]].
 
 See also:
@@ -3035,7 +3027,8 @@ When changing this message, please also update {{msg-mw|vector-editwarning-warni
 {{Identical|Editing}}',
 'rows' => 'Used on [[Special:Preferences]], "Editing" section in the "Size of editing window" fieldset.
 {{Identical|Row}}',
-'columns' => 'Used on [[Special:Preferences]], "Editing" section in the "Size of editing window" fieldset',
+'columns' => 'Used on [[Special:Preferences]], "Editing" section in the "Size of editing window" fieldset.
+{{Identical|Column}}',
 'searchresultshead' => 'This is the label of the tab in [[Special:Preferences|my preferences]] which contains options for searching the wiki.
 
 {{Identical|Search}}',
@@ -4482,7 +4475,8 @@ See also:
 'file-anchor-link' => '{{Identical|File}}',
 'filehist' => 'Text shown on a media description page. Heads the section where the different versions of the file are displayed.',
 'filehist-help' => 'In file description page',
-'filehist-deleteall' => 'Link in image description page for admins.',
+'filehist-deleteall' => 'Link in image description page for admins.
+{{Identical|Delete all}}',
 'filehist-deleteone' => 'Link description on file description page to delete an earlier version of a file.
 
 {{Identical|Delete}}',
@@ -5913,6 +5907,7 @@ Example (in English):
 {{Identical|View}}
 {{Identical|Restore}}',
 'undeleteviewlink' => 'First part of {{msg-mw|undeletelink}}.
+Display name of link to view a deleted page used on [[Special:Log/delete]].
 {{Identical|View}}',
 'undeletereset' => 'Shown on [[Special:Undelete]] as button caption.
 {{Identical|Reset}}',
@@ -6525,7 +6520,8 @@ See also:
 * {{msg-mw|sp-contributions-logs}}
 * {{msg-mw|sp-contributions-deleted}}
 * {{msg-mw|sp-contributions-userrights}}',
-'contribslink' => 'Short for "contributions". Used as display name for a link to user contributions on history pages, [[Special:RecentChanges]], [[Special:Watchlist]], etc.',
+'contribslink' => 'Short for "contributions". Used as display name for a link to user contributions on history pages, [[Special:RecentChanges]], [[Special:Watchlist]], etc.
+{{Identical|Contribution}}',
 'emaillink' => 'Used as display name for a link to send an e-mail to a user in the user tool links. Example: "(Talk | contribs | block | send e-mail)".
 
 {{Identical|E-mail}}',
@@ -7844,7 +7840,8 @@ See also:
 * {{msg-mw|Summary}}
 * {{msg-mw|Accesskey-summary}}
 * {{msg-mw|Tooltip-summary}}',
-'tooltip-iwiki' => 'Format of a sidebar interwiki link tooltip. Parameters:
+'interlanguage-link-title' => '{{Optional}}
+Format of a sidebar interwiki link tooltip. Parameters:
 * $1 - page name in the target wiki
 * $2 - target wiki language autonym',
 
@@ -8012,6 +8009,13 @@ The label and the input box are always hidden.',
 'pageinfo-length' => 'The length of the page, in bytes.',
 'pageinfo-article-id' => 'The numeric identifier of the page.',
 'pageinfo-language' => 'Language in which the page content is written.',
+'pageinfo-content-model' => 'The model in which the page content is written.
+
+Used as label at [{{fullurl:Main Page|action=info}} action=info]. Followed by one of the following messages:
+* {{msg-mw|Content-model-wikitext}}
+* {{msg-mw|Content-model-javascript}}
+* {{msg-mw|Content-model-css}}
+* {{msg-mw|Content-model-text}}',
 'pageinfo-robot-policy' => 'The search engine status of the page.
 
 Used as label. Followed by any one of the following messages:
@@ -8245,7 +8249,8 @@ Non-animated images use {{msg-mw|svg-long-desc}}.',
 * $1 - the error message
 See also:
 * {{msg-mw|Thumbnail error}}',
-'show-big-image' => 'Displayed under an image at the image description page, when it is displayed smaller there than it was uploaded.',
+'show-big-image' => 'Displayed under the file on file description pages, when a reduced-size thumbnail of the original file is being displayed.
+{{Identical|Original file}}',
 'show-big-image-preview' => 'Message shown under the image description page thumbnail.
 
 Can be followed by {{msg-mw|Show-big-image-other}}.
@@ -8284,7 +8289,9 @@ This message may be overridden by a more specific message:
 
 # Special:NewFiles
 'newimages' => 'Page title of [[Special:NewImages]].',
-'imagelisttext' => 'This is text on [[Special:NewImages]]. $1 is the number of files. $2 is the message {{msg-mw|Bydate}}.',
+'imagelisttext' => 'This is text on [[Special:NewImages]]. Parameters:
+* $1 - the number of files
+* $2 - the message {{msg-mw|Bydate}}',
 'newimages-summary' => 'This message is displayed at the top of [[Special:NewImages]] to explain what is shown on that special page.',
 'newimages-legend' => 'Caption of the fieldset for the filter on [[Special:NewImages]]
 
@@ -8916,7 +8923,8 @@ See 2:30 of http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf',
 'exif-originaltransmissionref' => 'This is basically a job ID. This could help an individual keep track of for what reason the image was created.
 
 See Job Id on page 19 of http://www.iptc.org/std/photometadata/specification/IPTC-PhotoMetadata-201007_1.pdf',
-'exif-identifier' => 'A formal identifier for the image. Often this is a URL.',
+'exif-identifier' => 'A formal identifier for the image. Often this is a URL.
+{{Identical|Identifier}}',
 'exif-lens' => 'Description of lens used. This is taken from aux:Lens XMP property. See http://www.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/XMPSpecificationPart2.pdf',
 'exif-serialnumber' => 'Serial number of camera. See aux:SerialNumber in http://www.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/XMPSpecificationPart2.pdf',
 'exif-cameraownername' => 'Who owns the camera.',
@@ -9412,7 +9420,7 @@ Parameters:
 
 # External editor support
 'edit-externally' => 'Displayed on image description pages. See for example [[:Image:Yes.png#filehistory]].',
-'edit-externally-help' => '{{doc-important|Please leave the link "<code>http://www.mediawiki.org/wiki/Manual:External_editors</code>" exactly as it is.}}
+'edit-externally-help' => '{{doc-important|Please leave the link "<code>https://www.mediawiki.org/wiki/Manual:External_editors</code>" exactly as it is.}}
 Displayed on image description pages. See for example [[:Image:Yes.png#filehistory]].',
 
 # 'all' in various places, this might be different for inflected languages
@@ -9552,6 +9560,12 @@ Most languages use a space, but some Asian languages, such as Thai and Chinese,
 'percent' => '{{optional}}',
 'parentheses' => '{{optional}}',
 'brackets' => '{{Optional}}',
+'quotation-marks' => 'Quotation marks, for quoting, sometimes titles etc., depending on the language.
+
+See: [[w:Non-English usage of quotation marks|Non-English usage of quotation marks on Wikipedia]].
+
+Parameters: 
+* $1 - text to be wrapped in quotation marks',
 
 # Multipage image navigation
 'imgmultipageprev' => '{{Identical|Previous page}}',
@@ -9928,7 +9942,8 @@ Used at the end of {{msg-mw|version-poweredby-credits}} on [[Special:Version]].'
 'version-license-info' => '[[wikipedia:GNU GPL|GNU GPL]] notice shown at [[Special:Version]]. See //www.gnu.org/licenses/old-licenses/gpl-2.0-translations.html for available translations.',
 'version-software' => 'Message shown on [[Special:Version]].
 This message is followed by the list of installed software (MediaWiki, PHP and MySQL).',
-'version-software-product' => 'Shown in [[Special:Version]]',
+'version-software-product' => 'Shown in [[Special:Version]].
+{{Identical|Product}}',
 'version-software-version' => '{{Identical|Version}}',
 'version-entrypoints' => 'Header on [[Special:Version]] above a table that lists the URLs of various entry points in this MediaWiki installation. Entry points are the "places" where the wiki\'s content and information can be accessed in various ways, for instance the standard index.php which shows normal pages, histories etc.',
 'version-entrypoints-header-entrypoint' => 'Header for the first column in the entry points table on [[Special:Version]].
@@ -10001,6 +10016,8 @@ See also:
 * {{msg-mw|Accesskey-t-specialpages}}
 * {{msg-mw|Tooltip-t-specialpages}}
 {{Identical|Special page}}',
+'specialpages-note-top' => 'Heading for {{msg-mw|specialpages-note}}.
+{{Identical|Legend}}',
 'specialpages-note' => 'Footer note for the [[Special:SpecialPages]] page',
 'specialpages-group-maintenance' => '{{doc-special-group|like=[[Special:DoubleRedirects]], [[Special:LonelyPages]] and [[Special:WantedPages]]}}',
 'specialpages-group-other' => '{{doc-special-group|like=[[Special:AdminLinks]] and [[Special:BookSources]]}}',
@@ -10043,7 +10060,8 @@ It appears that the word 'valid' describes 'tags', not 'change'. It also appears
 Parameters:
 * $1 - number of distinct tags for given edit
 * $2 - comma-separated list of tags for given edit',
-'tags-title' => 'The title of [[Special:Tags]]',
+'tags-title' => 'The title of [[Special:Tags]].
+{{Identical|Tag}}',
 'tags-intro' => 'Explanation on top of [[Special:Tags]]. For more information on tags see [[mw:Manual:Tags|MediaWiki]].',
 'tags-tag' => 'Caption of a column in [[Special:Tags]]. For more information on tags see [[mw:Manual:Tags|MediaWiki]].',
 'tags-display-header' => 'Caption of a column in [[Special:Tags]]. For more information on tags see [[mw:Manual:Tags|MediaWiki]].',
index 4d7ca96..1a71c0c 100644 (file)
@@ -1362,7 +1362,6 @@ Imaymanata [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} qulluy ha
 'mypreferences' => 'Allinkachinaykuna',
 'prefs-edits' => 'Hukchasqakunap yupaynin:',
 'prefsnologin' => 'Manam yaykurqankichu',
-'prefsnologintext' => '<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} Yaykunaykim]</span> tiyan allinkachinaykikunata hukchanaykipaq.',
 'changepassword' => 'Yaykuna rimata hukchay',
 'prefs-skin' => 'Qara',
 'skin-preview' => 'Ñawpaqta qhaway',
@@ -2841,7 +2840,7 @@ Qhipaqta munaspaykiqa, t'inkitapas llamk'achiyta atinki, ahinataq [[{{#Special:E
 'allmessagesdefault' => 'Ñawpaq qillqa',
 'allmessagescurrent' => 'Kunan kachkaq qillqa',
 'allmessagestext' => "Kayqa MediaWiki suti k'itipi llamk'achinalla willaykunayuq sutisuyum.
-Ama hina kaspa, [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] nisqata, [//translatewiki.net translatewiki.net] nisqatapas watukuy, MediaWiki nisqata t'ikraywan yanapayta munaspaykiqa.",
+Ama hina kaspa, [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] nisqata, [//translatewiki.net translatewiki.net] nisqatapas watukuy, MediaWiki nisqata t'ikraywan yanapayta munaspaykiqa.",
 'allmessagesnotsupportedDB' => "Kay p'anqaqa manam llamk'achinallachu, '''\$wgUseDatabaseMessages''' nisqaman ama nisqa kaptinmi.",
 'allmessages-filter-legend' => "Ch'illchina",
 'allmessages-filter' => "Ch'illchina, allinchasqa kachkaykama:",
@@ -3596,7 +3595,7 @@ Kikin siq'ipi ima qatiq t'inkillapas sapaqllatam hamut'arisqa, ahinataq siq'ipi
 
 # External editor support
 'edit-externally' => "Kay willañiqita hawa rurana wakichiwan llamk'apuy",
-'edit-externally-help' => 'Astawan willasunaykipaqqa [//www.mediawiki.org/wiki/Manual:External_editors tiyachina yanapata] (inlish simipi) ñawiriy.',
+'edit-externally-help' => 'Astawan willasunaykipaqqa [https://www.mediawiki.org/wiki/Manual:External_editors tiyachina yanapata] (inlish simipi) ñawiriy.',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'lliw',
@@ -3767,7 +3766,7 @@ Sapsilla ñawpaq qhawariyta tukuykachay.',
 'version-hook-subscribedby' => 'Kay runap mañaykusqan:',
 'version-version' => '(Musuqchasqa $1)',
 'version-license' => 'Saqillay',
-'version-poweredby-credits' => "Kay wikitaqa '''[//www.mediawiki.org/ MediaWiki-m]''' atichin, copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Kay wikitaqa '''[https://www.mediawiki.org/ MediaWiki-m]''' atichin, copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'hukkuna',
 'version-credits-summary' => "Kay qatiqpi runakunatam [[Special:Version|MediaWiki]] nisqapaq llamk'apusqankunapaq riqsichiyta munayku.",
 'version-license-info' => "MediaWiki llamp'u kaqqa qispim; mast'ariytam icha wakinchaytam atinki GNU General Public License nisqa saqillaypa kamachisqankama, Free Software Foundation nisqap uyaychasqan; saqillaypa iskay ñiqin musuqchasqan, munaspaykiqa aswan musuq musuqchasqan.
@@ -3806,8 +3805,7 @@ MediaWikitaqa mast'ariyku runakunata yanapanapaqmi, ichataq MANAM FIYAKUYTA ATIY
 
 # Special:SpecialPages
 'specialpages' => "Sapaq p'anqakuna",
-'specialpages-note' => '----
-* Sapsipaq sapaq p\'anqakuna.
+'specialpages-note' => '* Sapsipaq sapaq p\'anqakuna.
 * <span class="mw-specialpagerestricted">Sapaqkunallapaq sapaq p\'anqakuna.</span>',
 'specialpages-group-maintenance' => 'Hatalliy willaykuna',
 'specialpages-group-other' => "Huk sapaq p'anqakuna",
index 47e5546..36d89bc 100644 (file)
@@ -867,7 +867,7 @@ Shuk aspipi, shukniki tinkika ima tinkita wichkashkami kanka nin, kay aspipi shu
 
 # External editor support
 'edit-externally' => 'Kay archiwuta shuk hawa antanawan llankana',
-'edit-externally-help' => 'Ashtawan yachakunkakak [//www.mediawiki.org/wiki/Manual:External_editors kay yanapata] (inlish shimipi) killkakatipay',
+'edit-externally-help' => 'Ashtawan yachakunkakak [https://www.mediawiki.org/wiki/Manual:External_editors kay yanapata] (inlish shimipi) killkakatipay',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tukuy',
index f944b96..ad053df 100644 (file)
@@ -11,6 +11,7 @@
  * @author Gion-andri
  * @author Kaganer
  * @author Kazu89
+ * @author Shirayuki
  * @author Urhixidur
  * @author לערי ריינהארט
  */
@@ -1098,7 +1099,6 @@ Considerescha che lur index da {{SITENAME}} po cuntegnair datas ch'èn betg pli
 'mypreferences' => 'Preferenzas',
 'prefs-edits' => 'Dumber da las modificaziuns:',
 'prefsnologin' => "Betg t'annunzià",
-'prefsnologintext' => 'Ti stos esser <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} t\'annunzià]</span> per midar tias preferenzas.',
 'changepassword' => 'Midar pled-clav',
 'prefs-skin' => 'Skin',
 'skin-preview' => 'Prevista',
@@ -2607,7 +2607,7 @@ En cas che ti vul be exportar l'ultima versiun pos ti era utilisar in link, p.ex
 'allmessagesdefault' => 'text original',
 'allmessagescurrent' => 'text actual',
 'allmessagestext' => 'Quai è ina glista da tut ils messadis dals differents tips da paginas da MediaWiki che vegnan utilisadas da la software MediaWiki.
-Fai ina visita sin [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] sche ti vuls gidar da translatar la software MediaWiki.',
+Fai ina visita sin [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] sche ti vuls gidar da translatar la software MediaWiki.',
 'allmessagesnotsupportedDB' => "Questa pagina na po betg vegnir mussada, perquai che '''\$wgUseDatabaseMessages''' è vegnì deactivà.",
 'allmessages-filter-legend' => 'Filtrar',
 'allmessages-filter' => 'Filtrar tenor standi da modificaziun:',
@@ -3343,7 +3343,7 @@ Sche la datoteca è vegnida midada dal status original èn tscherts detagls even
 
 # External editor support
 'edit-externally' => 'Modifitgar questa datoteca cun in program extern',
-'edit-externally-help' => "(Legia [//www.mediawiki.org/wiki/Manual:External_editors instrucziuns d'installaziun] per ulteriuras infurmaziuns)",
+'edit-externally-help' => "(Legia [https://www.mediawiki.org/wiki/Manual:External_editors instrucziuns d'installaziun] per ulteriuras infurmaziuns)",
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tut',
@@ -3530,7 +3530,7 @@ Ti pos era utilisar [[Special:EditWatchlist|la pagina da standard]].',
 'version-hook-subscribedby' => 'Abonnà da',
 'version-version' => '(Versiun $1)',
 'version-license' => 'Licenza',
-'version-poweredby-credits' => "Questa wiki utilisescha '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Questa wiki utilisescha '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'auters',
 'version-credits-summary' => 'Nus vulain engraziar a suandantas persunas per lur contribuziun a [[Special:Version|MediaWiki]].',
 'version-license-info' => "MediaWiki è software liba; ti la pos redistribuir e/u la modifitgar tenor ils terms da la GNU General Public License sco ch'ella vegn publitgada da la Free Software Foundation; ti pos utilisar la versiun 2 da la licenza u (sche ti vul) mintga versiun che succeda. 
@@ -3558,8 +3558,7 @@ Ti duessas avair retschavì [{{SERVER}}{{SCRIPTPATH}}/COPYING ina copia da la GN
 
 # Special:SpecialPages
 'specialpages' => 'Paginas spezialas',
-'specialpages-note' => '----
-* Paginas spezialas normalas.
+'specialpages-note' => '* Paginas spezialas normalas.
 * <span class="mw-specialpagerestricted">Paginas spezialas restrenschidas.</span>
 * <span class="mw-specialpagecached">Paginas spezialas en il cache (pon esser antiquadas).</span>',
 'specialpages-group-maintenance' => 'Rapports da mantegnamant',
index e2765c6..3343218 100644 (file)
@@ -709,7 +709,8 @@ Administratorul care a efectuat blocarea a furnizat explicația: „$3”.',
 'invalidtitle-knownnamespace' => 'Titlu invalid cu spațiul de nume „$2” și textul „$3”',
 'invalidtitle-unknownnamespace' => 'Titlu invalid cu numărul spațiului de nume $1 necunoscut și textul „$2”',
 'exception-nologin' => 'Neautentificat{{GENDER:||ă}}.',
-'exception-nologin-text' => 'Această pagină sau acțiune necesită ca dumneavoastră să fiți autentificat{{GENDER:||ă}} pe acest wiki.',
+'exception-nologin-text' => 'Vă rugăm să vă [[Special:Userlogin|autentificați]] pentru a accesa această pagină sau acțiune.',
+'exception-nologin-text-manual' => 'Vă rugăm să vă $1 pentru a accesa această pagină sau acțiune.',
 
 # Virus scanner
 'virus-badscanner' => "Configurație greșită: scaner de virus necunoscut: ''$1''",
@@ -756,7 +757,7 @@ Nu uitați să vă modificați [[Special:Preferences|preferințele]] pentru {{SI
 'gotaccount' => "Aveți deja un cont de utilizator? '''$1'''.",
 'gotaccountlink' => 'Autentificați-vă',
 'userlogin-resetlink' => 'Ați uitat datele de autentificare?',
-'userlogin-resetpassword-link' => 'Resetare parolă',
+'userlogin-resetpassword-link' => 'V-ați uitat parola?',
 'helplogin-url' => 'Help:Autentificare',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Ajutor la autentificare]]',
 'userlogin-loggedin' => 'Sunteți deja {{GENDER:$1|autentificat|autentificată}} ca {{GENDER:$1|$1}}.
@@ -827,7 +828,7 @@ să folosiți vechea parolă.',
 'acct_creation_throttle_hit' => 'De la această adresă IP, vizitatorii sitului au creat {{PLURAL:$1|1 cont|$1 conturi|$1 de conturi}} de utilizator în ultimele zile, acest număr de noi conturi fiind maximul admis în această perioadă de timp.
 Prin urmare, vizitatorii care folosesc același IP nu mai pot crea alte conturi pentru moment.',
 'emailauthenticated' => 'Adresa de e-mail a fost autentificată pe $2, la $3.',
-'emailnotauthenticated' => 'Adresa de email <strong>nu este autentificată încă</strong>. Nici un email nu va fi trimis pentru nici una din întrebuințările următoare.',
+'emailnotauthenticated' => 'Adresa dumneavoastră de e-mail nu este autentificată încă. Nici un e-mail nu va fi trimis pentru nici una din întrebuințările următoare.',
 'noemailprefs' => 'Nu a fost specificată o adresă email, următoarele nu vor funcționa.',
 'emailconfirmlink' => 'Confirmați adresa dvs. de email',
 'invalidemailaddress' => 'Adresa de email nu a putut fi acceptată pentru că pare a avea un format invalid. Vă rugăm să reintroduceți o adresă bine formatată sau să goliți acel câmp.',
@@ -1263,8 +1264,9 @@ funcție, fie versiunea specificată nu există, ori sunteți pe cale să ascund
 'revdelete-text' => "'''Versiunile șterse vor apărea în istoricul paginii, dar conținutul lor nu va fi accesibil publicului.''' Administratorii {{SITENAME}} pot accesa conținutul șters și îl pot recupera prin aceeași interfață, dacă nu este impusă altă restricție de către operatorii sitului.",
 'revdelete-confirm' => 'Vă rugăm să confirmați că intenționați să faceți acest lucru, că înțelegeți consecințele și că faceți asta în conformitate cu [[{{MediaWiki:Policy-url}}|politica]].',
 'revdelete-suppress-text' => "Suprimarea trebuie folosită '''doar''' în următoarele cazuri:
+* Informații potențial calomnioase
 * Informații personale inadecvate
-*: ''adrese și numere de telefon personale, CNP, numere de securitate socială, etc.''",
+*: ''adrese și numere de telefon personale, CNP, numere de securitate socială etc.''",
 'revdelete-legend' => 'Restricții de afișare',
 'revdelete-hide-text' => 'Textul versiunii',
 'revdelete-hide-image' => 'Șterge conținutul fișierului',
@@ -1273,8 +1275,8 @@ funcție, fie versiunea specificată nu există, ori sunteți pe cale să ascund
 'revdelete-hide-user' => 'Numele de utilizator sau adresa IP',
 'revdelete-hide-restricted' => 'Ascunde informațiile față de administratori și față de alți utilizatori',
 'revdelete-radio-same' => '(nu schimba)',
-'revdelete-radio-set' => 'Vizibil',
-'revdelete-radio-unset' => 'Ascuns',
+'revdelete-radio-set' => 'Ascuns',
+'revdelete-radio-unset' => 'Vizibil',
 'revdelete-suppress' => 'Ascunde versiunile și față de administratori',
 'revdelete-unsuppress' => 'Anulează restricțiile la versiunile restaurate',
 'revdelete-log' => 'Motivul ștergerii:',
@@ -1430,7 +1432,7 @@ Detalii se pot găsi în [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE
 'mypreferences' => 'Preferințe',
 'prefs-edits' => 'Număr de modificări:',
 'prefsnologin' => 'Neautentificat',
-'prefsnologintext' => 'Trebuie să fiți <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} autentificat]</span> pentru a vă putea salva preferințele.',
+'prefsnologintext2' => 'Vă rugăm să vă $1 pentru a vă seta preferințele de utilizator.',
 'changepassword' => 'Schimbare parolă',
 'prefs-skin' => 'Aspect',
 'skin-preview' => 'Previzualizare',
@@ -2459,9 +2461,9 @@ Puteți contacta utilizatorul:
 e-mail: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Nu veți mai primi notificări în cazul unor viitoare modificări până când nu veți vizitați pagina. Puteți de asemenea reseta notificările pentru toate pagini pe care le urmăriți.
+Nu veți mai primi notificări în cazul unei viitoare activități până când nu veți vizitați pagina ca utilizator autentificat. Puteți de asemenea reseta notificările pentru toate pagini pe care le urmăriți.
 
-             Al dumneavoastră amic, sistemul de notificare de la {{SITENAME}}
+Al dumneavoastră amic, sistemul de notificare de la {{SITENAME}}
 
 --
 Pentru a modifica setările notificării prin e-mail, vizitați
@@ -2983,7 +2985,7 @@ Pentru a exporta, introduceți titlurile în căsuța de mai jos, unul pe linie,
 'allmessagesdefault' => 'Textul standard',
 'allmessagescurrent' => 'Textul curent',
 'allmessagestext' => 'Aceasta este lista completă a mesajelor disponibile în domeniul MediaWiki.
-Vă rugăm să vizitați [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] și [//translatewiki.net translatewiki.net] dacă vreți să contribuiți la localizarea programului MediaWiki generic.',
+Vă rugăm să vizitați [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] și [//translatewiki.net translatewiki.net] dacă vreți să contribuiți la localizarea programului MediaWiki generic.',
 'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' nu poate fi folosit deoarece '''\$wgUseDatabaseMessages''' este închisă.",
 'allmessages-filter-legend' => 'Filtru',
 'allmessages-filter' => 'Filtru după statutul de modificare:',
@@ -3147,7 +3149,7 @@ Un dosar temporar lipsește.',
 Permite adăugarea unui motiv în descrierea modificărilor',
 'tooltip-preferences-save' => 'Salvează preferințele',
 'tooltip-summary' => 'Descrieți pe scurt modificarea',
-'tooltip-iwiki' => '$1 – $2',
+'interlanguage-link-title' => '$1 – $2',
 
 # Stylesheets
 'common.css' => '/** CSS plasate aici vor fi aplicate tuturor aparițiilor */',
@@ -3195,6 +3197,7 @@ Permite adăugarea unui motiv în descrierea modificărilor',
 'pageinfo-length' => 'Lungimea paginii (în octeți)',
 'pageinfo-article-id' => 'ID pagină',
 'pageinfo-language' => 'Limba conținutului paginii',
+'pageinfo-content-model' => 'Modelul conținutului paginii',
 'pageinfo-robot-policy' => 'Indexare de către roboți',
 'pageinfo-robot-index' => 'Permisă',
 'pageinfo-robot-noindex' => 'Nepermisă',
@@ -3282,7 +3285,7 @@ Executându-l, sistemul dvs. poate fi compromis.",
 'svg-long-desc' => 'Fișier SVG, cu dimensiunea nominală de $1 × $2 pixeli, mărime fișier: $3',
 'svg-long-desc-animated' => 'Fișier SVG animat, cu dimensiunea nominală de $1 × $2 pixeli, mărime fișier: $3',
 'svg-long-error' => 'Fișier SVG invalid: $1',
-'show-big-image' => 'Rezoluție maximă',
+'show-big-image' => 'Fișier original',
 'show-big-image-preview' => 'Mărimea acestei previzualizări: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Altă rezoluție|Alte rezoluții}}: $1.',
 'show-big-image-size' => '$1 × $2 pixeli',
@@ -3753,7 +3756,7 @@ Altele vor fi ascunse implicit.
 
 # External editor support
 'edit-externally' => 'Editează acest fișier folosind o aplicație externă.',
-'edit-externally-help' => '(Vedeți [//www.mediawiki.org/wiki/Manual:External_editors instrucțiuni de instalare] pentru mai multe informații)',
+'edit-externally-help' => '(Vedeți [https://www.mediawiki.org/wiki/Manual:External_editors instrucțiuni de instalare] pentru mai multe informații)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'toate',
@@ -3762,7 +3765,7 @@ Altele vor fi ascunse implicit.
 'limitall' => 'toate',
 
 # Email address confirmation
-'confirmemail' => 'Confirmă adresa de e-mail',
+'confirmemail' => 'Confirmare adresă e-mail',
 'confirmemail_noemail' => 'Nu aveți o adresă de e-mail validă setată la [[Special:Preferences|preferințe]].',
 'confirmemail_text' => '{{SITENAME}} solicită validarea adresei de e-mail înaintea utilizării funcțiilor specifice poștei electronice.
 Apăsați butonul de mai jos pentru ca un e-mail de confirmare să fie trimis către adresa dumneavoastră.
@@ -3844,6 +3847,9 @@ Vă rugăm să confirmați faptul că într-adevăr doriți să recreați acest
 'confirm-unwatch-button' => 'OK',
 'confirm-unwatch-top' => 'Eliminați această pagină din lista de pagini urmărite?',
 
+# Separators for various lists, etc.
+'quotation-marks' => '„$1”',
+
 # Multipage image navigation
 'imgmultipageprev' => '← pagina anterioară',
 'imgmultipagenext' => 'pagina următoare →',
@@ -3929,7 +3935,7 @@ Puteți folosi în schimb [[Special:EditWatchlist|editorul standard]].',
 'version-hook-subscribedby' => 'Subscris de',
 'version-version' => '(Versiune $1)',
 'version-license' => 'Licență',
-'version-poweredby-credits' => "Acest wiki este dezvoltat de '''[//www.mediawiki.org/ MediaWiki]''', drepturi de autor © 2001-$1 $2.",
+'version-poweredby-credits' => "Acest wiki este motorizat de '''[https://www.mediawiki.org/ MediaWiki]''', drepturi de autor © 2001-$1 $2.",
 'version-poweredby-others' => 'alții',
 'version-poweredby-translators' => 'traducătorii de la translatewiki.net',
 'version-credits-summary' => 'Am dori să amintim următoarele persoane pentru contribuțiile aduse proiectului [[Special:Version|MediaWiki]].',
@@ -3970,10 +3976,9 @@ MediaWiki este distribuit în speranța că va fi folositor, dar FĂRĂ VREO GAR
 
 # Special:SpecialPages
 'specialpages' => 'Pagini speciale',
-'specialpages-note' => '----
-* Pagini speciale normale.
-* <span class="mw-specialpagerestricted">Pagini speciale restricționate.</span>
-* <span class="mw-specialpagecached">Pagini speciale aflate doar în memoria cache (pot fi neactualizate).</span>',
+'specialpages-note-top' => 'Legendă',
+'specialpages-note' => '* Pagini speciale normale.
+* <span class="mw-specialpagerestricted">Pagini speciale restricționate.</span>',
 'specialpages-group-maintenance' => 'Întreținere',
 'specialpages-group-other' => 'Alte pagini speciale',
 'specialpages-group-login' => 'Autentificare / creare cont',
index 0203dd1..fef0ddc 100644 (file)
@@ -1188,7 +1188,6 @@ Però fa attenzione purcè l'indice lore sus a {{SITENAME}} ponne condenè pàgg
 'mypreferences' => 'Me piace accussì',
 'prefs-edits' => 'Numere de cangiaminde:',
 'prefsnologin' => 'Non ge sinde colleghete',
-'prefsnologintext' => 'Tu a essere <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} colleghete]</span> pe \'mbostà le preferenze de l\'utinde.',
 'changepassword' => "Cange 'a password",
 'prefs-skin' => 'Skin',
 'skin-preview' => 'Andeprime',
@@ -2772,7 +2771,7 @@ Cumme urteme case, tu puè pure ausà 'nu collegamende, pe esembie [[{{#Special:
 'allmessagesdefault' => 'Teste de default',
 'allmessagescurrent' => 'Teste corrende',
 'allmessagestext' => "Queste jè 'na liste de tutte le messagge d'u sisteme ca se ponne acchià jndr'à le namespace de MediaUicchi.
-Pe piacere vè vide [//www.mediawiki.org/wiki/Localisation Localizzazione de MediaUicchi] e [//translatewiki.net translatewiki.net] ce tu vuè ccu condrebbuisce a 'a localizzazione de MediaUicchi.",
+Pe piacere vè vide [https://www.mediawiki.org/wiki/Localisation Localizzazione de MediaUicchi] e [//translatewiki.net translatewiki.net] ce tu vuè ccu condrebbuisce a 'a localizzazione de MediaUicchi.",
 'allmessagesnotsupportedDB' => "Sta pàgene non ge pò essere ausate purcè '''\$wgUseDatabaseMessages''' ha state disabbilitate.",
 'allmessages-filter-legend' => 'Filtre',
 'allmessages-filter' => "Filtre cu 'nu state personalizzate:",
@@ -3661,7 +3660,7 @@ $8',
 
 # External editor support
 'edit-externally' => "Cange stu fail usanne n'applicazione esterne",
-'edit-externally-help' => "(Vide le [//www.mediawiki.org/wiki/Manual:External_editors 'struzione de configurazione] pe avèje cchiù dettaglie)",
+'edit-externally-help' => "(Vide le [https://www.mediawiki.org/wiki/Manual:External_editors 'struzione de configurazione] pe avèje cchiù dettaglie)",
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tutte',
@@ -3940,7 +3939,7 @@ Tu puè pure [[Special:EditWatchlist|ausà 'u cangiatore standàrd]].",
 'version-version' => '(Versione $1)',
 'version-svn-revision' => '(r$2)',
 'version-license' => 'Licenze',
-'version-poweredby-credits' => "Sta Uicchi jè fatte da '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Sta Uicchi jè fatte da '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'otre',
 'version-poweredby-translators' => 'tradutture de translatewiki.net',
 'version-credits-summary' => 'Nuje vulesseme acchià le persone seguende pe le lore condrebbute a [[Special:Version|MediaUicchi]].',
@@ -3981,8 +3980,7 @@ Avisse avè ricevute [{{SERVER}}{{SCRIPTPATH}}/COPYING 'na copie d'a GNU (Licenz
 
 # Special:SpecialPages
 'specialpages' => 'Pàggene speciele',
-'specialpages-note' => '----
-* Pàggene speciale normale.
+'specialpages-note' => '* Pàggene speciale normale.
 * <span class="mw-specialpagerestricted">Pàggene speciale cu le restriziune.</span>
 * <span class="mw-specialpagecached">Pàggene speciale in memorie cache (ponne essere vecchie).</span>',
 'specialpages-group-maintenance' => "Report d'a manutenzione",
index e9d7005..696e7ec 100644 (file)
@@ -849,7 +849,8 @@ $2',
 'invalidtitle-knownnamespace' => 'Недопустимый заголовок с пространством имен «$2» и текстом «$3»',
 'invalidtitle-unknownnamespace' => 'Недопустимый заголовок с неизвестным номером пространства $1 и текстом «$2»',
 'exception-nologin' => 'Вы не представились системе',
-'exception-nologin-text' => 'Для просмотра этой станицы или выполнения запрошенного действия необходимо представиться системе.',
+'exception-nologin-text' => 'Необходимо [[Special:Userlogin|представиться]], чтобы иметь доступ к этой странице или действию.',
+'exception-nologin-text-manual' => 'Необходимо $1, чтобы иметь доступ к этой странице или действию.',
 
 # Virus scanner
 'virus-badscanner' => "Ошибка настройки. Неизвестный сканер вирусов: ''$1''",
@@ -1070,9 +1071,9 @@ $2
 
 # Special:ResetTokens
 'resettokens' => 'Сбросить токены',
-'resettokens-text' => 'Ð\92Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е Ñ\81бÑ\80оÑ\81иÑ\82Ñ\8c Ñ\82окенÑ\8b, ÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñ\8fÑ\8eÑ\82 Ð¸Ð¼ÐµÑ\82Ñ\8c Ð´Ð¾Ñ\81Ñ\82Ñ\83п Ðº Ð½ÐµÐºÐ¾Ñ\82оÑ\80Ñ\8bм Ð»Ð¸Ñ\87нÑ\8bм Ð´Ð°Ð½Ð½Ñ\8bм, ÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ñ\81вÑ\8fзанÑ\8b Ñ\81 Ð²Ð°Ñ\88ей Ñ\83Ñ\87Ñ\91Ñ\82ной Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8cÑ\8e
+'resettokens-text' => 'Ð\92Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е Ñ\81бÑ\80оÑ\81иÑ\82Ñ\8c Ñ\82окенÑ\8b, Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñ\8fÑ\8eÑ\89ие Ð¿Ð¾Ð»Ñ\83Ñ\87иÑ\82Ñ\8c Ð´Ð¾Ñ\81Ñ\82Ñ\83п Ðº Ð½ÐµÐºÐ¾Ñ\82оÑ\80Ñ\8bм Ð»Ð¸Ñ\87нÑ\8bм Ð´Ð°Ð½Ð½Ñ\8bм, Ñ\81вÑ\8fзаннÑ\8bм Ñ\81 Ð²Ð°Ñ\88ей Ñ\83Ñ\87Ñ\91Ñ\82ной Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8cÑ\8e Ð½Ð° Ñ\8dÑ\82ом Ñ\81айÑ\82е.
 
-Вам необходимо сделать это, если вы случайно поделился ими с кем-то, или если ваш аккаунт был взломан.',
+Вам необходимо сделать это, если вы случайно поделились ими с кем-то, или если ваша учётная запись была взломана.',
 'resettokens-no-tokens' => 'Нет токенов для сброса.',
 'resettokens-legend' => 'Сбросить токены',
 'resettokens-tokens' => 'Токены:',
@@ -1413,7 +1414,7 @@ $3 {{GENDER:$3|указал|указала}} следующую причину:
 Администраторы проекта {{SITENAME}} будут иметь доступ к скрытому содержанию и смогут восстановить его через этот же интерфейс, за исключением случаев, когда установлено дополнительное ограничение.",
 'revdelete-confirm' => 'Пожалуйста, подтвердите, что вы действительно желаете совершить это действие, осознаёте последствия, делаете это в соответствии с [[{{MediaWiki:Policy-url}}|правилами]].',
 'revdelete-suppress-text' => "Сокрытие может производиться '''только''' в следующих случаях:
-
+* Потенциально клеветническая информация
 * Неуместная личная информация
 *: ''домашний адрес, номера телефонов, номер паспорта и т. д.''",
 'revdelete-legend' => 'Установить ограничения:',
@@ -1424,8 +1425,8 @@ $3 {{GENDER:$3|указал|указала}} следующую причину:
 'revdelete-hide-user' => 'Имя участника/IP-адрес',
 'revdelete-hide-restricted' => 'Скрыть данные также и от администраторов',
 'revdelete-radio-same' => '(не изменять)',
-'revdelete-radio-set' => 'Ð\92идимая',
-'revdelete-radio-unset' => 'СкÑ\80Ñ\8bÑ\82ая',
+'revdelete-radio-set' => 'СкÑ\80Ñ\8bÑ\82ая',
+'revdelete-radio-unset' => 'Ð\92идимая',
 'revdelete-suppress' => 'Скрывать данные также и от администраторов',
 'revdelete-unsuppress' => 'Снять ограничения с восстановленных версий',
 'revdelete-log' => 'Причина:',
@@ -1580,7 +1581,7 @@ $1",
 'mypreferences' => 'Настройки',
 'prefs-edits' => 'Количество правок:',
 'prefsnologin' => 'Вы не представились системе',
-'prefsnologintext' => 'Вы должны <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} представиться системе]</span>, чтобы изменять настройки участника.',
+'prefsnologintext2' => 'Необходимо $1, чтобы изменять настройки.',
 'changepassword' => 'Изменение пароля',
 'prefs-skin' => 'Тема оформления',
 'skin-preview' => 'Предпросмотр',
@@ -2608,9 +2609,9 @@ $PAGEINTRO $NEWPAGE
 эл. почта: $PAGEEDITOR_EMAIL
 вики: $PAGEEDITOR_WIKI
 
\95Ñ\81ли Ð²Ñ\8b Ð½Ðµ Ð¿Ð¾Ñ\81еÑ\82иÑ\82е Ñ\8dÑ\82Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83, Ñ\82о в случае её дальнейших изменений уведомлений больше не будет. Вы можете также отключить опцию уведомления для всех страниц в вашем списке наблюдения.
\95Ñ\81ли Ð²Ñ\8b Ð½Ðµ Ð·Ð°Ð¹Ð´Ñ\91Ñ\82е Ð½Ð° Ñ\8dÑ\82Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 Ð¿Ð¾Ð´ Ñ\81воей Ñ\83Ñ\87Ñ\91Ñ\82ной Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8cÑ\8e, в случае её дальнейших изменений уведомлений больше не будет. Вы можете также отключить опцию уведомления для всех страниц в вашем списке наблюдения.
 
-             Система оповещения {{grammar:genitive|{{SITENAME}}}}
+Система оповещения {{grammar:genitive|{{SITENAME}}}}
 
 --
 Изменение настройки уведомлений
@@ -3126,7 +3127,7 @@ $1',
 'allmessagesdefault' => 'Текст по умолчанию',
 'allmessagescurrent' => 'Текущий текст',
 'allmessagestext' => 'Это список системных сообщений, доступных в пространстве имён «MediaWiki».
-Если вы хотите внести вклад в общую локализацию MediaWiki, пожалуйста, посетите страницу [//www.mediawiki.org/wiki/Localisation описания локализации] и проект [//translatewiki.net translatewiki.net].',
+Если вы хотите внести вклад в общую локализацию MediaWiki, пожалуйста, посетите страницу [https://www.mediawiki.org/wiki/Localisation описания локализации] и проект [//translatewiki.net translatewiki.net].',
 'allmessagesnotsupportedDB' => "Эта страница недоступна, так как отключена опция '''\$wgUseDatabaseMessages'''.",
 'allmessages-filter-legend' => 'Фильтр',
 'allmessages-filter' => 'Фильтр по статусу изменения:',
@@ -3287,7 +3288,7 @@ $2',
 'tooltip-undo' => 'Убрать внесённую правку и показать предпросмотр, с возможностью указать причину отмены',
 'tooltip-preferences-save' => 'Сохранить настройки',
 'tooltip-summary' => 'Введите краткое описание',
-'tooltip-iwiki' => '$1 — $2',
+'interlanguage-link-title' => '$1 — $2',
 
 # Stylesheets
 'common.css' => '/* Размещённый здесь CSS будет применяться ко всем темам оформления */',
@@ -3353,6 +3354,7 @@ The wiki server can't provide data in a format your client can read.",
 'pageinfo-length' => 'Длина страницы (в байтах)',
 'pageinfo-article-id' => 'Идентификатор страницы',
 'pageinfo-language' => 'Язык страницы',
+'pageinfo-content-model' => 'Модель содержимого страницы',
 'pageinfo-robot-policy' => 'Индексация поисковыми роботами',
 'pageinfo-robot-index' => 'Разрешено',
 'pageinfo-robot-noindex' => 'Не разрешено',
@@ -3440,7 +3442,7 @@ $1',
 'svg-long-desc' => 'SVG-файл, номинально $1 × $2 {{PLURAL:$2|пиксель|пикселя|пикселей}}, размер файла: $3',
 'svg-long-desc-animated' => 'Анимированный SVG-файл, номинально $1 × $2 {{PLURAL:$2|пиксель|пикселя|пикселей}}, размер файла: $3',
 'svg-long-error' => 'неправильный SVG-файл: $1',
-'show-big-image' => 'Изображение в более высоком разрешении',
+'show-big-image' => 'Исходный файл',
 'show-big-image-preview' => 'Размер при предпросмотре: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Другое разрешение|Другие разрешения}}: $1.',
 'show-big-image-size' => '$1 × $2 пикселей',
@@ -3915,7 +3917,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'Редактировать этот файл, используя внешнюю программу',
-'edit-externally-help' => '(подробнее см. в [//www.mediawiki.org/wiki/Manual:External_editors руководстве по установке])',
+'edit-externally-help' => '(подробнее см. в [https://www.mediawiki.org/wiki/Manual:External_editors руководстве по установке])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'все',
@@ -4025,6 +4027,7 @@ $5
 'word-separator' => '&#32;',
 'ellipsis' => '…',
 'parentheses' => '($1)',
+'quotation-marks' => '«$1»',
 
 # Multipage image navigation
 'imgmultipageprev' => '← предыдущая страница',
@@ -4181,7 +4184,7 @@ $5
 'version-hook-subscribedby' => 'Подписан на',
 'version-version' => '(Версия $1)',
 'version-license' => 'Лицензия',
-'version-poweredby-credits' => "Эта вики работает на движке '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Эта вики работает на движке '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'другие',
 'version-poweredby-translators' => 'переводчики translatewiki.net',
 'version-credits-summary' => 'Хотим поблагодарить следующих участников за их вклад в развитие [[Special:Version|MediaWiki]].',
@@ -4225,10 +4228,9 @@ MediaWiki распространяется в надежде, что она бу
 
 # Special:SpecialPages
 'specialpages' => 'Спецстраницы',
-'specialpages-note' => '----
-* Обычные служебные страницы.
-* <span class="mw-specialpagerestricted">Служебные страницы с ограниченным доступом.</span>
-* <span class="mw-specialpagecached">Закэшированные служебные страницы (могут быть устаревшими).</span>',
+'specialpages-note-top' => 'Легенда',
+'specialpages-note' => '* Обычные служебные страницы.
+* <span class="mw-specialpagerestricted">Служебные страницы с ограниченным доступом.</span>',
 'specialpages-group-maintenance' => 'Отчёты технического обслуживания',
 'specialpages-group-other' => 'Другие служебные страницы',
 'specialpages-group-login' => 'Представиться / Зарегистрироваться',
index 210df3b..fe74b36 100644 (file)
@@ -1227,7 +1227,6 @@ $1",
 'mypreferences' => 'Наставлїня',
 'prefs-edits' => 'Чісло едітовань:',
 'prefsnologin' => 'Не сьте приголошеный(а)!',
-'prefsnologintext' => 'Кідь хочете мінити хосновательскы наставлїня, мусите ся <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} приголосити]</span>.',
 'changepassword' => 'Змінити гесло',
 'prefs-skin' => 'Взгляд',
 'skin-preview' => 'Попереднїй нагляд',
@@ -2738,7 +2737,7 @@ $1',
 'allmessagesdefault' => 'Штандартный текст',
 'allmessagescurrent' => 'Актуалный текст',
 'allmessagestext' => 'Тото є список вшыткых повідомлїнь доступных в просторї назв «MediaWiki».
-Кідь хочете приспівати ку локалізації софтверу MediaWiki, навщівте [//www.mediawiki.org/wiki/Localisation локалізачну сторінку на mediawiki.org] і [//translatewiki.net сервер server translatewiki.net].',
+Кідь хочете приспівати ку локалізації софтверу MediaWiki, навщівте [https://www.mediawiki.org/wiki/Localisation локалізачну сторінку на mediawiki.org] і [//translatewiki.net сервер server translatewiki.net].',
 'allmessagesnotsupportedDB' => '{{ns:special}}:AllMessages не є підпороване, бо wgUseDatabaseMessages є выпнуте.',
 'allmessages-filter-legend' => 'Філтер',
 'allmessages-filter' => 'Філтер за станом:',
@@ -3486,7 +3485,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'Едітовати тот файл хоснувчі екстерну аплікацію',
-'edit-externally-help' => '(Веце інформацій найдете в [//www.mediawiki.org/wiki/Manual:External_editors інштрукції про наставлїня].)',
+'edit-externally-help' => '(Веце інформацій найдете в [https://www.mediawiki.org/wiki/Manual:External_editors інштрукції про наставлїня].)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'вшыткы',
@@ -3664,7 +3663,7 @@ $5
 'version-hook-subscribedby' => 'Підписаный на',
 'version-version' => '(Верзія $1)',
 'version-license' => 'Ліценція',
-'version-poweredby-credits' => "Тота вікі біжыть на '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001–$1 $2.",
+'version-poweredby-credits' => "Тота вікі біжыть на '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001–$1 $2.",
 'version-poweredby-others' => 'іншы',
 'version-poweredby-translators' => 'перекладателї на translatewiki.net',
 'version-credits-summary' => 'Слїдуючім людям бы сьме радо подяковали за їх приспівкы [[Special:Version|MediaWiki]].',
@@ -3705,8 +3704,7 @@ MediaWiki є дістрібуована в надїї, же буде хосно
 
 # Special:SpecialPages
 'specialpages' => 'Шпеціалны сторінкы',
-'specialpages-note' => '----
-* Звычайны шпеціалны сторінкы.
+'specialpages-note' => '* Звычайны шпеціалны сторінкы.
 * <span class="mw-specialpagerestricted">Шпеціалны сторінкы з&nbsp;обмедженым приступом</span>
 * <span class="mw-specialpagecached">Кешованы шпеціалны сторінкы</span>',
 'specialpages-group-maintenance' => 'Технічны репорты',
index 1272862..aaefcc4 100644 (file)
@@ -1305,7 +1305,6 @@ You can still [$1 view this revision]",
 'mypreferences' => 'मम इष्टतमानि',
 'prefs-edits' => 'सम्पादनानां सख्याः',
 'prefsnologin' => 'नैव प्रविष्ट',
-'prefsnologintext' => 'वरीयतां परिवर्तयितुं भवता <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}}नामाभिलेखः]</span> करणियः।',
 'changepassword' => 'कूटशब्दः परिवर्त्यताम्',
 'prefs-skin' => 'त्वक्',
 'skin-preview' => 'प्राग्दृश्यम्',
@@ -2787,7 +2786,7 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'allmessagesname' => 'नाम',
 'allmessagesdefault' => 'डिफॉल्टसन्देशपाठ',
 'allmessagescurrent' => 'सद्यः सन्देशपाठः ।',
-'allmessagestext' => 'एषा मीडियाविकिनामस्थाने उपलब्धा काचित् तन्त्रसन्देशस्य सूचिका अस्ति ।  यदि भवान् सामान्यमीडियाविकि क्षेत्रीयकरणे योगदानं कर्तुमिच्छति तर्हि[//www.mediawiki.org/wiki/Localisation मीडियाविकि क्षेत्रीयकरणम्] अथवा [//translatewiki.net translatewiki.net] इत्यत्र गच्छतु ।',
+'allmessagestext' => 'एषा मीडियाविकिनामस्थाने उपलब्धा काचित् तन्त्रसन्देशस्य सूचिका अस्ति ।  यदि भवान् सामान्यमीडियाविकि क्षेत्रीयकरणे योगदानं कर्तुमिच्छति तर्हि[https://www.mediawiki.org/wiki/Localisation मीडियाविकि क्षेत्रीयकरणम्] अथवा [//translatewiki.net translatewiki.net] इत्यत्र गच्छतु ।',
 'allmessagesnotsupportedDB' => "अस्य पुटस्य उपयोगः नैव शक्यते यतः '''\$wgUseDatabaseMessages''' तटास्थम् अस्ति ।",
 'allmessages-filter-legend' => 'शोधनी ।',
 'allmessages-filter' => 'ग्राहकीकरणस्य स्थितौ शोधनी ।',
@@ -3523,7 +3522,7 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 
 # External editor support
 'edit-externally' => 'बाह्यां प्रणालीम् उपयुज्य इयं सञ्चिका सम्पाद्यताम् ।',
-'edit-externally-help' => '(अधिकासूचनार्थं [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] इत्येतत् दृश्यताम्)',
+'edit-externally-help' => '(अधिकासूचनार्थं [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] इत्येतत् दृश्यताम्)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'सर्वाणि',
@@ -3700,9 +3699,9 @@ $5
 'version-hook-subscribedby' => 'सदस्यत्वम् अनेन प्राप्तम् ।',
 'version-version' => '(आवृत्तिः$1)',
 'version-license' => 'अनुज्ञापत्रम्',
-'version-poweredby-credits' => "इयं विकिः अनेन सञ्चालिता '''[//www.mediawiki.org/ MediaWiki]''', स्वामित्वम् © 2001 - $1  $2 ।",
+'version-poweredby-credits' => "इयं विकिः अनेन सञ्चालिता '''[https://www.mediawiki.org/ MediaWiki]''', स्वामित्वम् © 2001 - $1  $2 ।",
 'version-poweredby-others' => 'अन्य',
-'version-credits-summary' => '[[Special:Version|MediaWiki] इत्यत्र योगदानार्थं वयं अधोलिखितान् जनान् प्रशंसितुमिच्छामः।',
+'version-credits-summary' => '[[Special:Version|MediaWiki]] इत्यत्र योगदानार्थं वयं अधोलिखितान् जनान् प्रशंसितुमिच्छामः।',
 'version-license-info' => 'मिडियाविकिः तु निश्शुल्कतन्त्रांशः ; भवान् पुनः वितर्तुं शक्नोति अथवा GNU सामान्यसार्वजनिकानुज्ञपत्रस्य नियमानुगुणं द्वीतीयावृत्तिम् अथवा अन्यनूतनावृतिं संस्कर्तुं शक्नोति । 
 
 एषा बहूपयोगाय भवेत् इति धिया मिडियाविकिः वितीर्णा । किन्तु केनापि प्रमाणत्वेन विना दत्ता । अथवा निर्दिष्टोद्देशर्थे अनुकूलकरं वेति अपरिशील्य अथवा वाणिज्यस्य आनुषङ्गिकानुज्ञापत्रेण विना अपि मीडियाविकिः प्रदत्ता । विशेषविवरणप्राप्तये GNU सर्वजनसामान्यम् अनुज्ञापत्रं पश्यतु ।
@@ -3728,8 +3727,7 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'विशेषपृष्ठानि',
-'specialpages-note' => '----
-* साधारणं विशेषपुटम् । 
+'specialpages-note' => '* साधारणं विशेषपुटम् । 
 * <span class="mw-specialpagerestricted">प्रतिद्धं विशेषपुटम् ।</span>',
 'specialpages-group-maintenance' => 'निर्वहणवृत्तानि ।',
 'specialpages-group-other' => 'अन्यविशेषपुटानि ।',
index 6c74bcd..3882903 100644 (file)
@@ -1167,7 +1167,6 @@ $1",
 'mypreferences' => 'Туруоруулар',
 'prefs-edits' => 'Көннөрүү ахсаана:',
 'prefsnologin' => 'Ааккын эппэтиҥ',
-'prefsnologintext' => 'Эн <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ааккын эттэххинэ]</span> эрэ кыттаачы туруорууларын уларытар кыахтаныаҥ.',
 'changepassword' => 'Киирии тылы уларытарга',
 'prefs-skin' => 'Тас көстүү',
 'skin-preview' => 'Хайдах буолара',
@@ -2705,7 +2704,7 @@ $1',
 'allmessagesdefault' => 'Туспа этиллибэтэҕинэ суруллар тиэкис',
 'allmessagescurrent' => 'Билиҥҥи тиэкис',
 'allmessagestext' => 'Манна MediaWiki биллэриилэрин испииһэгэ көстөр.
-Эн MediaWiki движогун тылбаастыырга көмөлөһүөххүн баҕарар буоллаххына манна [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] уонна манна [//translatewiki.net translatewiki.net] киир.',
+Эн MediaWiki движогун тылбаастыырга көмөлөһүөххүн баҕарар буоллаххына манна [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] уонна манна [//translatewiki.net translatewiki.net] киир.',
 'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' туттуллар кыаҕа суох, тоҕо диэтэххэ '''\$wgUseDatabaseMessages''' араарыллыбыт.",
 'allmessages-filter-legend' => 'Сиидэ',
 'allmessages-filter' => 'Уларытыы көрүҥүнэн наардыыр сиидэ:',
@@ -3466,7 +3465,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'Бу билэни таһынааҕы бырагыраамма көмөтүнэн уларытарга',
-'edit-externally-help' => 'Сиһилии бу ыйынньыгынан баран көр: [//www.mediawiki.org/wiki/Manual:External_editors туруоруулар туһунан].',
+'edit-externally-help' => 'Сиһилии бу ыйынньыгынан баран көр: [https://www.mediawiki.org/wiki/Manual:External_editors туруоруулар туһунан].',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'бары',
@@ -3650,7 +3649,7 @@ $5
 'version-hook-subscribedby' => 'Суруттарыыта:',
 'version-version' => '(Торум $1)',
 'version-license' => 'Лиссиэнзийэ',
-'version-poweredby-credits' => "Бу биики бу движокка олоҕурар '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Бу биики бу движокка олоҕурар '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'атыттар',
 'version-poweredby-translators' => 'translatewiki.net тылбаасчыттара',
 'version-credits-summary' => '[[Special:Version|MediaWiki]] сайдыытыгар үлэлэрин иһин манна ахтыллыбыт дьоҥҥо махтанабыт.',
@@ -3690,8 +3689,7 @@ MediaWiki туһалаах буоллун диэн тарҕатыллар, ол
 
 # Special:SpecialPages
 'specialpages' => 'Анал сирэйдэр',
-'specialpages-note' => '----
-* Көннөрү анал сирэйдэр.
+'specialpages-note' => '* Көннөрү анал сирэйдэр.
 * <strong class="mw-specialpagerestricted">Хааччахтардаах анал сирэйдэр.</strong>
 * <span class="mw-specialpagecached">Кээстэммит анал сирэйдэр (эргэрбит буолуохтарын сөп).</span>',
 'specialpages-group-maintenance' => 'Техническэй отчуоттар',
index 0b18a5c..38ffa05 100644 (file)
@@ -1162,7 +1162,7 @@ jeleń',
 
 # External editor support
 'edit-externally' => 'Noa rẽt tońge joṛao lạgitte bahre reaḱ koejoń  beoharme',
-'edit-externally-help' => '(Nonḍe ńelme [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] bạṛtite baḍay lạgit)',
+'edit-externally-help' => '(Nonḍe ńelme [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] bạṛtite baḍay lạgit)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'Sanam, sanamak, sanamko',
index d97bb14..71e6275 100644 (file)
@@ -653,7 +653,6 @@ Prova a seberare ''totu:'' pro chircare in totu su cuntènnidu (inclùdidas pàg
 'mypreferences' => 'Preferèntzias meas',
 'prefs-edits' => 'Nùmeru de acontzos:',
 'prefsnologin' => 'Non ses intrau',
-'prefsnologintext' => 'Depes èsser <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} intradu]</span> pro seberare is preferèntzias.',
 'changepassword' => 'Càmbia password',
 'prefs-skin' => 'Bisura',
 'skin-preview' => 'Antiprima',
@@ -1441,7 +1440,7 @@ Is acàpius chi sighint in sa matessi lìnia sunt cunsideraus comente eccetzione
 
 # External editor support
 'edit-externally' => 'Acontza custu file usendi unu programma de foras',
-'edit-externally-help' => '(Pro àteras informatziones càstia is [//www.mediawiki.org/wiki/Manual:External_editors istrutziones])',
+'edit-externally-help' => '(Pro àteras informatziones càstia is [https://www.mediawiki.org/wiki/Manual:External_editors istrutziones])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'totu',
index 4a257c8..ed0991f 100644 (file)
@@ -1083,7 +1083,6 @@ S'havi accirtari ca la cuntinuità storica di la pàggina nun veni altirata.",
 'mypreferences' => 'Li mè prifirenzi',
 'prefs-edits' => 'Nùmmuru di canciamenti:',
 'prefsnologin' => 'Accessu nun effittuatu',
-'prefsnologintext' => 'Pi putiri pirsunalizzari li prifirenzi è nicissariu fari l\'<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} accessu]</span>.',
 'changepassword' => 'Cancia la password',
 'prefs-skin' => 'Aspettu',
 'skin-preview' => 'Antiprima',
@@ -2270,7 +2269,7 @@ Nta st'ùrtimu casu si pò macari utilizzari un culligamentu, p'asempiu [[{{#Spe
 'allmessagesdefault' => 'Testu pridifinitu',
 'allmessagescurrent' => 'Testu attuali',
 'allmessagestext' => "Chista è na lista di missaggi di sistema chi s'attròvanu sutta MediaWiki:''nomu''.
-Visita [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] si voi cuntribbuiri â localizzazioni generica di MediaWiki.",
+Visita [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] si voi cuntribbuiri â localizzazioni generica di MediaWiki.",
 'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' nun è suppurtatu pirchì lu flag '''\$wgUseDatabaseMessages''' nun è attivu.",
 'allmessages-filter-legend' => 'Filtru',
 'allmessages-filter' => 'Filtru pi statu di canciamentu:',
@@ -2789,7 +2788,7 @@ Li lijami succissivi, supra la stissa riga, sunnu cunzidirati comu eccizzioni (p
 
 # External editor support
 'edit-externally' => 'Cancia stu file usannu un prugramma sternu',
-'edit-externally-help' => "Pi chiossai nfurmazzioni cunzurtari l'[//www.mediawiki.org/wiki/Manual:External_editors istruzzioni] ('n ngrisi)",
+'edit-externally-help' => "Pi chiossai nfurmazzioni cunzurtari l'[https://www.mediawiki.org/wiki/Manual:External_editors istruzzioni] ('n ngrisi)",
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tutti',
@@ -2939,8 +2938,7 @@ Stu còdici di cunferma scadi automaticamenti a li $4.',
 
 # Special:SpecialPages
 'specialpages' => 'Pàggini spiciali',
-'specialpages-note' => '----
-* Pàggini spiciali non risirvati.
+'specialpages-note' => '* Pàggini spiciali non risirvati.
 * <strong class="mw-specialpagerestricted">Pàggini spiciali risirvati sulu a quarchi catigurìa d\'utenti.</strong>',
 'specialpages-group-maintenance' => 'Resocunti di manutinzioni',
 'specialpages-group-other' => 'Autri pàggini spiciali',
index 736c64f..a90bf39 100644 (file)
@@ -734,7 +734,6 @@ there micht be parteeculars in the [{{fullurl:{{#Special:Log}}/suppress|page={{F
 # Preferences page
 'mypreferences' => 'Ma preferences',
 'prefsnologin' => 'No loggit in',
-'prefsnologintext' => 'Ye maun be [[Special:UserLogin|loggit in]] tae set uiser preferences.',
 'changepassword' => 'Chynge password',
 'prefs-skin' => 'Huil',
 'skin-preview' => 'First Leuk',
@@ -1451,7 +1450,7 @@ If th' file haes bin modified frae tis original state, some details kin nae full
 
 # External editor support
 'edit-externally' => 'Edit this file uisin an external application',
-'edit-externally-help' => '(See the [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] for mair guidance.)',
+'edit-externally-help' => '(See the [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] for mair guidance.)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'aw',
index 3e8bbae..b9ff975 100644 (file)
@@ -954,7 +954,7 @@ $1 {{PLURAL:$1|اکر|اکرن}} کان ننڍي هوڻ گھرجي.',
 
 # External editor support
 'edit-externally' => 'هيءُ فائيل ڪنهن خارجي منتقڪريءَ سان سنواريو',
-'edit-externally-help' => 'وڌيڪ معلومات لاءِ [//www.mediawiki.org/wiki/Manual:External_editors هدايتون براءِ تنصيبڪاري] ڏسندا.',
+'edit-externally-help' => 'وڌيڪ معلومات لاءِ [https://www.mediawiki.org/wiki/Manual:External_editors هدايتون براءِ تنصيبڪاري] ڏسندا.',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'سڀ',
index 2c4cb3b..719e49a 100644 (file)
@@ -788,7 +788,6 @@ Cunsulthà lu [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} rigi
 'mypreferences' => "Li me' prifirenzi",
 'prefs-edits' => 'Mudìfigghi effettuaddi:',
 'prefsnologin' => 'Intradda nò effettuadda',
-'prefsnologintext' => 'Pa mudìfiggà li prifirenzi è nezzessàriu [[Special:UserLogin|intrà]].',
 'changepassword' => "Ciamba paràura d'órdhini",
 'prefs-skin' => 'Aipettu gràficu',
 'skin-preview' => 'antiprimma',
@@ -1597,7 +1596,7 @@ In chisth'ulthimu casu si pó utilizzà puru un cullegamentu, pa esempiu [[{{#Sp
 'allmessagesdefault' => 'Testhu pridifiniddu',
 'allmessagescurrent' => 'Testhu attuari',
 'allmessagestext' => "Chistha è la listha di tutti l'imbasciaddi di sisthema dipunìbiri i' lu tipu di pàgina MediaWiki.
-Pa piazeri utirizà [//www.mediawiki.org/wiki/Localisation MediaWiki Lucarizazioni] e [//translatewiki.net translatewiki.net] pa l'althri traduzioni.",
+Pa piazeri utirizà [https://www.mediawiki.org/wiki/Localisation MediaWiki Lucarizazioni] e [//translatewiki.net translatewiki.net] pa l'althri traduzioni.",
 'allmessagesnotsupportedDB' => "Chistha pàgina nò è supporthadda parchí l'indicadori '''\$wgUseDatabaseMessages''' nò è attibuu.",
 'allmessages-filter-unmodified' => 'Nò mudifiggaddi',
 'allmessages-filter-all' => 'Tutti',
@@ -1871,7 +1870,7 @@ So cunsidaraddi soru l'erenchi puntaddi (righi ch'ischumenzani cu' lu caràtteri
 
 # External editor support
 'edit-externally' => 'Mudìfigga chistu file usendi un prugramma esthernu',
-'edit-externally-help' => "Pa maggiori infuimmazioni cunsulthà l'[//www.mediawiki.org/wiki/Manual:External_editors isthruzioni] (in ingresu).",
+'edit-externally-help' => "Pa maggiori infuimmazioni cunsulthà l'[https://www.mediawiki.org/wiki/Manual:External_editors isthruzioni] (in ingresu).",
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tutti',
index 3233988..4deb798 100644 (file)
@@ -635,7 +635,6 @@ $1 {{int:pipe-separator}} $2',
 'mypreferences' => 'Ásahusat',
 'prefs-edits' => 'Rievdadusaid mearri:',
 'prefsnologin' => 'It leat čálligoahtán sisa',
-'prefsnologintext' => 'Don fertet [[Special:UserLogin|čálligoahtit sisa]], ovdalgo sáhtát rievdadit du ásahusaid.',
 'changepassword' => 'Suollemassáni molson',
 'prefs-skin' => 'Olggosoaidnu',
 'skin-preview' => 'ovdalgihtii geahččan...',
index 95e53d8..84113fc 100644 (file)
@@ -761,7 +761,6 @@ Kėtė admėnėstratuorē šėtom pruojekte vėsdar galės pasėiktė pasliepta
 'mypreferences' => 'Mona nustatīmā',
 'prefs-edits' => 'Keitėmu skaitlius:',
 'prefsnologin' => 'Naprisėjongis',
-'prefsnologintext' => 'Tamstā rēk būtė <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} prisėjongosam]</span>, kū galietomiet keistė sava nustatīmus.',
 'changepassword' => 'Pakeistė slaptažuodė',
 'prefs-skin' => 'Ėšruoda',
 'skin-preview' => 'Parveiza',
@@ -1792,7 +1791,7 @@ Vėsas kėtas nūoruodas tuo patiuo eilotie īr laikomas ėšėmtim, tas rēšk
 
 # External editor support
 'edit-externally' => 'Atdarītė ėšuoriniam redaktuorio',
-'edit-externally-help' => 'Nuoriedamė gautė daugiau infuormacėjės, veiziekėt [//www.mediawiki.org/wiki/Manual:External_editors kruovėma instrokcėjės].',
+'edit-externally-help' => 'Nuoriedamė gautė daugiau infuormacėjės, veiziekėt [https://www.mediawiki.org/wiki/Manual:External_editors kruovėma instrokcėjės].',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'vėsos',
@@ -1900,8 +1899,7 @@ Tamsta tēpuogi galėt [[Special:EditWatchlist/raw|redagoutė grīnaji keravuoja
 
 # Special:SpecialPages
 'specialpages' => 'Specēlė̅jė poslapē',
-'specialpages-note' => '----
-* Normalūs specēlė̅jė puslapē.
+'specialpages-note' => '* Normalūs specēlė̅jė puslapē.
 * <strong class="mw-specialpagerestricted">Apribuotė specēlė̅jė puslapē.</strong>',
 'specialpages-group-maintenance' => 'Sėstemas palaikīma pranešėmā',
 'specialpages-group-other' => 'Kėtė specēlė̅jė poslapē',
index 5bafdd5..7c79374 100644 (file)
@@ -1332,7 +1332,6 @@ Uzmite u obzir da njegovi indeksi za ovu Wiki ne moraju biti ažurirani.',
 'mypreferences' => 'Postavke',
 'prefs-edits' => 'Broj izmjena:',
 'prefsnologin' => 'Niste prijavljeni',
-'prefsnologintext' => 'Da biste mogli podešavati korisničke postavke, morate <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} biti prijavljeni]</span>.',
 'changepassword' => 'Promijeni lozinku',
 'prefs-skin' => 'Izgled (skin)',
 'skin-preview' => 'Pretpregled',
@@ -2864,7 +2863,7 @@ U drugom slučaju možete koristiti i vezu, npr. [[{{#Special:Export}}/{{MediaWi
 'allmessagesdefault' => 'Uobičajeni tekst',
 'allmessagescurrent' => 'Trenutni tekst',
 'allmessagestext' => 'Ovo je spisak svih sistemskih poruka u dostupnih u MediaWiki imenskom prostoru.
-Molimo posjetite [//www.mediawiki.org/wiki/Localisation MediaWiki lokalizaciju] i [//translatewiki.net translatewiki.net] ako želite doprinijeti općoj lokalizaciji MediaWikija.',
+Molimo posjetite [https://www.mediawiki.org/wiki/Localisation MediaWiki lokalizaciju] i [//translatewiki.net translatewiki.net] ako želite doprinijeti općoj lokalizaciji MediaWikija.',
 'allmessagesnotsupportedDB' => "Ova stranica ne može biti korištena jer je '''\$wgUseDatabaseMessages''' isključen.",
 'allmessages-filter-legend' => 'Filter',
 'allmessages-filter' => 'Filter po stanju podešavanja:',
@@ -3624,7 +3623,7 @@ Svi drugi linkovi u istoj liniji se smatraju izuzecima, npr. kod stranica gdje s
 
 # External editor support
 'edit-externally' => 'Izmijeni ovu datoteku/fajl koristeći eksternu aplikaciju',
-'edit-externally-help' => '(Pogledajte [//www.mediawiki.org/wiki/Manual:External_editors instrukcije za podešavanje] za više informacija)',
+'edit-externally-help' => '(Pogledajte [https://www.mediawiki.org/wiki/Manual:External_editors instrukcije za podešavanje] za više informacija)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'sve',
@@ -3807,7 +3806,7 @@ Također možete [[Special:EditWatchlist|koristiti standardni uređivač]].',
 'version-hook-subscribedby' => 'Pretplaćeno od',
 'version-version' => '(Verzija $1)',
 'version-license' => 'Licenca',
-'version-poweredby-credits' => "Ova wiki je zasnovana na '''[//www.mediawiki.org/ MediaWiki]''', autorska prava zadržana © 2001-$1 $2.",
+'version-poweredby-credits' => "Ova wiki je zasnovana na '''[https://www.mediawiki.org/ MediaWiki]''', autorska prava zadržana © 2001-$1 $2.",
 'version-poweredby-others' => 'ostali',
 'version-credits-summary' => 'Htjeli bismo da zahvalimo sljedećim osobama na njihovom doprinosu [[Special:Version|MediaWiki]].',
 'version-license-info' => 'Mediawiki je slobodni softver, možete ga redistribuirati i/ili mijenjati pod uslovima GNU opće javne licence kao što je objavljeno od strane Fondacije Slobodnog Softvera, bilo u verziji 2 licence, ili (po vašoj volji) nekoj od kasniji verzija.
@@ -3847,8 +3846,7 @@ Trebali biste dobiti [{{SERVER}}{{SCRIPTPATH}}/KOPIJU GNU opće javne licence] z
 
 # Special:SpecialPages
 'specialpages' => 'Posebne stranice',
-'specialpages-note' => '----
-* Normalne posebne stranice.
+'specialpages-note' => '* Normalne posebne stranice.
 * <span class="mw-specialpagerestricted">Ograničene posebne stranice.</span>
 * <span class="mw-specialpagecached">Keširane posebne stranice (mogu biti zastarjele).</span>',
 'specialpages-group-maintenance' => 'Izvještaji za održavanje',
index 35fbfed..9bdc67d 100644 (file)
@@ -264,7 +264,7 @@ $1',
 Ẓr [[Special:Version|ayyaw tasna]].',
 
 'ok' => 'Waxxa',
-'pagetitle' => '(MediaWiki)$1 - {{SITENAME}}',
+'pagetitle' => '$1 - {{SITENAME}}',
 'pagetitle-view-mainpage' => '{{SITENAME}}',
 'retrievedfrom' => 'Yurrid z "$1"',
 'youhavenewmessages' => 'Illa dark $1 ($2).',
@@ -1215,7 +1215,7 @@ Wiyyaḍ raggis ḥbun s ɣiklli sttin kkan gantn.
 
 # External editor support
 'edit-externally' => 'Bddl asdaw ad s wasnas abrrani',
-'edit-externally-help' => '(Ẓṛ [//www.mediawiki.org/wiki/Manual:External_editors/fr les instructions d’installation] bac ad taf uggar n inɣmisn)',
+'edit-externally-help' => '(Ẓṛ [https://www.mediawiki.org/wiki/Manual:External_editors/fr les instructions d’installation] bac ad taf uggar n inɣmisn)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'kraygat (kullu)',
index a020dd0..7754e8a 100644 (file)
@@ -1271,7 +1271,6 @@ $1",
 'mypreferences' => 'අභිරුචීන්',
 'prefs-edits' => 'සංස්කරණයන් සංඛ්‍යාව:',
 'prefsnologin' => 'පිවිසී නැත (Not logged in)',
-'prefsnologintext' => 'පරිශීලක අභිරුචි සැකසීමට නම්, ඔබ  <span class="plainlinks">[{{fullurl:Special:Userlogin|returnto=$1}} ප්‍රවිෂ්ටවී]</span> සිටිය යුතුය.',
 'changepassword' => 'මුරපදය වෙනස් කරන්න',
 'prefs-skin' => 'ඡවිය',
 'skin-preview' => 'පෙරදසුන',
@@ -2756,7 +2755,7 @@ $1 ගේ වාරණයට හේතුව මෙය වේ: "$2"',
 'allmessagesdefault' => 'සාමාන්‍ය පණිවුඩ පෙළ',
 'allmessagescurrent' => 'වත්මන් පෙළ',
 'allmessagestext' => 'මේ මාධ්‍යවිකි නාමඅවකාශයෙහිදී  හමුවන පද්ධති පණිවුඩයන් ලැයිස්තුවකි.
-වර්ගීය මාධ්‍යවිකි ප්‍රාදේශීයකරණයට දායක වීමට ඔබ රිසි නම් කරුණාකර [//www.mediawiki.org/wiki/Localisation මාධ්‍යවිකි ප්‍රාදේශීයකරණය]  සහ [//translatewiki.net බීටාවිකි] වෙත පිවිසෙන්න.',
+වර්ගීය මාධ්‍යවිකි ප්‍රාදේශීයකරණයට දායක වීමට ඔබ රිසි නම් කරුණාකර [https://www.mediawiki.org/wiki/Localisation මාධ්‍යවිකි ප්‍රාදේශීයකරණය]  සහ [//translatewiki.net බීටාවිකි] වෙත පිවිසෙන්න.',
 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' අක්‍රීය කොට ඇති බැවින්, මෙම පිටුව භාවිතා කල නොහැක.",
 'allmessages-filter-legend' => 'පෙරහන',
 'allmessages-filter' => 'පාරිභෝගීකරණ තත්ත්වය අනුව පෙරීම:',
@@ -3539,7 +3538,7 @@ Others will be hidden by default.
 
 # External editor support
 'edit-externally' => 'බාහිර  උපයෝගයක් භාවිතා කරමින් මෙම ගොනුව සංස්කරණය කරන්න',
-'edit-externally-help' => '(වැඩිදුර තොරතුරු සඳහා [//www.mediawiki.org/wiki/Manual:External_editors පිහිටුවීම් උපදෙස්] බලන්න.)',
+'edit-externally-help' => '(වැඩිදුර තොරතුරු සඳහා [https://www.mediawiki.org/wiki/Manual:External_editors පිහිටුවීම් උපදෙස්] බලන්න.)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'සියල්ල',
@@ -3792,7 +3791,7 @@ This confirmation code will expire at $4.',
 'version-hook-subscribedby' => 'දායකවී ඇත්තේ',
 'version-version' => '(අනුවාදය $1)',
 'version-license' => 'වරපත',
-'version-poweredby-credits' => "මෙම විකිය '''[//www.mediawiki.org/ MediaWiki]''' මගින් බලගන්වා ඇත, copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "මෙම විකිය '''[https://www.mediawiki.org/ MediaWiki]''' මගින් බලගන්වා ඇත, copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'අනෙකුත්',
 'version-license-info' => 'MediaWiki යනු නිදහස් මෘදුකාංගයකි; නිදහස් මෘදුකාංග පදනමේ (Free Software Foundation) හි GNU General Public License නම් බලපත්‍රයේ වගන්තිවලට අනුව ඔබට එය නැවත බෙදාහැරීම සහ/හෝ සංස්කරණය කළ හැක; ඒ, එම බලපත්‍රයේ 2වන හෝ (ඔබට කැමති නම්) ඉන්පසු එන සංස්කරණයකට අනුවය.
 
@@ -3819,8 +3818,7 @@ MediaWiki බෙදාහැර ඇත්තේ එය ප්‍රයෝජන
 
 # Special:SpecialPages
 'specialpages' => 'විශේෂ පිටු',
-'specialpages-note' => '----
-* සාමාන්‍ය විශේෂ පිටු.
+'specialpages-note' => '* සාමාන්‍ය විශේෂ පිටු.
 * <span class="mw-specialpagerestricted">සීමිත විශේෂ පිටු.</span>
 * <span class="mw-specialpagecached">කෑෂිත වි‍ශේෂ පිටු (යල් පැන ගිය විය හැක).</span>',
 'specialpages-group-maintenance' => 'නඩත්තු වාර්තා',
index fb9d616..e077d91 100644 (file)
@@ -291,7 +291,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Skryť strážené úpravy v Posledných úpravách',
 'tog-newpageshidepatrolled' => 'Skryť strážené stránky zo zoznamu nových stránok',
 'tog-extendwatchlist' => 'Rozšíriť zoznam sledovaných stránok, aby zobrazoval všetky zmeny, nie len posledné',
-'tog-usenewrc' => 'Zoskupiť v posledných úpravách a na zozname sledovaných stránok podľa stránky (vyžaduje JavaScript)',
+'tog-usenewrc' => 'Zoskupiť zmeny v posledných úpravách a na zozname sledovaných stránok podľa stránky',
 'tog-numberheadings' => 'Automaticky číslovať nadpisy',
 'tog-showtoolbar' => 'Zobraziť panel nástrojov úprav',
 'tog-editondblclick' => 'Upravovať stránky po dvojitom kliknutí',
@@ -617,6 +617,7 @@ Zoznam platných špeciálnych stránok nájdete na [[Special:SpecialPages|{{int
 'databaseerror' => 'Chyba v databáze',
 'databaseerror-text' => 'Došlo k chybe pri otázke do databázy.
 Môže to byť spôsobené chybou v softvéri.',
+'databaseerror-textcl' => 'Vyskytla sa chyba dopytu do databázy.',
 'databaseerror-query' => 'Otázka: $1',
 'databaseerror-function' => 'Funkcia: $1',
 'databaseerror-error' => 'Chyba: $1',
@@ -739,7 +740,7 @@ Nezabudnite zmeniť svoje [[Special:Preferences|Predvoľby {{GRAMMAR:genitív|{{
 'gotaccount' => "Máte už vytvorený účet? '''$1'''.",
 'gotaccountlink' => 'Prihlásiť',
 'userlogin-resetlink' => 'Zabudli ste svoje prihlasovacie údaje?',
-'userlogin-resetpassword-link' => 'Obnoviť heslo',
+'userlogin-resetpassword-link' => 'Zabudli ste heslo?',
 'helplogin-url' => 'Help:Prihlasovanie',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Pomoc s prihlásením]]',
 'userlogin-loggedin' => 'Ste už {{GENDER:$1|prihĺasený|prihlásená}} ako $1.
@@ -805,14 +806,15 @@ používateľa „$1“.
 Prosím, prihláste sa znovu, keď ho dostanete.',
 'blocked-mailpassword' => 'Boli zablokované úpravy z vašej IP adresy, a tak nie je dovolené použiť funkciu znovuvyžiadania hesla, aby sa zabránilo zneužitiu.',
 'eauthentsent' => 'Email s potvrdením bol zaslaný na uvedenú emailovú adresu.
-Predtým ako sa na účet pošle akákoľvek ďalšia pošta, musíte splniť inštrukcie v emaili, aby sa potvrdilo, že účet je skutočne váš.',
+Predtým ako sa na účet pošle akákoľvek ďalšia pošta, musíte splniť inštrukcie v emaili, aby ste potvrdili, že účet je skutočne váš.',
 'throttled-mailpassword' => 'E-mail na obnovenie hesla už bol odoslaný v priebehu {{PLURAL:$1|poslednej $1 hodiny|posledných $1 hodín}}.
 Aby sa zabránilo zneužitiu, obnovenie hesla emailom je možné vykonať iba raz za {{PLURAL:$1|$1 hodinu|$1 hodiny|$1 hodín}}.',
 'mailerror' => 'Chyba pri posielaní e-mailu: $1',
 'acct_creation_throttle_hit' => 'Návštevníci tejto wiki z vašej IP adresy už za posledný deň vytvorili {{PLURAL:$1|$1 účet|$1 účty|$1 účtov}}, čo je maximálny počet povolený za toto časové obdobie.
 Z tohto dôvodu nemôžu návštevníci z tejto IP adresy momentálne vytvoriť ďalšie účty.',
 'emailauthenticated' => 'Vaša emailová adresa bola overená $2 $3.',
-'emailnotauthenticated' => 'Vaša e-mailová adresa ešte nebola overená. Preto nemôžete prijať emaily pre žiadnu z nasledovných funkcií.',
+'emailnotauthenticated' => 'Vaša e-mailová adresa ešte nebola overená.
+Preto nemôžete prijať emaily pre žiadnu z nasledovných funkcií.',
 'noemailprefs' => 'Tieto nástroje budú prístupné po vyplnení emailovej adresy vo vašich nastaveniach.',
 'emailconfirmlink' => 'Potvrďte svoju e-mailovú adresu',
 'invalidemailaddress' => 'Emailovú adresu nemožno akceptovať, pretože sa zdá, že má neplatný formát. Zadajte adresu v správnom tvare alebo nechajte príslušné políčko prázdne.',
@@ -831,6 +833,8 @@ Prosím, počkajte $1 predtým, než to skúsite znova.',
 'login-abort-generic' => 'Vaše prihlásenie nebolo úspešné - zrušené',
 'loginlanguagelabel' => 'Jazyk: $1',
 'suspicious-userlogout' => 'Vaša požiadavka odhlásiť sa bola zamietnutá, pretože to vyzerá, že ju poslal pokazený prehliadač alebo proxy server.',
+'createacct-another-realname-tip' => 'Skutočné meno je nepovinné.
+Ak sa rozhodnete ho poskytnúť, použije sa na označenie vašej práce.',
 
 # Email sending
 'php-mail-error-unknown' => 'Neznáma chyba vo funkcii PHP mail()',
@@ -846,7 +850,7 @@ Prosím, počkajte $1 predtým, než to skúsite znova.',
 'newpassword' => 'Nové heslo:',
 'retypenew' => 'Nové heslo (ešte raz):',
 'resetpass_submit' => 'Nastaviť heslo a prihlásiť sa',
-'changepassword-success' => 'Vaše heslo bolo úspešne zmenené! Prebieha prihlasovanie...',
+'changepassword-success' => 'Vaše heslo bolo úspešne zmenené!',
 'resetpass_forbidden' => 'Heslá nie je možné zmeniť',
 'resetpass-no-info' => 'Aby ste mohli priamo pristupovať k tejto stránke, musíte sa prihlásiť.',
 'resetpass-submit-loggedin' => 'Zmeniť heslo',
@@ -891,7 +895,7 @@ ignorovať a ďalej používať vaše staré heslo.',
 Dočasné heslo:$2',
 'passwordreset-emailsent' => 'Email s novým heslom bol odoslaný.',
 'passwordreset-emailsent-capture' => 'Bol odoslaný email s novým heslom, ktorý je zobrazený nižšie.',
-'passwordreset-emailerror-capture' => 'Bol odoslaný email s novým heslom, ktorý je zobrazený nižšie, ale nepodarilo sa ho odoslať používateľovi: $1',
+'passwordreset-emailerror-capture' => 'Bol odoslaný email s novým heslom, ktorý je zobrazený nižšie, ale nepodarilo sa ho odoslať {{GENDER:$2|používateľovi}}: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Zmeniť emailovú adresu',
@@ -906,7 +910,17 @@ Dočasné heslo:$2',
 'changeemail-cancel' => 'Zrušiť',
 
 # Special:ResetTokens
+'resettokens' => 'Obnoviť tokeny',
+'resettokens-text' => 'Tu môžete obnoviť tokeny, ktoré umožňujú prístup k určitým súkromným údajom spojeným s vaším účtom.
+
+Mali by ste to urobiť, ak ste ich omylom niekomu poskytli alebo ak bolo vaše konto zneužité.',
+'resettokens-no-tokens' => 'Neexistujú žiadne tokeny, ktoré by bolo možné obnoviť.',
+'resettokens-legend' => 'Obnoviť tokeny',
 'resettokens-tokens' => 'Tokeny:',
+'resettokens-token-label' => '$1 (aktuálna hodnota: $2)',
+'resettokens-watchlist-token' => 'Token pre webový kanál (Atom/RSS) [[Special:Watchlist|zmien na stránkach, ktoré sledujete]]',
+'resettokens-done' => 'Tokeny boli obnovené.',
+'resettokens-resetbutton' => 'Obnoviť zvolené tokeny.',
 
 # Edit page toolbar
 'bold_sample' => 'Tučný text',
@@ -987,9 +1001,7 @@ Možno bola presunutá alebo zmazaná odkedy ste si stránku zobrazili.',
 'loginreqlink' => 'prihlásiť',
 'loginreqpagetext' => 'Aby ste mohli prezerať ďalšie stránky, musíte sa $1.',
 'accmailtitle' => 'Heslo bolo odoslané.',
-'accmailtext' => "Náhodne vytvorené heslo pre používateľa [[User talk:$1|$1]] bolo poslané na $2.
-
-Heslo tohto nového účtu je možné zmeniť na stránke ''[[Special:ChangePassword|zmena hesla]]'' po prihlásení.",
+'accmailtext' => "Náhodne vytvorené heslo pre používateľa [[User talk:$1|$1]] bolo poslané na $2. Je možné ho zmeniť na stránke ''[[Special:ChangePassword|zmena hesla]]'' po prihlásení.",
 'newarticle' => '(Nový)',
 'newarticletext' => "Sledovali ste odkaz na stránku, ktorá zatiaľ neexistuje.
 Stránku vytvoríte tak, že začnete písať do dolného poľa a potom stlačíte tlačidlo „Uložiť stránku“.
@@ -1000,8 +1012,7 @@ Preto musíme na jeho identifikáciu použiť numerickú IP adresu. Je možné,
 Ak ste anonymný používateľ a máte pocit, že vám boli adresované irelevantné diskusné príspevky, [[Special:UserLogin/signup|vytvorte si konto]] alebo sa [[Special:UserLogin|prihláste]], aby sa zamedzilo budúcim zámenám s inými anonymnými používateľmi.''",
 'noarticletext' => 'Na tejto stránke sa momentálne nenachádza žiadny text.
 Môžete [[Special:Search/{{PAGENAME}}|vyhľadávať názov tejto stránky]] v obsahu iných stránok,
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} vyhľadávať v súvisiacich záznamoch],
-alebo [{{fullurl:{{FULLPAGENAME}}|action=edit}} upravovať túto stránku]</span>.',
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} vyhľadávať v súvisiacich záznamoch] alebo [{{fullurl:{{FULLPAGENAME}}|action=edit}} upravovať túto stránku]</span>.',
 'noarticletext-nopermission' => 'Táto stránka momentálne neobsahuje žiadny text.
 Môžete [[Special:Search/{{PAGENAME}}|hľadať názov tejto stránky]] v texte iných stránok
 alebo <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hľadať v súvisiacich záznamoch]</span>, ale nemáte oprávnenie túto stránku vytvoriť.',
@@ -1150,6 +1161,7 @@ Tieto argumenty boli vynechané.',
 'undo-failure' => 'Úpravu nie je možné vrátiť kvôli konfliktným medziľahlým úpravám.',
 'undo-norev' => 'Túto úpravu nie je možné vrátiť, pretože neexistuje alebo bola zmazaná.',
 'undo-summary' => 'Revízia $1 používateľa [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusia]]) bola vrátená',
+'undo-summary-username-hidden' => 'Vrátiť revíziu $1, ktorú vykonal skrytý používateľ',
 
 # Account creation failure
 'cantcreateaccounttitle' => 'Nie je možné vytvoriť účet',
@@ -1169,7 +1181,7 @@ Dôvod, ktorý $3 uviedol, je ''$2''",
 'currentrevisionlink' => 'Aktuálna úprava',
 'cur' => 'aktuálna',
 'next' => 'ďalšia',
-'last' => 'posledná',
+'last' => 'predošlá',
 'page_first' => 'prvá',
 'page_last' => 'posledná',
 'histlegend' => 'Porovnanie zmien: označte výberové políčka revízií, ktoré sa majú porovnať a kliknite na tlačidlo dolu.<br />
@@ -1239,18 +1251,19 @@ Ako správca si môžete tento rozdiel zobraziť; podrobnosti môžete nájsť v
 Iní správcovia {{GRAMMAR:genitív|{{SITENAME}}}} budú stále môcť pristupovať k skrytému obsahu a môžu ho znova obnoviť použitím tohto rozhrania v prípade, že nie sú stanovené ďalšie obmedzenia.",
 'revdelete-confirm' => 'Prosím, potvrďte, že to naozaj chcete vykonať, rozumiete následkom a že to robíte v súlade s [[{{MediaWiki:Policy-url}}|politikou]].',
 'revdelete-suppress-text' => "Zatajenie by sa malo používať '''výlučne''' v nasledovných prípadoch:
+* Potenciálne hanlivé informácie
 * Nevhodné osobné údaje
-*: ''adresy, telefóne čísla, rodné čísla a pod.''",
+*: ''domáce adresy, telefóne čísla, rodné čísla a pod.''",
 'revdelete-legend' => 'Nastaviť obmedzenia viditeľnosti',
-'revdelete-hide-text' => 'Skryť text revízie',
+'revdelete-hide-text' => 'Text revízie',
 'revdelete-hide-image' => 'Skryť obsah súboru',
 'revdelete-hide-name' => 'Skryť činnosť a cieľ',
-'revdelete-hide-comment' => 'Skryť zhrnutie úprav',
-'revdelete-hide-user' => 'Skryť používateľské meno/IP',
+'revdelete-hide-comment' => 'Zhrnutie úprav',
+'revdelete-hide-user' => 'Používateľské meno/IP redaktora',
 'revdelete-hide-restricted' => 'Zatajiť údaje pred všetkými, aj pred správcami',
 'revdelete-radio-same' => '(nezmeniť)',
-'revdelete-radio-set' => 'Áno',
-'revdelete-radio-unset' => 'Nie',
+'revdelete-radio-set' => 'Viditeľné',
+'revdelete-radio-unset' => 'Skryté',
 'revdelete-suppress' => 'Skryť údaje pred správcami rovnako ako pred ostatnými',
 'revdelete-unsuppress' => 'Odstrániť obmedzenia obnovených revízií',
 'revdelete-log' => 'Dôvod:',
@@ -1404,7 +1417,6 @@ Podrobnosti nájdete v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}
 'mypreferences' => 'Nastavenia',
 'prefs-edits' => 'Počet úprav:',
 'prefsnologin' => 'Nie ste prihlásený/á',
-'prefsnologintext' => 'Aby ste mohli zmeniť svoje nastavenia, musíte byť <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} prihlásený]</span>.',
 'changepassword' => 'Zmeniť heslo',
 'prefs-skin' => 'Vzhľad',
 'skin-preview' => 'Náhľad',
@@ -1429,7 +1441,7 @@ Podrobnosti nájdete v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}
 'prefs-rendering' => 'Vzhľad',
 'saveprefs' => 'Uložiť nastavenia',
 'resetprefs' => 'Obnoviť pôvodné nastavenia',
-'restoreprefs' => 'Obnoviť všetky nastavenia na štandardné hodnoty',
+'restoreprefs' => 'Obnoviť všetky predvolené nastavenia (vo všetkých sekciách)',
 'prefs-editing' => 'Úpravy',
 'rows' => 'Riadky:',
 'columns' => 'Stĺpce:',
@@ -1441,6 +1453,9 @@ Podrobnosti nájdete v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}
 'recentchangesdays-max' => '(maximálne $1 {{PLURAL:$1|deň|dni|dní}})',
 'recentchangescount' => 'Štandardne zobrazovaný počet úprav:',
 'prefs-help-recentchangescount' => 'Toto sa týka posledných úprav, histórií stránok a záznamov.',
+'prefs-help-watchlist-token2' => 'Toto je tajný kľúč k webovému kanálu vášho zoznamu sledovaných stránok.
+každý, kto ho pozná si bude môcť prečítať váš zoznam sledovaných stránok, preto ho nezverejňujte.
+[[Special:ResetTokens|Kliknite sem, ak potrebujete vytvoriť nový]].',
 'savedprefs' => 'Vaše nastavenia boli uložené.',
 'timezonelegend' => 'Časové pásmo:',
 'localtime' => 'Miestny čas:',
@@ -1472,8 +1487,8 @@ Podrobnosti nájdete v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}
 Túto operáciu nemožno vrátiť.',
 'prefs-emailconfirm-label' => 'Potvrdenie emailu:',
 'youremail' => 'Váš e-mail²',
-'username' => 'Používateľské meno:',
-'uid' => 'ID používateľa:',
+'username' => '{{GENDER:$1|Používateľské meno}}:',
+'uid' => 'ID {{GENDER:$1|používateľa}}:',
 'prefs-memberingroups' => '{{GENDER:$2|Člen|Členovia}} {{PLURAL:$1|skupiny|skupín}}:',
 'prefs-registration' => 'Čas registrácie:',
 'yourrealname' => 'Skutočné meno *:',
@@ -1485,11 +1500,12 @@ Túto operáciu nemožno vrátiť.',
 'badsig' => 'Neplatný podpis v pôvodnom tvare; skontrolujte HTML značky.',
 'badsiglength' => 'Váš podpis je príliš dlhý.
 Musí obsahovať menej ako $1 {{PLURAL:$1|znak|znaky|znakov}}.',
-'yourgender' => 'Pohlavie:',
-'gender-unknown' => 'Neuvedené',
-'gender-male' => 'Muž',
-'gender-female' => 'Žena',
-'prefs-help-gender' => 'Nepovinné: používa softvér na správne oslovenie v závislosti od rodu. Táto informácia bude verejná.',
+'yourgender' => 'Ako si želáte byť označovaný?',
+'gender-unknown' => 'Radšej nechcem uviesť',
+'gender-male' => 'On upravuje wiki stránky',
+'gender-female' => 'Ona upravuje wiki stránky',
+'prefs-help-gender' => 'Nastavenie tejto voľby nie je povinné.
+Softvér používa toto nastavenie na správne oslovenie a označenie vás ostatným v závislosti od gramatického rodu. Táto informácia bude verejná.',
 'email' => 'E-mail',
 'prefs-help-realname' => '¹ Skutočné meno (nepovinné): ak sa rozhodnete ho poskytnúť, bude použité na označenie vašej práce.',
 'prefs-help-email' => 'Emailová adresa je nepovinný údaj, ale je potrebná v prípade, že ak zabudnete heslo, môžete si na email vyžiadať nové.',
@@ -1500,7 +1516,8 @@ Musí obsahovať menej ako $1 {{PLURAL:$1|znak|znaky|znakov}}.',
 'prefs-signature' => 'Podpis',
 'prefs-dateformat' => 'Formát dátumu',
 'prefs-timeoffset' => 'Časový posun',
-'prefs-advancedediting' => 'Rozšírené možnosti',
+'prefs-advancedediting' => 'Všeobecné možnosti',
+'prefs-editor' => 'Redaktor',
 'prefs-preview' => 'Náhľad',
 'prefs-advancedrc' => 'Rozšírené možnosti',
 'prefs-advancedrendering' => 'Rozšírené možnosti',
@@ -1510,6 +1527,7 @@ Musí obsahovať menej ako $1 {{PLURAL:$1|znak|znaky|znakov}}.',
 'prefs-displaysearchoptions' => 'Možnosti zobrazenia',
 'prefs-displaywatchlist' => 'Možnosti zobrazenia',
 'prefs-diffs' => 'Rozdiely',
+'prefs-help-prefershttps' => 'Táto voľba sa prejaví pri vašom ďalšom prihlásení.',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'Formát e-mailovej adresa vyzerá byť správny',
@@ -1533,9 +1551,11 @@ Musí obsahovať menej ako $1 {{PLURAL:$1|znak|znaky|znakov}}.',
 'userrights-no-interwiki' => 'Nemáte oprávnenie upravovať práva používateľov na iných wiki.',
 'userrights-nodatabase' => 'Databáza $1 neexistuje alebo nie je lokálna.',
 'userrights-nologin' => 'Aby ste mohli prideľovať používateľom oprávnenia, musíte sa [[Special:UserLogin|prihlásiť]] s účtom správcu.',
-'userrights-notallowed' => 'Váš účet nemá oprávnenie prideľovať alebo odoberať používateľom oprávnenia.',
+'userrights-notallowed' => 'Nemáte oprávnenie prideľovať alebo odoberať používateľom oprávnenia.',
 'userrights-changeable-col' => 'Skupiny, ktoré môžete zmeniť',
 'userrights-unchangeable-col' => 'Skupiny, ktoré nemôžete zmeniť',
+'userrights-conflict' => 'Konflikt zmien práv používateľov! Prosím, skontrolujte ho a potvrďte svoje zmeny.',
+'userrights-removed-self' => 'Úspešne ste odstránili svoje vlastné práva. Z toho dôvodu už nebudete mať prístup k tejto stránke.',
 
 # Groups
 'group' => 'Skupina:',
@@ -1579,7 +1599,7 @@ Musí obsahovať menej ako $1 {{PLURAL:$1|znak|znaky|znakov}}.',
 'right-reupload-shared' => 'Nahrávať lokálne súbory, ktoré majú prednosť pred zdieľaným úložiskom',
 'right-upload_by_url' => 'Nahrávať súbor z URL adresy',
 'right-purge' => 'Čistiť vyrovnávaciu pamäť stránky bez potvrdzovacej stránky',
-'right-autoconfirmed' => 'Upravovať čiastočne zamknuté stránky',
+'right-autoconfirmed' => 'Neovplyvnený obmedzeniami na základe IP adresy',
 'right-bot' => 'Byť považovaný za automatický proces',
 'right-nominornewtalk' => 'Pri drobných úpravách diskusnej stránky nevypisovať hlásenie o nových správach',
 'right-apihighlimits' => 'Používať vyššie limity v požiadavkách API',
@@ -1599,13 +1619,20 @@ Musí obsahovať menej ako $1 {{PLURAL:$1|znak|znaky|znakov}}.',
 'right-hideuser' => 'Zablokovať používateľské meno tak, že bude verejnosti skryté',
 'right-ipblock-exempt' => 'Obchádzať blokovanie IP adries, rozsahov a automatické blokovanie',
 'right-proxyunbannable' => 'Obchádzať automatické blokovanie proxy serverov',
-'right-unblockself' => 'Odblokovať samých seba',
-'right-protect' => 'Meniť úroveň zamknutia a upravovať zamknuté stránky',
-'right-editprotected' => 'Upravovať zamknuté schránky (bez kaskádovej ochrany)',
+'right-unblockself' => 'Odblokovať seba samého',
+'right-protect' => 'Meniť úroveň zamknutia a upravovať kaskádovito zamknuté stránky',
+'right-editprotected' => 'Upravovať stránky zamknuté ako „{{int:protect-level-sysop}}“',
+'right-editsemiprotected' => 'Upravovať stránky zamknuté ako „{{int:protect-level-autoconfirmed}}“',
 'right-editinterface' => 'Upravovať správy používateľského rozhrania',
 'right-editusercssjs' => 'Upravovať CSS a JS súbory ostatných používateľov',
 'right-editusercss' => 'Upravovať CSS súbory ostatných používateľov',
 'right-edituserjs' => 'Upravovať JS súbory ostatných používateľov',
+'right-editmyusercss' => 'Upraviť svoje vlastné používateľské súbory CSS',
+'right-editmyuserjs' => 'Upraviť svoje vlastné používateľské súbory JavaScript',
+'right-viewmywatchlist' => 'Zobraziť vlastný zoznam sledovaných stránok',
+'right-editmywatchlist' => 'Upraviť vlastný zoznam sledovaných stránok. Všimnite si, že niektoré operácie budú môcť pridať stránky aj bez tohto oprávnenia.',
+'right-viewmyprivateinfo' => 'Zobraziť vlastné súkromné údaje (napríklad e-mailovú adresu, skutočné meno)',
+'right-editmyprivateinfo' => 'Upraviť vlastné súkromné údaje (napríklad e-mailovú adresu, skutočné meno)',
 'right-editmyoptions' => 'Upraviť vlastné nastavenia',
 'right-rollback' => 'Rýchlo vrátiť úpravy posledného používateľa, ktorý upravoval danú stránku',
 'right-markbotedits' => 'Označiť vrátené úpravy ako úpravy robota',
@@ -1658,8 +1685,8 @@ Musí obsahovať menej ako $1 {{PLURAL:$1|znak|znaky|znakov}}.',
 'action-block' => 'zablokovať úpravy tohto používateľa',
 'action-protect' => 'zmeniť úrovne ochrany tejto stránky',
 'action-rollback' => 'rýchlo vrátiť úpravy posledného používateľa, ktorý upravoval danú stránku',
-'action-import' => 'importovať túto stránku z inej wiki',
-'action-importupload' => 'importovať túto stránku z nahraného súboru',
+'action-import' => 'importovať stránky z inej wiki',
+'action-importupload' => 'importovať stránky z nahraného súboru',
 'action-patrol' => 'označiť úpravy iných ako strážené',
 'action-autopatrol' => 'označiť vlastné úpravy ako strážené',
 'action-unwatchedpages' => 'zobraziť zoznam nesledovaných stránok',
@@ -1675,6 +1702,7 @@ Musí obsahovať menej ako $1 {{PLURAL:$1|znak|znaky|znakov}}.',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|zmena|zmeny|zmien}}',
+'enhancedrc-since-last-visit' => '$1 {{PLURAL:$1|od poslednej návštevy}}',
 'enhancedrc-history' => 'história',
 'recentchanges' => 'Posledné úpravy',
 'recentchanges-legend' => 'Možnosti posledných zmien',
@@ -1697,7 +1725,7 @@ Musí obsahovať menej ako $1 {{PLURAL:$1|znak|znaky|znakov}}.',
 'rclinks' => 'Zobraziť posledných $1 úprav v posledných $2 dňoch<br />$3',
 'diff' => 'rozdiel',
 'hist' => 'história',
-'hide' => 'skryť',
+'hide' => 'Skryť',
 'show' => 'zobraziť',
 'minoreditletter' => 'd',
 'newpageletter' => 'N',
@@ -2114,6 +2142,8 @@ Možno chcete upraviť popis na jeho [$2 popisnej stránke súboru] tam.',
 'pageswithprop-text' => 'Táto stránka obsahuje stránky, ktoré používajú konkrétnu vlastnosť stránky.',
 'pageswithprop-prop' => 'Názov vlastnosti:',
 'pageswithprop-submit' => 'Vykonať',
+'pageswithprop-prophidden-long' => 'dlhá hodnota textovej vlastnosti bola skrytá ($1)',
+'pageswithprop-prophidden-binary' => 'hodnota binárnej vlastnosti bola skrytá ($1)',
 
 'doubleredirects' => 'Dvojité presmerovania',
 'doubleredirectstext' => 'Táto stránka obsahuje zoznam stránok, ktoré presmerovávajú na iné presmerovacie stránky.
@@ -2187,6 +2217,7 @@ Každý riadok obsahuje odkaz na prvé a druhé presmerovanie a tiež prvý riad
 'listusers' => 'Zoznam používateľov',
 'listusers-editsonly' => 'Vynechať používateľov bez úprav',
 'listusers-creationsort' => 'Zoradiť podľa dátumu vytvorenia',
+'listusers-desc' => 'Zoradiť zostupne',
 'usereditcount' => '$1 {{PLURAL:$1|úprava|úpravy|úprav}}',
 'usercreated' => '{{GENDER:$3|Registrovaný|Registrovaná|Registrovaný(á)}} $1 $2',
 'newpages' => 'Nové stránky',
@@ -2282,7 +2313,7 @@ Povinná je minimálne doména najvyššej úrovne, napr. „*.org“.<br />
 # Special:ActiveUsers
 'activeusers' => 'Zoznam aktívnych používateľov',
 'activeusers-intro' => 'Toto je zoznam používateľov, ktorí $1 {{PLURAL:$1|za posledný 1 deň|za posledné $1 dni|za posledných $1 dní}} vykonali nejakú aktivitu.',
-'activeusers-count' => '$1 {{PLURAL:$1|úprava|úpravy|úprav}} za {{PLURAL:$3|posledný deň|posledné $3 dni|posledných $3 dní}}',
+'activeusers-count' => '$1 {{PLURAL:$1|operácia|operácie|operácií}} za {{PLURAL:$3|posledný deň|posledné $3 dni|posledných $3 dní}}',
 'activeusers-from' => 'Zobraziť používateľov počínajúc:',
 'activeusers-hidebots' => 'Skryť robotov',
 'activeusers-hidesysops' => 'Skryť správcov',
@@ -2443,10 +2474,12 @@ Na $2 nájdete zoznam posledných zmazaní.',
 'deletecomment' => 'Dôvod:',
 'deleteotherreason' => 'Iný/ďalší dôvod:',
 'deletereasonotherlist' => 'Iný dôvod',
-'deletereason-dropdown' => '*Bežné dôvody zmazania
-** Na žiadosť autora
+'deletereason-dropdown' => '* Bežné dôvody zmazania
+** Spam
+** Vandalizmus
 ** Porušenie autorských práv
-** Vandalizmus',
+** Na žiadosť autora
+** Chybné presmerovanie',
 'delete-edit-reasonlist' => 'Upraviť dôvody zmazania',
 'delete-toobig' => 'Táto stránka má veľkú históriu úprav, viac ako $1 {{PLURAL:$1|revíziu|revízie|revízií}}. Mazanie takýchto stránok bolo obmedzené, aby sa zabránilo náhodnému poškodeniu {{GRAMMAR:genitív|{{SITENAME}}}}.',
 'delete-warning-toobig' => 'Táto stránka má veľkú históriu úprav, viac ako $1 {{PLURAL:$1|revíziu|revízie|revízií}}. Jej zmazanie by mohlo narušiť databázové operácie {{GRAMMAR:genitív|{{SITENAME}}}}; postupujte opatrne.',
@@ -2454,7 +2487,7 @@ Na $2 nájdete zoznam posledných zmazaní.',
 # Rollback
 'rollback' => 'Vrátiť späť úpravy',
 'rollback_short' => 'Vrátiť',
-'rollbacklink' => 'rollback',
+'rollbacklink' => 'vrátiť',
 'rollbacklinkcount' => 'vrátenie $1 {{PLURAL:$1|úpravy|úprav}}',
 'rollbacklinkcount-morethan' => 'vrátiť viac ako $1 {{PLURAL:$1|úpravu|úprav}}',
 'rollbackfailed' => 'Rollback neúspešný',
@@ -2464,7 +2497,7 @@ Na $2 nájdete zoznam posledných zmazaní.',
 Autorom poslednej úpravy je [[User:$3|$3]] ([[User talk:$3|Diskusia]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Zhrnutie úpravy bolo: „''$1''“.",
 'revertpage' => 'Posledné úpravy používateľa [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusia]]) vrátené; bola obnovená posledná úprava $1',
-'revertpage-nouser' => 'Vrátené úpravy (meno používateľa odstránené) na poslednú revíziu od [[User:$1|$1]]',
+'revertpage-nouser' => 'Vrátené úpravy od skrytého používateľa na poslednú revíziu od {{GENDER:$1|[[User:$1|$1]]}}',
 'rollback-success' => 'Úpravy $1 vrátené; obnovená posledná verzia od $2.',
 
 # Edit tokens
@@ -2604,7 +2637,7 @@ $1',
 'contributions' => 'Príspevky {{GENDER:$1|používateľa|používateľky}}',
 'contributions-title' => 'Príspevky používateľa pre $1',
 'mycontris' => 'Príspevky',
-'contribsub2' => 'Príspevky $1 ($2)',
+'contribsub2' => 'Príspevky {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'Neboli nájdené úpravy, ktoré by zodpovedali týmto kritériám.',
 'uctop' => '(aktuálne)',
 'month' => 'Mesiac:',
@@ -2726,7 +2759,7 @@ z/od momentálne zablokovanej IP adresy/používateľa.',
 'ipblocklist-empty' => 'Zoznam blokovaní je prázdny.',
 'ipblocklist-no-results' => 'Požadovaná IP adresa alebo používateľské meno nie je blokovaná.',
 'blocklink' => 'zablokovať',
-'unblocklink' => 'odblokuj',
+'unblocklink' => 'odblokovať',
 'change-blocklink' => 'zmeniť blokovanie',
 'contribslink' => 'príspevky',
 'emaillink' => 'poslať email',
@@ -2764,6 +2797,7 @@ blokované IP adresy nie sú zahrnuté. Pozri zoznam
 'proxyblockreason' => 'Vaša IP adresa bola zablokovaná, pretože je otvorená proxy. Prosím kontaktujte vášho internetového poskytovateľa alebo technickú podporu a informujte ich o tomto vážnom bezpečnostnom probléme.',
 'sorbsreason' => 'Vaša IP adresa je vedená ako nezabezpečený proxy server v DNSBL.',
 'sorbs_create_account_reason' => 'Vaša IP adresa je vedená ako nezabezpečený proxy server v databáze DNSBL, ktorú používa {{SITENAME}}. Nemôžete si vytvoriť účet.',
+'xffblockreason' => 'IP adresa prítomná v hlavičke X-Forwarded-For patriaca buď vám alebo proxy serveru, ktorý používate, je zablokovaná. Pôvodný dôvod zablokovania bol: $1',
 'cant-block-while-blocked' => 'Nemôžete blokovať iných používateľov, kým ste zablokovaný.',
 'cant-see-hidden-user' => 'Používateľ, ktorého sa pokúšate zablokovať už bol zablokovaný a skrytý. Pretože nemáte právo hideuser, nemôžete vidieť ani upravovať blokovanie používateľa.',
 'ipbblocked' => 'Nemôžete zablokovať ani odblokovať iných používateľov, pretože ste sami zablokovaní',
@@ -2868,7 +2902,7 @@ Prosím, zlúčte ich ručne.'''",
 'movesubpagetext' => 'Táto stránka má $1 {{PLURAL:$1|podstránku, ktorá je zobrazená nižšie|podstránky, ktoré sú zobrazené nižšie|podstránok, ktoré sú zobrazené nižšie}}.',
 'movenosubpage' => 'Táto stránka nemá podstránky.',
 'movereason' => 'Dôvod:',
-'revertmove' => 'obnova',
+'revertmove' => 'obnov',
 'delete_and_move' => 'Vymazať a presunúť',
 'delete_and_move_text' => '==Je potrebné zmazať stránku==
 
@@ -2896,7 +2930,7 @@ Cieľová stránka „[[:$1]]“ už existuje. Chcete ho vymazať a vytvoriť ta
 Prosím, zvoľte iný názov.',
 
 # Export
-'export' => 'Export stránok',
+'export' => 'Exportovať stránky',
 'exporttext' => 'Môžete exportovať text a históriu úprav konkrétnej
 stránky alebo množiny stránok do XML; tieto môžu byť potom importované do inej
 wiki používajúceho MediaWiki softvér pomocou stránky Special:Import.
@@ -2924,7 +2958,7 @@ V druhom prípade môžete tiež použiť odkaz, napr. [[{{#Special:Export}}/{{M
 'allmessagesdefault' => 'štandardný text',
 'allmessagescurrent' => 'aktuálny text',
 'allmessagestext' => 'Toto je zoznam všetkých správ dostupných v mennom priestore MediaWiki.
-Prosím, navštívte [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] a [//translatewiki.net translatewiki.net] ak chcete prispieť k všeobecnej lokalizácii MediaWiki.',
+Prosím, navštívte [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] a [//translatewiki.net translatewiki.net] ak chcete prispieť k všeobecnej lokalizácii MediaWiki.',
 'allmessagesnotsupportedDB' => "Túto stránku nemožno použiť, pretože '''\$wgUseDatabaseMessages''' je vypnuté.",
 'allmessages-filter-legend' => 'Filter',
 'allmessages-filter' => 'Filter podľa stavu prispôsobenia:',
@@ -3023,16 +3057,16 @@ Uložte ho na svoj disk a nahrajte sem.',
 'tooltip-pt-anonuserpage' => 'Používateľská stránka pre ip adresu, ktorú upravujete ako',
 'tooltip-pt-mytalk' => 'Vaša diskusná stránka',
 'tooltip-pt-anontalk' => 'Diskusia o úpravách z tejto ip adresy',
-'tooltip-pt-preferences' => 'Moje nastavenia',
+'tooltip-pt-preferences' => 'Vaše nastavenia',
 'tooltip-pt-watchlist' => 'Zoznam stránok, na ktorých sledujete zmeny.',
 'tooltip-pt-mycontris' => 'Zoznam vašich príspevkov',
 'tooltip-pt-login' => 'Odporúčame vám prihlásiť sa, nie je to však povinné.',
 'tooltip-pt-anonlogin' => 'Odporúčame vám prihlásiť sa, nie je to však povinné.',
 'tooltip-pt-logout' => 'Odhlásiť',
 'tooltip-ca-talk' => 'Diskusia o obsahu stránky',
-'tooltip-ca-edit' => 'Môžete upravovať túto stránku. Prosíme, pred uložením použite tlačidlo Zobraziť náhľad.',
+'tooltip-ca-edit' => 'Môžete upravovať túto stránku. Prosím, pred uložením použite tlačidlo Zobraziť náhľad.',
 'tooltip-ca-addsection' => 'Začať novú sekciu',
-'tooltip-ca-viewsource' => 'Táto stránka je zamknutá. Môžete však vidieť jej zdrojový text.',
+'tooltip-ca-viewsource' => 'Táto stránka je zamknutá. Môžete však zobraziť jej zdrojový text.',
 'tooltip-ca-history' => 'Minulé verzie tejto stránky.',
 'tooltip-ca-protect' => 'Zamknúť túto stránku',
 'tooltip-ca-unprotect' => 'Zmeniť stav ochrany tejto stránky',
@@ -3044,34 +3078,34 @@ Uložte ho na svoj disk a nahrajte sem.',
 'tooltip-search' => 'Vyhľadávanie na {{GRAMMAR:datív|{{SITENAME}}}}',
 'tooltip-search-go' => 'Prejsť na stránku s presne takýmto názvom, ak existuje',
 'tooltip-search-fulltext' => 'Hľadať tento text na stránkach',
-'tooltip-p-logo' => 'Hlavná stránka',
+'tooltip-p-logo' => 'Navštívte Hlavnú stránku',
 'tooltip-n-mainpage' => 'Navštíviť Hlavnú stránku',
 'tooltip-n-mainpage-description' => 'Navštíviť hlavnú stránku',
 'tooltip-n-portal' => 'O projekte, ako môžete prispieť, kde čo nájsť',
 'tooltip-n-currentevents' => 'Aktuálne udalosti a ich pozadie',
-'tooltip-n-recentchanges' => 'Zoznam posledných úprav vo wiki.',
-'tooltip-n-randompage' => 'Zobrazenie náhodnej stránky',
-'tooltip-n-help' => 'Pozrieť si pomoc.',
+'tooltip-n-recentchanges' => 'Zoznam posledných úprav na wiki.',
+'tooltip-n-randompage' => 'Zobraziť náhodnú stránku',
+'tooltip-n-help' => 'Miesto, kde sa môžete dozvedieť',
 'tooltip-t-whatlinkshere' => 'Zoznam všetkých wiki stránok, ktoré sem odkazujú',
-'tooltip-t-recentchangeslinked' => 'Posledné úpravy v stránkach, ktoré odkazujú na túto stránku',
+'tooltip-t-recentchangeslinked' => 'Posledné úpravy v stránkach, na ktoré odkazuje táto stránka',
 'tooltip-feed-rss' => 'RSS feed pre túto stránku',
-'tooltip-feed-atom' => 'Atom feed pre túto stránku',
+'tooltip-feed-atom' => 'Kanál Atom pre túto stránku',
 'tooltip-t-contributions' => 'Pozrieť si zoznam príspevkov od tohto používateľa',
 'tooltip-t-emailuser' => 'Poslať e-mail tomuto používateľovi',
-'tooltip-t-upload' => 'Nahranie obrázkových alebo multimediálnych súborov',
+'tooltip-t-upload' => 'Nahranie súborov',
 'tooltip-t-specialpages' => 'Zoznam všetkých špeciálnych stránok',
 'tooltip-t-print' => 'Verzia tejto stránky pre tlač',
 'tooltip-t-permalink' => 'Trvalý odkaz na túto verziu stránky',
-'tooltip-ca-nstab-main' => 'Pozrieť si obsah stránky',
+'tooltip-ca-nstab-main' => 'Zobraziť obsah stránky',
 'tooltip-ca-nstab-user' => 'Pozrieť si stránku používateľa',
 'tooltip-ca-nstab-media' => 'Pozrieť si stránku médií',
 'tooltip-ca-nstab-special' => 'Toto je špeciálna stránka, nemôžete ju upravovať.',
 'tooltip-ca-nstab-project' => 'Pozrieť si stránku projektu',
 'tooltip-ca-nstab-image' => 'Zobraziť popisnú stránku súboru',
 'tooltip-ca-nstab-mediawiki' => 'Pozrieť si systémovú stránku',
-'tooltip-ca-nstab-template' => 'Pozrieť si šablónu',
+'tooltip-ca-nstab-template' => 'Zobraziť šablónu',
 'tooltip-ca-nstab-help' => 'Pozrieť si stránku Pomocníka',
-'tooltip-ca-nstab-category' => 'Pozrieť si stránku s kategóriami',
+'tooltip-ca-nstab-category' => 'Zobraziť stránku s kategóriami',
 'tooltip-minoredit' => 'Označiť túto úpravu ako drobnú',
 'tooltip-save' => 'Uložiť vaše úpravy',
 'tooltip-preview' => 'Náhľad úprav, prosím použite pred uložením!',
@@ -3151,13 +3185,14 @@ Pravdepodobne to spôsobil odkaz na externú internetovú lokalitu, ktorá sa na
 'pageinfo-length' => 'Dĺžka stránky (v bajtoch)',
 'pageinfo-article-id' => 'ID stránky',
 'pageinfo-language' => 'Jazyk obsahu stránok',
-'pageinfo-robot-policy' => 'Stav vyhľadávača',
-'pageinfo-robot-index' => 'Indexovať stránku',
-'pageinfo-robot-noindex' => 'Neindexovať stránku',
+'pageinfo-content-model' => 'Model obsahu stránky',
+'pageinfo-robot-policy' => 'Indexovanie pomocou robotov',
+'pageinfo-robot-index' => 'Povolené',
+'pageinfo-robot-noindex' => 'Nepovolené',
 'pageinfo-views' => 'Počet zobrazení',
 'pageinfo-watchers' => 'Počet používateľov sledujúcich stránku',
 'pageinfo-few-watchers' => 'Menej ako $1 {{PLURAL:$1|sledujúci|sledujúci|sledujúcich}}',
-'pageinfo-redirects-name' => 'Presmerovania na túto stránku',
+'pageinfo-redirects-name' => 'Počet presmerovaní na túto stránku',
 'pageinfo-subpages-name' => 'Podstránky tejto stránky',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|presmerovanie|presmerovania|presmerovaní}}; $3 {{PLURAL:$3|nie je presmerovanie|nie sú presmerovania}})',
 'pageinfo-firstuser' => 'Tvorca stránky',
@@ -3703,7 +3738,7 @@ Ostatné budú predvolene skryté.
 
 # External editor support
 'edit-externally' => 'Upraviť tento súbor pomocou externého programu',
-'edit-externally-help' => '(Viac informácií poskytnú inštrukcie pre nastavenie [//www.mediawiki.org/wiki/Manual:External_editors externého editora])',
+'edit-externally-help' => '(Viac informácií poskytnú inštrukcie pre nastavenie [https://www.mediawiki.org/wiki/Manual:External_editors externého editora])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'všetky',
@@ -3765,7 +3800,7 @@ ktorý zruší potvrdenie emailovej adresy:
 $5
 
 Platnosť tohto potvrdzovacieho kódu vyprší $4.',
-'confirmemail_body_set' => 'Niekto, pravdepodobne vy, z IP adresy $1
+'confirmemail_body_set' => 'Niekto, pravdepodobne vy, z IP adresy $1
 nastavil e-mailovú adresu účtu „$2“ na túto adresu na {{GRAMMAR:genitív|{{SITENAME}}}}.
 
 Ak chcete potvrdiť, že tento účet skutočne patrí vám a aktivovať
@@ -3774,7 +3809,7 @@ e-mailové funkcie na {{GRAMMAR:genitív|{{SITENAME}}}}, otvorte tento odkaz vo
 $3
 
 Ak účet nie je *nepatrí* patrí k vám, nasledujte tento odkaz,
-ktorú zruší potvrdenie e-mailovej adresy:
+ktorý zruší potvrdenie e-mailovej adresy:
 
 $5
 
@@ -3807,6 +3842,9 @@ Prosím, potvrďte, že túto stránku chcete skutočne znovu vytvoriť.",
 'confirm-unwatch-button' => 'OK',
 'confirm-unwatch-top' => 'Odstrániť túto stránku z vášho zoznamu sledovaných?',
 
+# Separators for various lists, etc.
+'quotation-marks' => '„$1“',
+
 # Multipage image navigation
 'imgmultipageprev' => '&larr; predošlá stránka',
 'imgmultipagenext' => 'ďalšia stránka &rarr;',
@@ -3896,7 +3934,7 @@ Tiež môžete [[Special:EditWatchlist|použiť štandardný editor]].',
 'version-hook-subscribedby' => 'Pripojené',
 'version-version' => '(Verzia $1)',
 'version-license' => 'Licencia',
-'version-poweredby-credits' => "Táto wiki beží na '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Táto wiki beží na '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'ďalší',
 'version-poweredby-translators' => 'prekladatelia na translatewiki.net',
 'version-credits-summary' => 'Nasledujúcim osobám by sme radi poďakovali za ich príspevky k vývoju [[Special:Version|MediaWiki]].',
@@ -3915,7 +3953,7 @@ Spolu s týmto programom by ste obdržať [{{SERVER}}{{SCRIPTPATH}}/COPYING kóp
 # Special:Redirect
 'redirect' => 'Presmerovanie podľa súboru, používateľa alebo ID revízie',
 'redirect-legend' => 'Presmerovanie na súbor alebo stránku',
-'redirect-summary' => 'Táto špeciálna stránka presmerováva na súbor (podľa názvu), stránku (podľa identifikátora revízie) alebo používateľa (podľa číselného identifikátora používateľa).',
+'redirect-summary' => 'Táto špeciálna stránka presmerováva na súbor (podľa názvu súboru), stránku (podľa identifikátora revízie) alebo používateľa (podľa číselného identifikátora používateľa). Použitie: [[{{#Special:Redirect}}/file/Príklad.jpg]], [[{{#Special:Redirect}}/revision/328429]], resp. [[{{#Special:Redirect}}/user/101]].',
 'redirect-submit' => 'Ísť',
 'redirect-lookup' => 'Vyhľadať:',
 'redirect-value' => 'Hodnota:',
@@ -3937,8 +3975,7 @@ Spolu s týmto programom by ste obdržať [{{SERVER}}{{SCRIPTPATH}}/COPYING kóp
 
 # Special:SpecialPages
 'specialpages' => 'Špeciálne stránky',
-'specialpages-note' => '----
-* Bežné špeciálne stránky.
+'specialpages-note' => '* Bežné špeciálne stránky.
 * <strong class="mw-specialpagerestricted">Špeciálne stránky s obmedzeným prístupom.</strong>
 * <span class="mw-specialpagecached">Špeciálne stránky vo vyrovnávacej pamäti (môže byť neaktuálne).</span>',
 'specialpages-group-maintenance' => 'Údržbové správy',
@@ -3978,6 +4015,7 @@ Spolu s týmto programom by ste obdržať [{{SERVER}}{{SCRIPTPATH}}/COPYING kóp
 'tags-tag' => 'Názov značky',
 'tags-display-header' => 'Vzhľad v zoznamoch úprav',
 'tags-description-header' => 'Úplný popis významu',
+'tags-active-header' => 'Aktívny?',
 'tags-hitcount-header' => 'Označené úpravy',
 'tags-active-yes' => 'Áno',
 'tags-active-no' => 'Nie',
@@ -4138,6 +4176,14 @@ V opačnom prípade môžete použiť zjednodušený formulár nižšie. Váš k
 'rotate-comment' => 'Obrázok otočený o $1 {{PLURAL:$1|stupeň|stupne|stupňov}} v smere hodinových ručičiek',
 
 # Limit report
+'limitreport-title' => 'Profilovacie údaje analyzátora:',
+'limitreport-cputime' => 'Čas využitia procesora',
+'limitreport-cputime-value' => '$1 {{PLURAL:$1|sekunda|sekundy|sekúnd}}',
+'limitreport-walltime' => 'Reálny čas využitia',
+'limitreport-walltime-value' => '$1 {{PLURAL:$1|sekunda|sekundy|sekúnd}}',
+'limitreport-ppvisitednodes' => 'Počet uzlov, ktoré preprocesor navštívil',
+'limitreport-ppgeneratednodes' => 'Počet uzlov, ktoré preprocesor vytvoril',
+'limitreport-postexpandincludesize' => 'Veľkosť vloženého objektu po rozbalení',
 'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|bajt|bajty|bajtov}}',
 'limitreport-templateargumentsize' => 'Veľkosť argumentov šablón',
 'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|bajt|bajty|bajtov}}',
index 31eb83a..c1c7b3f 100644 (file)
@@ -519,9 +519,9 @@ Seznam vseh prepoznanih posebnih strani je na razpolago na strani [[Special:Spec
 # General errors
 'error' => 'Napaka',
 'databaseerror' => 'Napaka zbirke podatkov',
-'databaseerror-text' => 'Prišlo je do napake poizvedbe v zbirki podatkov.
-To lahko pomeni hrošča v programju.',
-'databaseerror-textcl' => 'Prišlo je do napake poizvedbe v zbirki podatkov.',
+'databaseerror-text' => 'Pri poizvedbi v zbirki podatkov je prišlo do napake.
+Vzrok za to je morda programski hrošč.',
+'databaseerror-textcl' => 'Pri poizvedbi v zbirki podatkov je prišlo do napake.',
 'databaseerror-query' => 'Poizvedba: $1',
 'databaseerror-function' => 'Funkcija: $1',
 'databaseerror-error' => 'Napaka: $1',
@@ -727,8 +727,8 @@ Za preprečevanje zlorab lahko na {{PLURAL:$1|uro|$1 uri|$1 ure|$1 ur}} pošljem
 
 Če urejate prek AOL ali iz Bližnjega vzhoda, Afrike, Avstralije, Nove Zelandije ali iz šole, knjižnice ali podjetja, si IP-naslov morda delite z drugimi uporabniki. Če je tako, ste to sporočilo morda prejeli, čeprav niste ustvarili še nobenega računa. Znova se lahko poskusite registrirati po nekaj urah.',
 'emailauthenticated' => 'Vaš e-poštni naslov je bil potrjen dne $2 ob $3.',
-'emailnotauthenticated' => 'Vaš e-poštni naslov še ni potrjen. Za navedene
-možnosti se e-pošte ne bo pošiljalo.',
+'emailnotauthenticated' => 'Vaš e-poštni naslov še ni potrjen.
+Za navedene možnosti e-pošte ne bomo pošiljali.',
 'noemailprefs' => 'E-poštnega naslova niste vnesli, zato naslednje možnosti ne bodo delovale.',
 'emailconfirmlink' => 'Potrdite svoj e-poštni naslov',
 'invalidemailaddress' => 'E-poštni naslov zaradi neveljavne oblike ni sprejemljiv.
@@ -1164,19 +1164,19 @@ To redakcijo si lahko ogledate; podrobnosti lahko najdete v [{{fullurl:{{#Specia
 Do skrite vsebine bodo še vedno lahko dostopali drugi administratorji {{GRAMMAR:rodilnik|{{SITENAME}}}} in jo z uporabo istega vmesnika tudi obnovili, razen kjer bodo uveljavljene dodatne omejitve.",
 'revdelete-confirm' => 'Prosim potrdite da nameravate to storiti, da se zavedate posledic in da to počnete v skladu s [[{{MediaWiki:Policy-url}}|politiko]].',
 'revdelete-suppress-text' => "Zadrževanje naj bi bilo uporabljeno '''le''' v sledečih primerih:
-* Potencialni klevetniški podatki
+* Morebitni klevetniški podatki
 * Neprimerni osebni podatki
-*: ''domači naslovi in telefonske številke, številke socialnega zavarovanja, etc.''",
+*: ''domači naslovi in telefonske številke, narodne številke istovetnosti itn.''",
 'revdelete-legend' => 'Nastavi omejitve vidnosti',
-'revdelete-hide-text' => 'Skrij besedilo redakcije',
+'revdelete-hide-text' => 'Besedilo redakcije',
 'revdelete-hide-image' => 'Skrij vsebino datoteke.',
 'revdelete-hide-name' => 'Skrij dejanje in cilj',
-'revdelete-hide-comment' => 'Skrij povzetek urejanja',
-'revdelete-hide-user' => 'Skrij uporabniško ime/IP-naslov urejevalca',
+'revdelete-hide-comment' => 'Povzetek urejanja',
+'revdelete-hide-user' => 'Uporabniško ime/IP-naslov urejevalca',
 'revdelete-hide-restricted' => 'Zadrži podatke od administratorjev kakor tudi od ostalih',
 'revdelete-radio-same' => '(ne spremeni)',
-'revdelete-radio-set' => 'Da',
-'revdelete-radio-unset' => 'Ne',
+'revdelete-radio-set' => 'Skrito',
+'revdelete-radio-unset' => 'Vidno',
 'revdelete-suppress' => 'Zadrži podatke od administratorjev kakor tudi od ostalih',
 'revdelete-unsuppress' => 'Odpraviti omejitve na obnovljenih redakcijah.',
 'revdelete-log' => 'Razlog:',
@@ -1335,7 +1335,6 @@ Upoštevajte, da so njihovi podatki vsebine {{GRAMMAR:rodilnik|{{SITENAME}}}} mo
 'mypreferences' => 'Nastavitve',
 'prefs-edits' => 'Število urejanj:',
 'prefsnologin' => 'Niste prijavljeni',
-'prefsnologintext' => 'Za spreminjanje uporabniških nastavitev morate biti <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} prijavljeni]</span>.',
 'changepassword' => 'Zamenjava gesla',
 'prefs-skin' => 'Koža',
 'skin-preview' => 'Predogled',
@@ -1360,7 +1359,7 @@ Upoštevajte, da so njihovi podatki vsebine {{GRAMMAR:rodilnik|{{SITENAME}}}} mo
 'prefs-rendering' => 'Videz',
 'saveprefs' => 'Shrani',
 'resetprefs' => 'Počisti neshranjene spremembe',
-'restoreprefs' => 'Obnovi vse privzete nastavitve (v vseh razdelkih)',
+'restoreprefs' => 'obnova vseh privzetih nastavitev (v vseh razdelkih)',
 'prefs-editing' => 'Urejanje',
 'rows' => 'Vrstic:',
 'columns' => 'Stolpcev:',
@@ -2686,16 +2685,16 @@ Oglejte si [[Special:BlockList|seznam blokad]] za pregled blokad.',
 'unblocked-id' => 'Blokada $1 je odstranjena',
 'blocklist' => 'Blokirani uporabniki',
 'ipblocklist' => 'Blokirani uporabniki',
-'ipblocklist-legend' => 'Najdi blokiranega uporabnika',
-'blocklist-userblocks' => 'Skrij blokade računov',
-'blocklist-tempblocks' => 'Skrij začasne blokade',
-'blocklist-addressblocks' => 'Skrij blokade enega IP-naslova',
-'blocklist-rangeblocks' => 'Skrij bloke obsegov',
+'ipblocklist-legend' => 'Poišči blokiranega uporabnika',
+'blocklist-userblocks' => 'skrij blokade računov',
+'blocklist-tempblocks' => 'skrij začasne blokade',
+'blocklist-addressblocks' => 'skrij blokade posameznih IP-naslovov',
+'blocklist-rangeblocks' => 'skrij blokade razponov',
 'blocklist-timestamp' => 'Časovni žig',
 'blocklist-target' => 'Cilj',
 'blocklist-expiry' => 'Poteče',
-'blocklist-by' => 'Administrator, ki je izvedel blokado',
-'blocklist-params' => 'Parametri blokade',
+'blocklist-by' => 'Administrator',
+'blocklist-params' => 'Parametri',
 'blocklist-reason' => 'Razlog',
 'ipblocklist-submit' => 'Išči',
 'ipblocklist-localblock' => 'Lokalna blokada',
@@ -2703,8 +2702,8 @@ Oglejte si [[Special:BlockList|seznam blokad]] za pregled blokad.',
 'infiniteblock' => 'neomejen čas',
 'expiringblock' => 'preteče $1 ob $2',
 'anononlyblock' => 'samo brezim.',
-'noautoblockblock' => 'samodejna blokada je onemogočena',
-'createaccountblock' => 'ustvarjanje računov onemogočeno',
+'noautoblockblock' => 'onemogočena samodejna blokada',
+'createaccountblock' => 'onemogočeno ustvarjanje računov',
 'emailblock' => 'e-pošta blokirana',
 'blocklist-nousertalk' => 'preprečeno urejanje lastne pogovorne strani',
 'ipblocklist-empty' => 'Seznam blokad je prazen.',
@@ -2726,7 +2725,7 @@ Dnevnik skrivanja je na voljo spodaj:',
 'blocklogtext' => 'Prikazan je dnevnik blokiranja in deblokiranja uporabnikov. Samodejno blokirani IP-naslovi niso navedeni. Trenutno veljavna blokiranja so navedena na [[Special:BlockList|seznamu blokad]].',
 'unblocklogentry' => 'je deblokiral(-a) »$1«',
 'block-log-flags-anononly' => 'samo za brezimne uporabnike',
-'block-log-flags-nocreate' => 'ustvarjanje uporabniških računov onemogočeno',
+'block-log-flags-nocreate' => 'onemogočeno ustvarjanje računov',
 'block-log-flags-noautoblock' => 'samodejno blokiranje onemogočeno',
 'block-log-flags-noemail' => 'e-naslov blokiran',
 'block-log-flags-nousertalk' => 'prepreči urejanje lastne pogovorne strani',
@@ -2904,7 +2903,7 @@ stran »[[{{MediaWiki:Mainpage}}]]«.',
 'allmessagesdefault' => 'Prednastavljeno besedilo',
 'allmessagescurrent' => 'Trenutno besedilo',
 'allmessagestext' => 'Navedena so v imenskem prostoru MediaWiki dostopna sistemska sporočila.
-Za lokalizacijo in prevajanje obiščite [//www.mediawiki.org/wiki/Localisation MediaWiki] in [//translatewiki.net translatewiki.net] ter tako prispevajte k splošnemu prevodu programja.',
+Za lokalizacijo in prevajanje obiščite [https://www.mediawiki.org/wiki/Localisation MediaWiki] in [//translatewiki.net translatewiki.net] ter tako prispevajte k splošnemu prevodu programja.',
 'allmessagesnotsupportedDB' => "Te strani ni mogoče uporabljati, ker je bilo '''\$wgUseDatabaseMessages''' izključeno.",
 'allmessages-filter-legend' => 'Filter',
 'allmessages-filter' => 'Filtriraj po prilagoditvenem stanju:',
@@ -3071,6 +3070,7 @@ Prosimo, poskusite znova.',
 Omogoča vnos pojasnila v povzetku urejanja.',
 'tooltip-preferences-save' => 'Shrani nastavitve',
 'tooltip-summary' => 'Vnesite kratek povzetek',
+'interlanguage-link-title' => '$1 – $2',
 
 # Metadata
 'notacceptable' => 'V obliki, ki jo lahko bere vaš odjemalec, wikistrežnik podatkov ne more ponuditi.',
@@ -3110,6 +3110,7 @@ Omogoča vnos pojasnila v povzetku urejanja.',
 'pageinfo-length' => 'Dolžina strani (v bajtih)',
 'pageinfo-article-id' => 'ID strani',
 'pageinfo-language' => 'Jezik vsebine strani',
+'pageinfo-content-model' => 'Model vsebine strani',
 'pageinfo-robot-policy' => 'Robotsko indeksiranje',
 'pageinfo-robot-index' => 'Dovoljeno',
 'pageinfo-robot-noindex' => 'Nedovoljeno',
@@ -3191,7 +3192,7 @@ Z njenim zagonom lahko ogrozite vaš sistem.",
 'svg-long-desc' => 'datoteka SVG, v izvirniku $1 × $2 slikovnih točk, velikost datoteke: $3',
 'svg-long-desc-animated' => 'animirana datoteka SVG, v izvirniku $1 × $2 slikovnih točk, velikost datoteke: $3',
 'svg-long-error' => 'Neveljavna datoteka SVG: $1',
-'show-big-image' => 'Slika v višji ločljivosti',
+'show-big-image' => 'Izvirna datoteka',
 'show-big-image-preview' => 'Velikost predogleda: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Druga ločljivost|Drugi ločljivosti|Druge ločljivosti}}: $1.',
 'show-big-image-size' => '$1 × $2 točk',
@@ -3666,7 +3667,7 @@ Druga bodo po privzetem skrita.
 
 # External editor support
 'edit-externally' => 'Uredite datoteko z uporabo zunanjega orodja',
-'edit-externally-help' => '(Za več informacij glejte [//www.mediawiki.org/wiki/Manual:External_editors navodila za namestitev])',
+'edit-externally-help' => '(Za več informacij glejte [https://www.mediawiki.org/wiki/Manual:External_editors navodila za namestitev])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'vse',
@@ -3769,6 +3770,7 @@ Prosimo, potrdite, da jo resnično želite znova ustvariti.",
 
 # Separators for various lists, etc.
 'percent' => '$1&#160;%',
+'quotation-marks' => '»$1«',
 
 # Multipage image navigation
 'imgmultipageprev' => '← prejšnja stran',
@@ -3856,7 +3858,7 @@ Uporabite lahko tudi [[Special:EditWatchlist|standardni urejevalnik]].',
 'version-hook-subscribedby' => 'Naročen s strani',
 'version-version' => '(Različica $1)',
 'version-license' => 'Licenca',
-'version-poweredby-credits' => "Ta wiki poganja '''[//www.mediawiki.org/ MediaWiki]''', vse pravice pridržave © 2001-$1 $2.",
+'version-poweredby-credits' => "Ta wiki poganja '''[https://www.mediawiki.org/ MediaWiki]''', vse pravice pridržave © 2001-$1 $2.",
 'version-poweredby-others' => 'drugi',
 'version-poweredby-translators' => 'Prevajalci translatewiki.net',
 'version-credits-summary' => 'Radi bi priznali prispevek naslednjih oseb k [[Special:Version|MediaWiki]].',
@@ -3877,7 +3879,7 @@ Skupaj s programom bi morali bi prejeti [{{SERVER}}{{SCRIPTPATH}}/COPYING kopijo
 # Special:Redirect
 'redirect' => 'Preusmeri po datoteki, uporabniku ali ID-ju redakcije',
 'redirect-legend' => 'Preusmeritev na datoteko ali stran',
-'redirect-summary' => 'Posebna stran preusmeri na datoteko (če podate ime datoteke), stran (če podate ID redakcije) ali uporabniško stran (če podatek številski ID uporabnika).',
+'redirect-summary' => 'Posebna stran preusmeri na datoteko (če podate ime datoteke), stran (če podate ID redakcije) ali uporabniško stran (če podate številski ID uporabnika). Primer: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]] ali [[{{#Special:Redirect}}/user/101]].',
 'redirect-submit' => 'Pojdi',
 'redirect-lookup' => 'Iskanje:',
 'redirect-value' => 'Vrednost:',
@@ -3899,10 +3901,9 @@ Skupaj s programom bi morali bi prejeti [{{SERVER}}{{SCRIPTPATH}}/COPYING kopijo
 
 # Special:SpecialPages
 'specialpages' => 'Posebne strani',
-'specialpages-note' => '----
-* Navadne posebne strani.
-* <span class="mw-specialpagerestricted">Omejene posebne strani.</span>
-* <span class="mw-specialpagecached">Predpomnjene posebne strani (morda so zastarele).</span>',
+'specialpages-note-top' => 'Legenda',
+'specialpages-note' => '* Navadne posebne strani.
+* <span class="mw-specialpagerestricted">Omejene posebne strani.</span>',
 'specialpages-group-maintenance' => 'Vzdrževalna poročila',
 'specialpages-group-other' => 'Ostale posebne strani',
 'specialpages-group-login' => 'Prijavite se / ustvarite račun',
index d9f0412..ad4c486 100644 (file)
@@ -799,7 +799,6 @@ Stelle sicher, doaß de Versionsgeschichte anner Seite historisch korrekt ies.',
 'mypreferences' => 'Meene Eistellunga',
 'prefs-edits' => 'Oazoahl dar Beoarbeetunga:',
 'prefsnologin' => 'Ne oagemeldet',
-'prefsnologintext' => 'Du mußt <span class="plainlinks">[{{fullurl:{{#special:UserLogin}}|returnto=$1}} oagemeldet]</span> sei, im denne Einstellunga ändern zu kinna.',
 'changepassword' => 'Poaßwurt ändern',
 'prefs-personal' => 'Nutzerdaten',
 'prefs-rc' => 'Letzte Änderunga',
@@ -1801,7 +1800,7 @@ Alternativ ies der Export au miet der Syntax [[{{#Special:Export}}/{{MediaWiki:M
 'allmessagesname' => 'Noame',
 'allmessagesdefault' => 'Standardtext',
 'allmessagestext' => 'Dies ies anne Liste dar MediaWiki-Systemtexte.
-Besiche de Seyta [//www.mediawiki.org/wiki/Localisation MediaWiki-Lokalisierung] und [//translatewiki.net translatewiki.net], wenn du diech oa dar Lokalisierung vu MediaWiki beteiliga mechtest.',
+Besiche de Seyta [https://www.mediawiki.org/wiki/Localisation MediaWiki-Lokalisierung] und [//translatewiki.net translatewiki.net], wenn du diech oa dar Lokalisierung vu MediaWiki beteiliga mechtest.',
 'allmessagesnotsupportedDB' => 'Diese Spezialseyte stieht ne zur Verfigung, do se ieber dann Parameter <tt>$wgUseDatabaseMessages</tt> deaktiviert wurde.',
 'allmessages-filter-all' => 'Olle',
 'allmessages-language' => 'Sproache:',
@@ -2140,7 +2139,7 @@ Weitere werden standardmäßig nicht angezeigt.
 
 # External editor support
 'edit-externally' => 'Diese Datei mit annem externen Programm bearbta',
-'edit-externally-help' => '(Siehe de [//www.mediawiki.org/wiki/Manual:External_editors Installationsoaweisunga] fier weitere Informationen)',
+'edit-externally-help' => '(Siehe de [https://www.mediawiki.org/wiki/Manual:External_editors Installationsoaweisunga] fier weitere Informationen)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'olle',
@@ -2280,8 +2279,7 @@ Du koast au de [[Special:EditWatchlist|Standard-Beoarbeetungsseyte]] benutza.',
 
 # Special:SpecialPages
 'specialpages' => 'Spezialseyta',
-'specialpages-note' => '----
-* Spezialseyta fier Jedermoan
+'specialpages-note' => '* Spezialseyta fier Jedermoan
 * <strong class="mw-specialpagerestricted">Spezialseyta fier Nutzer miet erweiterta Rechta</strong>',
 'specialpages-group-other' => 'Andere Spezialseyta',
 'specialpages-group-login' => 'Oamelda',
index cfba54f..b7dab95 100644 (file)
@@ -800,7 +800,6 @@ sababteeda neh waxaa laga heli kartaa  [{{fullurl:{{#Special:Log}}/delete|page={
 'preferences' => 'Dooqyada',
 'mypreferences' => 'Dooqyadeyda',
 'prefsnologin' => 'Gudaha kuma jirtid',
-'prefsnologintext' => 'Waa in aad <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} Gudaha ku jirtaa]</span> si aad dooqyadaada u dalbatid.',
 'prefs-skin' => 'Jirka',
 'skin-preview' => 'Horfiirin',
 'datedefault' => "Ma'jiro dooq",
@@ -1319,7 +1318,7 @@ Eeg [[Special:BlockList|Mamnuucyada]] si aad u aragto liiska mamnuucyada ee hadd
 'allmessagesdefault' => "Qoraalka la'isku ogyahay",
 'allmessagescurrent' => 'Qoraalka hada qoran',
 'allmessagestext' => 'Kan waa liiska fariimaha systemka oo laga heli karo xarun magaceedka MediaWiki.
-Fadlan booqo [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] iyo [//translatewiki.net translatewiki.net] hadii aad rabto in aad wax ku darsatid guud ahaanba MediaWiki ku fasirida luqadaada.',
+Fadlan booqo [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] iyo [//translatewiki.net translatewiki.net] hadii aad rabto in aad wax ku darsatid guud ahaanba MediaWiki ku fasirida luqadaada.',
 'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' la'ma isticmaalikaro, '''\$wgUseDatabaseMessages''' oo dansan daraadeed.",
 'allmessages-language' => 'Luqad:',
 'allmessages-filter-submit' => 'Soco',
@@ -1436,7 +1435,7 @@ Hadii faylka wax laga badalay sida oo markiisa hore ahaa, waxaa laga yaabaa in e
 
 # External editor support
 'edit-externally' => 'wax ka bedel faylkaan adiga oo isticmaalaya brogram dheeraad ah',
-'edit-externally-help' => '(Ka fiiri wax war ah oo kale  [//www.mediawiki.org/wiki/Manual:External_editors sidii oo wax ugu habeysmi lahaa] )',
+'edit-externally-help' => '(Ka fiiri wax war ah oo kale  [https://www.mediawiki.org/wiki/Manual:External_editors sidii oo wax ugu habeysmi lahaa] )',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'dhamaan',
index b3aff4e..a91d570 100644 (file)
@@ -1265,7 +1265,6 @@ Kini kujdes se përdorimi i lidhjeve të shfletimit do të ndryshojë përzgjedh
 'mypreferences' => 'Parapëlqimet',
 'prefs-edits' => 'Numri i redaktimeve:',
 'prefsnologin' => 'Nuk keni hyrë brenda',
-'prefsnologintext' => 'Duhet të jeni <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} të kyçur]</span> për të caktuar parapëlqimet e përdoruesit.',
 'changepassword' => 'Ndërroni fjalëkalimin',
 'prefs-skin' => 'Pamja',
 'skin-preview' => 'Parapamje',
@@ -2748,7 +2747,7 @@ Për të eksportuar faqe, thjesht shtypni një emër për çdo rresht, ose krijo
 'allmessagesdefault' => 'Teksti i parazgjedhur',
 'allmessagescurrent' => 'Teksti i tanishëshm',
 'allmessagestext' => 'Kjo është një listë e të gjitha faqeve në hapësirën MediaWiki:
-Ju lutemi vizitoni [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] dhe [//translatewiki.net translatewiki.net] nëse dëshironi të kontribuoni në lokalizimin e përgjithshëm MediaWiki',
+Ju lutemi vizitoni [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] dhe [//translatewiki.net translatewiki.net] nëse dëshironi të kontribuoni në lokalizimin e përgjithshëm MediaWiki',
 'allmessagesnotsupportedDB' => "Kjo faqe nuk mund të përdoret sepse '''\$wgUseDatabaseMessages''' është çaktivizuar.",
 'allmessages-filter-legend' => 'Filtër',
 'allmessages-filter' => 'Filtroni nga shteti',
@@ -3437,7 +3436,7 @@ Në qoftë se skeda është ndryshuar nga gjendja origjinale, disa hollësira mu
 
 # External editor support
 'edit-externally' => 'Ndryshoni këtë skedë me një mjet të jashtëm',
-'edit-externally-help' => '(Shikoni [//www.mediawiki.org/wiki/Manual:External_editors udhëzimet e instalimit] për më shumë informacion)',
+'edit-externally-help' => '(Shikoni [https://www.mediawiki.org/wiki/Manual:External_editors udhëzimet e instalimit] për më shumë informacion)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'të gjitha',
@@ -3617,7 +3616,7 @@ Ju gjithashtu mund [[Special:EditWatchlist|të përdorni redaktuesin standart]].
 'version-hook-subscribedby' => 'Abonuar nga',
 'version-version' => '(Versioni $1)',
 'version-license' => 'Licensa',
-'version-poweredby-credits' => "Ky wiki është mundësuar nga '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Ky wiki është mundësuar nga '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'të tjerë',
 'version-license-info' => 'MediaWiki është një softuer i lirë; ju mund ta shpërndani dhe redakatoni atë nën kushtet GNU General Public License si e publikuar nga fondacioni Free Software; ose versioni 2 i licensës, ose çdo version më i vonshëm.
 
index afc6b4c..920aa96 100644 (file)
@@ -647,7 +647,7 @@ $1',
 'copyright' => 'Садржај је доступан под лиценцом $1 осим ако је другачије наведено.',
 'copyrightpage' => '{{ns:project}}:Ауторска права',
 'currentevents' => 'Актуелности',
-'currentevents-url' => 'Project:Ð\9dовости',
+'currentevents-url' => 'Project:Ð\90кÑ\82Ñ\83елности',
 'disclaimers' => 'Одрицање одговорности',
 'disclaimerpage' => 'Project:Одрицање одговорности',
 'edithelp' => 'Помоћ при уређивању',
@@ -854,7 +854,7 @@ $2',
 'gotaccount' => 'Већ имате налог? Идите на страницу „$1“.',
 'gotaccountlink' => 'Пријава',
 'userlogin-resetlink' => 'Заборавили сте податке за пријаву?',
-'userlogin-resetpassword-link' => 'РеÑ\81еÑ\82Ñ\83Ñ\98Ñ\82е Ð»Ð¾Ð·Ð¸Ð½ÐºÑ\83',
+'userlogin-resetpassword-link' => 'Ð\97абоÑ\80авили Ñ\81Ñ\82е Ð»Ð¾Ð·Ð¸Ð½ÐºÑ\83?',
 'helplogin-url' => 'Help:Logging in',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Помоћ при пријављивању]]',
 'userlogin-createanother' => 'Отвори још један налог',
@@ -1266,7 +1266,7 @@ $2
 Проверите разлике испод, па сачувајте измене.',
 'undo-failure' => 'Не могу да вратим измену због постојања сукобљених међуизмена.',
 'undo-norev' => 'Не могу да вратим измену јер не постоји или је обрисана.',
-'undo-summary' => 'Поништена измена $1  {{GENDER:$2|корисника|кориснице}} [[Special:Contributions/$2|$2]] ([[User talk:$2|разговор]])',
+'undo-summary' => 'Поништена измена $1 {{GENDER:$2|корисника|кориснице}} [[Special:Contributions/$2|$2]] ([[User talk:$2|разговор]])',
 'undo-summary-username-hidden' => 'Поништи измену $1 скривеног корисника',
 
 # Account creation failure
@@ -1360,15 +1360,15 @@ $2
 * Неприкладни лични подаци
 *: ''кућна адреса и број телефона, број банковне картице итд.''",
 'revdelete-legend' => 'Ограничења видљивости',
-'revdelete-hide-text' => 'сакриј текст измене',
+'revdelete-hide-text' => 'Текст ревизије',
 'revdelete-hide-image' => 'Сакриј садржај датотеке',
 'revdelete-hide-name' => 'Сакриј радњу и одредиште',
 'revdelete-hide-comment' => 'сакриј опис измене',
-'revdelete-hide-user' => 'сакриј име уређивача',
+'revdelete-hide-user' => 'Кориснчко име уредника/ИП адреса',
 'revdelete-hide-restricted' => 'Сакриј податке од администратора и других корисника',
 'revdelete-radio-same' => '(не мењај)',
-'revdelete-radio-set' => 'да',
-'revdelete-radio-unset' => 'не',
+'revdelete-radio-set' => 'Ð\92идÑ\99иво',
+'revdelete-radio-unset' => 'СакÑ\80ивено',
 'revdelete-suppress' => 'Сакриј податке од администратора и других корисника',
 'revdelete-unsuppress' => 'Уклони ограничења на враћеним изменама',
 'revdelete-log' => 'Разлог:',
@@ -1435,10 +1435,10 @@ $1",
 'mergehistory-reason' => 'Разлог:',
 
 # Merge log
-'mergelog' => 'Ð\98Ñ\81Ñ\82оÑ\80иÑ\98а спајања',
+'mergelog' => 'Ð\94невник спајања',
 'pagemerge-logentry' => 'страница [[$1]] је спојена у [[$2]] (све до измене $3)',
 'revertmerge' => 'растави',
-'mergelogpagetext' => 'Ð\98Ñ\81под Ñ\81е Ð½Ð°Ð»Ð°Ð·Ð¸ Ñ\81пиÑ\81ак Ñ\81коÑ\80аÑ\88Ñ\9aиÑ\85 Ñ\81паÑ\98аÑ\9aа Ð¸Ñ\81Ñ\82оÑ\80иÑ\98а страница.',
+'mergelogpagetext' => 'Ð\98Ñ\81под Ñ\98е Ñ\81пиÑ\81ак Ð½Ð°Ñ\98Ñ\81коÑ\80иÑ\98иÑ\85 Ñ\81паÑ\98аÑ\9aа Ð¸Ñ\81Ñ\82оÑ\80иÑ\98а Ð´Ð²ÐµÑ\98Ñ\83 страница.',
 
 # Diffs
 'history-title' => 'Историја измена странице „$1“',
@@ -1526,7 +1526,6 @@ $1",
 'mypreferences' => 'Подешавања',
 'prefs-edits' => 'Број измена:',
 'prefsnologin' => 'Нисте пријављени',
-'prefsnologintext' => 'Морате бити <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} пријављени]</span> да бисте подешавали корисничке поставке.',
 'changepassword' => 'Промени лозинку',
 'prefs-skin' => 'Тема',
 'skin-preview' => 'Прегледај',
@@ -1828,7 +1827,7 @@ $1",
 'diff' => 'разл',
 'hist' => 'ист',
 'hide' => 'сакриј',
-'show' => 'прикажи',
+'show' => 'Ð\9fрикажи',
 'minoreditletter' => ' м',
 'newpageletter' => 'Н',
 'boteditletter' => 'б',
@@ -2598,7 +2597,7 @@ $UNWATCHURL
 'actionfailed' => 'Радња није успела',
 'deletedtext' => "Страница „$1“ је обрисана.
 Погледајте ''$2'' за више детаља.",
-'dellogpage' => 'Ð\98Ñ\81Ñ\82оÑ\80иÑ\98а брисања',
+'dellogpage' => 'Ð\94невник брисања',
 'dellogpagetext' => 'Испод је списак последњих брисања.',
 'deletionlog' => 'дневник брисања',
 'reverted' => 'Враћено на ранију измену',
@@ -2630,7 +2629,7 @@ $UNWATCHURL
 Последњу измену је {{GENDER:$3|направио|направила|направио}} [[User:$3|$3]] ([[User talk:$3|разговор]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Опис измене: \"''\$1''\".",
 'revertpage' => 'Враћене измене [[Special:Contributions/$2|$2]] ([[User talk:$2|разговор]]) на последњу измену корисника [[User:$1|$1]]',
-'revertpage-nouser' => 'Враћене су измене скривеног корисника на последњу измену члана {{GENDER:$1|[[User:$1|$1]]}}',
+'revertpage-nouser' => 'Враћене су измене скривеног корисника на последњу измену {{GENDER:$1|корисника|кориснице}} [[User:$1|$1]]',
 'rollback-success' => 'Враћене су измене {{GENDER:$1|корисника|кориснице|корисника}} $1
 на последњу измену {{GENDER:$2|корисника|кориснице|корисника}} $2.',
 
@@ -3092,7 +3091,7 @@ $1',
 'allmessagesdefault' => 'Подразумевани текст',
 'allmessagescurrent' => 'Текст поруке',
 'allmessagestext' => 'Ово је списак свих системских порука које су доступне у именском простору „Медијавики“.
-Посетите [//www.mediawiki.org/wiki/Localisation Медијавики локализацију] и [//translatewiki.net Транслејтвики] ако желите да помогнете у превођењу.',
+Посетите [https://www.mediawiki.org/wiki/Localisation Медијавики локализацију] и [//translatewiki.net Транслејтвики] ако желите да помогнете у превођењу.',
 'allmessagesnotsupportedDB' => "Ова страница не може да се користи јер је '''\$wgUseDatabaseMessages''' онемогућен.",
 'allmessages-filter-legend' => 'Филтер',
 'allmessages-filter' => 'Филтрирај по стању:',
@@ -3974,7 +3973,7 @@ $8',
 
 # External editor support
 'edit-externally' => 'Измени ову датотеку користећи спољашњи програм',
-'edit-externally-help' => '(Погледајте [//www.mediawiki.org/wiki/Manual:External_editors упутство за подешавање] за више информација)',
+'edit-externally-help' => '(Погледајте [https://www.mediawiki.org/wiki/Manual:External_editors упутство за подешавање] за више информација)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'све',
@@ -4100,7 +4099,7 @@ $5
 'table_pager_empty' => 'Нема резултата',
 
 # Auto-summaries
-'autosumm-blank' => 'Ð\9fоÑ\82пÑ\83но Ð¾Ð±Ñ\80иÑ\81ана Ñ\81Ñ\82Ñ\80аниÑ\86а',
+'autosumm-blank' => 'УклоÑ\9aен Ñ\86елокÑ\83пан Ñ\81адÑ\80жаÑ\98 Ñ\81Ñ\82Ñ\80аниÑ\86е',
 'autosumm-replace' => 'Замена садржаја странице са „$1“',
 'autoredircomment' => 'Преусмерење на [[$1]]',
 'autosumm-new' => 'Нова страница: $1',
@@ -4235,7 +4234,7 @@ $5
 'version-version' => '(издање $1)',
 'version-svn-revision' => '(изм. $2)',
 'version-license' => 'Лиценца',
-'version-poweredby-credits' => "Овај вики покреће '''[//www.mediawiki.org/ Медијавики]''', ауторска права © 2001-$1 $2.",
+'version-poweredby-credits' => "Овај вики покреће '''[https://www.mediawiki.org/ Медијавики]''', ауторска права © 2001-$1 $2.",
 'version-poweredby-others' => 'остали',
 'version-poweredby-translators' => 'translatewiki.net преводиоци',
 'version-credits-summary' => 'Желели бисмо да захвалимо следећим људима на њиховом доприносу [[Special:Version|Медијавикији]].',
@@ -4271,9 +4270,8 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'Посебне странице',
-'specialpages-note' => '----
-* обичне посебне странице
-* <span class="mw-specialpagerestricted">ограничене посебне странице</span>',
+'specialpages-note' => '* Нормалне посебне странице
+* <span class="mw-specialpagerestricted">Ограничене посебне странице</span>',
 'specialpages-group-maintenance' => 'Извештаји одржавања',
 'specialpages-group-other' => 'Остале посебне странице',
 'specialpages-group-login' => 'Пријава/регистрација',
index 6845eb0..ce35eb8 100644 (file)
@@ -554,7 +554,7 @@ $1',
 'copyright' => 'Sadržaj je dostupan pod licencom $1 osim ako je drugačije navedeno.',
 'copyrightpage' => '{{ns:project}}:Autorska prava',
 'currentevents' => 'Aktuelnosti',
-'currentevents-url' => 'Project:Novosti',
+'currentevents-url' => 'Project:Aktuelnosti',
 'disclaimers' => 'Odricanje odgovornosti',
 'disclaimerpage' => 'Project:Odricanje odgovornosti',
 'edithelp' => 'Pomoć pri uređivanju',
@@ -752,7 +752,7 @@ Imajte na umu da neke stranice mogu nastaviti da se prikazuju kao da ste još pr
 'gotaccount' => 'Već imate nalog? Idite na stranicu „$1“.',
 'gotaccountlink' => 'Prijava',
 'userlogin-resetlink' => 'Zaboravili ste podatke za prijavu?',
-'userlogin-resetpassword-link' => 'Resetuj lozinku',
+'userlogin-resetpassword-link' => 'Zaboravili ste lozinku?',
 'helplogin-url' => 'Help:Logging in',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Pomoć pri prijavljivanju]]',
 'createacct-join' => 'Unesite svoje podatke ispod.',
@@ -932,7 +932,7 @@ Privremena lozinka: $2',
 'watchthis' => 'nadgledaj ovu stranicu',
 'savearticle' => 'Sačuvaj stranicu',
 'preview' => 'Pregled',
-'showpreview' => 'Pregledaj',
+'showpreview' => 'Prikaži pretpregled',
 'showlivepreview' => 'Trenutni pregled',
 'showdiff' => 'Prikaži izmene',
 'anoneditwarning' => "'''Upozorenje:''' niste prijavljeni.
@@ -1320,10 +1320,10 @@ Korišćenje navigacionih veza će poništiti ovu kolonu.',
 'mergehistory-reason' => 'Razlog:',
 
 # Merge log
-'mergelog' => 'Istorija spajanja',
+'mergelog' => 'Dnevnik spajanja',
 'pagemerge-logentry' => 'stranica [[$1]] je spojena u [[$2]] (sve do izmene $3)',
 'revertmerge' => 'rastavi',
-'mergelogpagetext' => 'Ispod se nalazi spisak skorašnjih spajanja istorija stranica.',
+'mergelogpagetext' => 'Ispod je spisak najskorijih spajanja istorija dveju stranica.',
 
 # Diffs
 'history-title' => 'Istorija izmena stranice „$1“',
@@ -1411,7 +1411,6 @@ Upamtite da njegovi popisi ovog vikija mogu biti zastareli.',
 'mypreferences' => 'Podešavanja',
 'prefs-edits' => 'Broj izmena:',
 'prefsnologin' => 'Niste prijavljeni',
-'prefsnologintext' => 'Morate biti <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} prijavljeni]</span> da biste podešavali korisničke postavke.',
 'changepassword' => 'Promeni lozinku',
 'prefs-skin' => 'Tema',
 'skin-preview' => 'Pregledaj',
@@ -1704,7 +1703,7 @@ Ako izaberete da ga unesete, ono će biti korišćeno za pripisivanje vašeg rad
 'diff' => 'razl',
 'hist' => 'ist',
 'hide' => 'sakrij',
-'show' => 'prikaži',
+'show' => 'Prikaži',
 'minoreditletter' => ' m',
 'newpageletter' => 'N',
 'boteditletter' => 'b',
@@ -2457,7 +2456,7 @@ Potvrdite svoju nameru, da razumete posledice i da ovo radite u skladu s [[{{Med
 'actionfailed' => 'Radnja nije uspela',
 'deletedtext' => "Stranica „$1“ je obrisana.
 Pogledajte ''$2'' za više detalja.",
-'dellogpage' => 'Istorija brisanja',
+'dellogpage' => 'Dnevnik brisanja',
 'dellogpagetext' => 'Ispod je spisak poslednjih brisanja.',
 'deletionlog' => 'dnevnik brisanja',
 'reverted' => 'Vraćeno na raniju izmenu',
@@ -2488,8 +2487,8 @@ Poslednji autor je ujedno i jedini.',
 
 Poslednju 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: \"''\$1''\".",
-'revertpage' => 'Vraćene izmene [[Special:Contributions/$2|$2]] ([[User talk:$2|razgovor]]) na poslednju  izmenu korisnika [[User:$1|$1]]',
-'revertpage-nouser' => 'Vraćene su izmene skrivenog korisnika na poslednju izmenu člana {{GENDER:$1|[[User:$1|$1]]}}',
+'revertpage' => 'Vraćene izmene [[Special:Contributions/$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]]',
 'rollback-success' => 'Vraćene su izmene {{GENDER:$1|korisnika|korisnice|korisnika}} $1
 na poslednju izmenu {{GENDER:$2|korisnika|korisnice|korisnika}} $2.',
 
@@ -2951,7 +2950,7 @@ U drugom slučaju, možete koristiti i vezu, na primer [[{{#Special:Export}}/{{M
 'allmessagesdefault' => 'Podrazumevani tekst',
 'allmessagescurrent' => 'Tekst poruke',
 'allmessagestext' => 'Ovo je spisak svih sistemskih poruka koje su dostupne u imenskom prostoru „Medijaviki“.
-Posetite [//www.mediawiki.org/wiki/Localisation Medijaviki lokalizaciju] i [//translatewiki.net Translejtviki] ako želite da pomognete u prevođenju.',
+Posetite [https://www.mediawiki.org/wiki/Localisation Medijaviki lokalizaciju] i [//translatewiki.net Translejtviki] ako želite da pomognete u prevođenju.',
 'allmessagesnotsupportedDB' => "Ova stranica ne može da se koristi jer je '''\$wgUseDatabaseMessages''' onemogućen.",
 'allmessages-filter-legend' => 'Filter',
 'allmessages-filter' => 'Filtriraj po stanju:',
@@ -3816,7 +3815,7 @@ $8',
 
 # External editor support
 'edit-externally' => 'Izmeni ovu datoteku koristeći spoljašnji program',
-'edit-externally-help' => '(Pogledajte [//www.mediawiki.org/wiki/Manual:External_editors uputstvo za podešavanje] za više informacija)',
+'edit-externally-help' => '(Pogledajte [https://www.mediawiki.org/wiki/Manual:External_editors uputstvo za podešavanje] za više informacija)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'sve',
@@ -3941,7 +3940,7 @@ Potvrdite da stvarno želite da napravite stranicu.",
 'table_pager_empty' => 'Nema rezultata',
 
 # Auto-summaries
-'autosumm-blank' => 'Potpuno obrisana stranica',
+'autosumm-blank' => 'Uklonjen celokupan sadržaj stranice',
 'autosumm-replace' => 'Zamena sadržaja stranice sa „$1“',
 'autoredircomment' => 'Preusmerenje na [[$1]]',
 'autosumm-new' => 'Nova stranica: $1',
@@ -4076,7 +4075,7 @@ Možete da [[Special:EditWatchlist|koristite i običan uređivač]].',
 'version-version' => '(izdanje $1)',
 'version-svn-revision' => '(izm. $2)',
 'version-license' => 'Licenca',
-'version-poweredby-credits' => "Ovaj viki pokreće '''[//www.mediawiki.org/ Medijaviki]''', autorska prava © 2001-$1 $2.",
+'version-poweredby-credits' => "Ovaj viki pokreće '''[https://www.mediawiki.org/ Medijaviki]''', autorska prava © 2001-$1 $2.",
 'version-poweredby-others' => 'ostali',
 'version-credits-summary' => 'Želeli bismo da zahvalimo sledećim ljudima na njihovom doprinosu [[Special:Version|Medijavikiji]].',
 'version-license-info' => 'Medijaviki je slobodan softver možete ga redistribuirati i/ili modifikovati pod uslovima GNU-ove opšte javne licence verzija 2 ili svake sledeće koju objavi Zadužbina za slobodan softver.
@@ -4111,9 +4110,8 @@ Trebalo bi da ste primili [{{SERVER}}{{SCRIPTPATH}}/COPYING primerak GNU-ove op
 
 # Special:SpecialPages
 'specialpages' => 'Posebne stranice',
-'specialpages-note' => '----
-* obične posebne stranice
-* <span class="mw-specialpagerestricted">ograničene posebne stranice</span>',
+'specialpages-note' => '* Normalne posebne stranice
+* <span class="mw-specialpagerestricted">Ograničene posebne stranice</span>',
 'specialpages-group-maintenance' => 'Izveštaji održavanja',
 'specialpages-group-other' => 'Ostale posebne stranice',
 'specialpages-group-login' => 'Prijava/registracija',
index d210911..df96074 100644 (file)
@@ -1188,7 +1188,7 @@ Trawan o kibri.
 
 # External editor support
 'edit-externally' => 'Kenki a file disi ini wan dorosey wrokosani.',
-'edit-externally-help' => 'Luku ini a [//www.mediawiki.org/wiki/Manual:External_editors skorobuku fu den seti] gi moro yepi.',
+'edit-externally-help' => 'Luku ini a [https://www.mediawiki.org/wiki/Manual:External_editors skorobuku fu den seti] gi moro yepi.',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ala',
index a5fb117..6cab51c 100644 (file)
@@ -1008,7 +1008,6 @@ Staal deertruch sicher, dät ju Versionsgeskichte fon n Artikkel historisk akroa
 'mypreferences' => 'Ienstaalengen',
 'prefs-edits' => 'Antaal Beoarbaidengen:',
 'prefsnologin' => 'Nit anmälded',
-'prefsnologintext' => 'Du moast <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} anmälded]</span> weese, uum dien Ienstaalengen annerje tou konnen.',
 'changepassword' => 'Paaswoud annerje',
 'prefs-skin' => 'Skin',
 'skin-preview' => 'Foarskau',
@@ -2380,7 +2379,7 @@ Alternativ is die Export uk mäd de Syntax [[{{#Special:Export}}/{{MediaWiki:Mai
 'allmessagesdefault' => 'Standardtext',
 'allmessagescurrent' => 'Dissen Text',
 'allmessagestext' => 'Dit is ne Lieste fon aal System-Ättergjuchte do in dän MediaWiki-Noomenruum tou Ferföigenge stounde.
-Besäik jädden [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] un [//translatewiki.net translatewiki.net], wan du mee-oarbaidje wolt an ju MediaWiki-Sortierenge.',
+Besäik jädden [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] un [//translatewiki.net translatewiki.net], wan du mee-oarbaidje wolt an ju MediaWiki-Sortierenge.',
 'allmessagesnotsupportedDB' => 'Disse Spezioalsiede stoant nit tou Ferföigenge, deer ju uur dän Parameter <tt>$wgUseDatabaseMessages</tt> deaktivierd wuude.',
 'allmessages-filter-legend' => 'Sieuwe',
 'allmessages-filter' => 'Sieuwe foar anpaaseden Toustand:',
@@ -2957,7 +2956,7 @@ Wiedere wäide standoardmäitich nit anwiesd.
 
 # External editor support
 'edit-externally' => 'Disse Doatäi mäd n extern Program beoarbaidje',
-'edit-externally-help' => '(Sjuch do [//www.mediawiki.org/wiki/Manual:External_editors Installationsanwiesengen] foar wiedere Informatione)',
+'edit-externally-help' => '(Sjuch do [https://www.mediawiki.org/wiki/Manual:External_editors Installationsanwiesengen] foar wiedere Informatione)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'aal',
@@ -3130,7 +3129,7 @@ Du koast dien Beooboachtengslieste uk in dät [[Special:EditWatchlist/raw|Lieste
 'version-hook-subscribedby' => 'Aproup fon',
 'version-version' => '(Version $1)',
 'version-license' => 'Lizenz',
-'version-poweredby-credits' => "Disse Website nutset '''[//www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
+'version-poweredby-credits' => "Disse Website nutset '''[https://www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
 'version-poweredby-others' => 'uur',
 'version-license-info' => "MediaWiki is fräie Software, dät hat dät ju ätter do Bedingengen fon ju truch de Free Software Foundation fereepenlikede ''GNU General Public License'', fääreferdeeld un/ of modifizierd wäide kon. Deerbie kon ju version 2, of ätter oainen Uurdeel, älke näiere Version fon ju Lizenz ferwoand wäide.
 
@@ -3154,8 +3153,7 @@ Ne [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie fon ju ''GNU General Public License''
 
 # Special:SpecialPages
 'specialpages' => 'Spezioalsieden',
-'specialpages-note' => '----
-* Reguläre Spezioalsieden
+'specialpages-note' => '* Reguläre Spezioalsieden
 * <span class="mw-specialpagerestricted">Tougriepsbeskränkede Spezioalsieden</span>
 * <span class="mw-specialpagecached">Cachegenerierde Spezioalsieden</span>',
 'specialpages-group-maintenance' => 'Fersuurgengsliesten',
index 410e1ba..230981d 100644 (file)
@@ -1075,7 +1075,6 @@ Coba susud dimimitian ku ''all:'' pikeun nyusud sakabéh kandunganana (kaasup ka
 'mypreferences' => 'Préferéns',
 'prefs-edits' => 'Jumlah éditan:',
 'prefsnologin' => 'Can asup log',
-'prefsnologintext' => 'Anjeun kudu <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} asup log]</span> pikeun ngatur préferénsi pamaké.',
 'changepassword' => 'Robah sandi',
 'prefs-skin' => 'Kulit',
 'skin-preview' => 'Pramidang',
@@ -2792,7 +2791,7 @@ Nu séjénna bakal disumputkeun sakumaha asalna.
 
 # External editor support
 'edit-externally' => 'Édit koropak ieu migunakeun aplikasi éksternal',
-'edit-externally-help' => 'Baca [//www.mediawiki.org/wiki/Manual:External_editors pituduh ngatur] pikeun émbaran leuwih jéntré.',
+'edit-externally-help' => 'Baca [https://www.mediawiki.org/wiki/Manual:External_editors pituduh ngatur] pikeun émbaran leuwih jéntré.',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'sadaya',
@@ -2932,8 +2931,7 @@ Coba ku sawangan normal.',
 
 # Special:SpecialPages
 'specialpages' => 'Kaca husus',
-'specialpages-note' => '----
-* Kaca husus bisa di buka ku umum.
+'specialpages-note' => '* Kaca husus bisa di buka ku umum.
 * <strong class="mw-specialpagerestricted">Cetak kandel kaca husus nu kawates.</strong>',
 'specialpages-group-maintenance' => 'Laporan pigawéeun',
 'specialpages-group-other' => 'Kaca husus lainna',
index 8497694..380af11 100644 (file)
@@ -734,7 +734,7 @@ Den administratören som låste den gav denna anledning: "\'\'$3\'\'".',
 'invalidtitle-knownnamespace' => 'Ogiltig titel med namnrymden "$2" och texten "$3"',
 'invalidtitle-unknownnamespace' => 'Ogiltig titel med okänt namnrymdsnummer $1 och texten "$2"',
 'exception-nologin' => 'Inte inloggad',
-'exception-nologin-text' => 'Denna sida eller åtgärd kräver att du måste vara inloggad på denna wiki.',
+'exception-nologin-text' => 'Var god [[Special:Userlogin|logga in]] för att komma åt denna sida eller åtgärd.',
 
 # Virus scanner
 'virus-badscanner' => "Dålig konfigurering: okänd virusskanner: ''$1''",
@@ -781,7 +781,7 @@ Glöm inte att justera dina [[Special:Preferences|{{SITENAME}}-inställningar]].
 'gotaccount' => "Har du redan ett användarkonto? '''$1'''.",
 'gotaccountlink' => 'Logga in',
 'userlogin-resetlink' => 'Har du glömt dina inloggningsuppgifter?',
-'userlogin-resetpassword-link' => 'Återställ ditt lösenord',
+'userlogin-resetpassword-link' => 'Glömt ditt lösenord?',
 'helplogin-url' => 'Help:Logga in',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hjälp med inloggning]]',
 'userlogin-loggedin' => 'Du är redan inloggad som {{GENDER:$1|$1}}.
@@ -852,7 +852,7 @@ För att förhindra missbruk skickas bara en lösenordsåterställning per {{PLU
 'acct_creation_throttle_hit' => 'Besökare till den här wikin som har använt din IP-adress har skapat {{PLURAL:$1|1 användarkonto|$1 användarkonton}} under det senaste dygnet, vilket är det maximalt tillåtna inom den tidsperioden.
 Som ett resultat kan besökare som använder den här IP-adressen inte skapa några fler användarkonton just nu.',
 'emailauthenticated' => 'Din e-postadress bekräftades den $2 kl. $3.',
-'emailnotauthenticated' => 'Din e-postadress är ännu inte bekräftad. Ingen e-post kommer att skickas vad gäller det följande:',
+'emailnotauthenticated' => 'Din e-postadress är ännu inte bekräftad. Ingen e-post kommer att skickas vad gäller det följande funktionerna.',
 'noemailprefs' => 'Uppge en e-postadress i dina inställningar för att få dessa funktioner att fungera.',
 'emailconfirmlink' => 'Bekräfta din e-postadress',
 'invalidemailaddress' => 'E-postadressen kan inte godtas då formatet verkar vara felaktigt.
@@ -1294,8 +1294,8 @@ Andra administratörer på {{SITENAME}} kommer fortfarande att kunna läsa det d
 'revdelete-hide-user' => 'Redigerarens användarnamn/IP-adress',
 'revdelete-hide-restricted' => 'Undanhåll data från administratörer så väl som från övriga',
 'revdelete-radio-same' => '(låt vara)',
-'revdelete-radio-set' => 'Synlig',
-'revdelete-radio-unset' => 'Dold',
+'revdelete-radio-set' => 'Dold',
+'revdelete-radio-unset' => 'Synlig',
 'revdelete-suppress' => 'Undanhåll data även från administratörer',
 'revdelete-unsuppress' => 'Ta bort begränsningar på återställda versioner',
 'revdelete-log' => 'Anledning:',
@@ -1453,7 +1453,6 @@ Notera dock att deras indexering av {{SITENAME}} kan vara något föråldrad.',
 'mypreferences' => 'Inställningar',
 'prefs-edits' => 'Antal redigeringar:',
 'prefsnologin' => 'Inte inloggad',
-'prefsnologintext' => 'Du måste vara <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} inloggad]</span> för att kunna ändra dina inställningar.',
 'changepassword' => 'Byt lösenord',
 'prefs-skin' => 'Utseende',
 'skin-preview' => 'förhandsvisning',
@@ -1491,7 +1490,7 @@ Notera dock att deras indexering av {{SITENAME}} kan vara något föråldrad.',
 'recentchangescount' => 'Antal redigeringar som visas som standard:',
 'prefs-help-recentchangescount' => 'Detta inkluderar senaste ändringarna, sidhistorik och loggar.',
 'prefs-help-watchlist-token2' => 'Detta är den hemliga nyckeln till webbflödet i din bevakningslista.
-Någon som vet den kommer att kunna läsa din bevakningslista, så inte dela ut den.
+Någon som vet den kommer att kunna läsa din bevakningslista, så dela inte ut den.
 [[Special:ResetTokens|Klicka här om du behöver återställa den]].',
 'savedprefs' => 'Dina inställningar har sparats',
 'timezonelegend' => 'Tidszon:',
@@ -2997,7 +2996,7 @@ I det senare fallet kan du även använda en länk, exempel [[{{#Special:Export}
 'allmessagesdefault' => 'Standardtext',
 'allmessagescurrent' => 'Nuvarande text',
 'allmessagestext' => 'Detta är en lista över alla meddelanden i namnrymden MediaWiki.
-Besök [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] eller [//translatewiki.net translatewiki.net] om du vill bidra till översättningen av MediaWiki.',
+Besök [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] eller [//translatewiki.net translatewiki.net] om du vill bidra till översättningen av MediaWiki.',
 'allmessagesnotsupportedDB' => "Den här sidan kan inte användas eftersom '''\$wgUseDatabaseMessages''' är avstängd.",
 'allmessages-filter-legend' => 'Filtrera',
 'allmessages-filter' => 'Filtrera efter anpassningsgrad:',
@@ -3161,7 +3160,7 @@ Vänligen använd förhandsgranskningsknappen innan du sparar.',
 Ger möjlighet att skriva en motivering i redigeringssammanfattningen',
 'tooltip-preferences-save' => 'Spara inställningar',
 'tooltip-summary' => 'Skriv en kort sammanfattning',
-'tooltip-iwiki' => '$1 - $2',
+'interlanguage-link-title' => '$1 - $2',
 
 # Stylesheets
 'common.css' => '/* CSS som skrivs här påverkar alla skal */',
@@ -3312,7 +3311,7 @@ Om du kör den kan din dator skadas.",
 'svg-long-desc' => 'SVG-fil, grundstorlek: $1 × $2 pixlar, filstorlek: $3',
 'svg-long-desc-animated' => 'Animerad SVG-fil, standardstorlek $1 × $2 pixlar, filstorlek: $3',
 'svg-long-error' => 'Felaktig SVG-fil: $1',
-'show-big-image' => 'Högupplöst version',
+'show-big-image' => 'Originalfil',
 'show-big-image-preview' => 'Storlek på förhandsvisningen: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Annan upplösning|Andra upplösningar}}: $1.',
 'show-big-image-size' => '$1 × $2 pixlar',
@@ -3781,7 +3780,7 @@ Andra kommer att gömmas som standard
 
 # External editor support
 'edit-externally' => 'Redigera denna fil med hjälp av extern programvara',
-'edit-externally-help' => '(Se [//www.mediawiki.org/wiki/Manual:External_editors installationsinstruktionerna] för mer information)',
+'edit-externally-help' => '(Se [https://www.mediawiki.org/wiki/Manual:External_editors installationsinstruktionerna] för mer information)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'alla',
@@ -3966,7 +3965,7 @@ Du kan också [[Special:EditWatchlist|använda standardeditorn]].',
 'version-hook-subscribedby' => 'Används av',
 'version-version' => '(Version $1)',
 'version-license' => 'Licens',
-'version-poweredby-credits' => "Den här wikin drivs av '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Den här wikin drivs av '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'andra',
 'version-poweredby-translators' => 'översättare från translatewiki.net',
 'version-credits-summary' => 'Vi skulle vilja tacka följande personer för deras bidrag till [[Special:Version|MediaWiki]].',
@@ -4007,10 +4006,8 @@ Du bör ha fått [{{SERVER}}{{SCRIPTPATH}}/COPYING en kopia av GNU General Publi
 
 # Special:SpecialPages
 'specialpages' => 'Specialsidor',
-'specialpages-note' => '----
-* Normala specialsidor.
-* <span class="mw-specialpagerestricted">Specialsidor med begränsad åtkomst.</span>
-* <span class="mw-specialpagecached">Cachade specialsidor (kan vara föråldrade).</span>',
+'specialpages-note' => '* Normala specialsidor.
+* <span class="mw-specialpagerestricted">Specialsidor med begränsad åtkomst.</span>',
 'specialpages-group-maintenance' => 'Underhållsrapporter',
 'specialpages-group-other' => 'Övriga specialsidor',
 'specialpages-group-login' => 'Logga in / skapa konto',
index d8ef376..31d5812 100644 (file)
@@ -1129,7 +1129,6 @@ Ujue lakini kwamba kumbukumbu za {{SITENAME}} kule Google labda zilipitwa na wak
 'mypreferences' => 'Mapendekezo',
 'prefs-edits' => 'Idadi ya marekebisho:',
 'prefsnologin' => 'Hujaingia',
-'prefsnologintext' => 'Inabidi <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} uingie akaunti yako]</span> ili ubadilishe mapendekezo yako.',
 'changepassword' => 'Badilisha neno la siri',
 'prefs-skin' => 'Umbo',
 'skin-preview' => 'Hakiki',
@@ -2183,7 +2182,7 @@ $1',
 'contributions' => 'Michango ya {{GENDER:$1|mtumiaji}}',
 'contributions-title' => 'Michango ya mtumiaji $1',
 'mycontris' => 'Michango',
-'contribsub2' => 'Kwa $1 ($2)',
+'contribsub2' => 'Kwa {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'Mabadiliko yanayolingana na vigezo vilivyoulizwa hayakupatikana.',
 'uctop' => '(ya kisasa)',
 'month' => 'Kutoka mwezi (na zamani zaidi):',
@@ -2416,7 +2415,7 @@ Ukipeleka haririo ya kisasa tu, unaweza kutumia kiungo kinachokwenda ukurasa wa
 'allmessagesdefault' => 'Ujumbe uliopo bidhaa pepe',
 'allmessagescurrent' => 'Ujumbe unapo sasa hivi',
 'allmessagestext' => 'Hii ni orodha ya jumbe za mfumo zilizopo katika eneo la MediaWiki.
-Ukitaka kusaidia kazi ya kutohoa MediaWiki yote katika lugha nyingi, tafadhali uende tovuti ya [//www.mediawiki.org/wiki/Localisation Kutohoa MediaWiki Kwenye Lugha Nyingi] na [//translatewiki.net translatewiki.net].',
+Ukitaka kusaidia kazi ya kutohoa MediaWiki yote katika lugha nyingi, tafadhali uende tovuti ya [https://www.mediawiki.org/wiki/Localisation Kutohoa MediaWiki Kwenye Lugha Nyingi] na [//translatewiki.net translatewiki.net].',
 'allmessagesnotsupportedDB' => "Ukurasa huu hauwezi kutumika kwa sababu '''\$wgUseDatabaseMessages''' imelemazwa.",
 'allmessages-filter-legend' => 'Chuja',
 'allmessages-filter' => 'Zichujwe kwa hali ya kutengenezwa:',
@@ -2840,7 +2839,7 @@ likifupishwa. Nyuga zingine zitafichwa kama chaguo-msingi.
 
 # External editor support
 'edit-externally' => 'Tumia programu ya nje kuhariri faili hii',
-'edit-externally-help' => '(Ona [//www.mediawiki.org/wiki/Manual:External_editors maelezo (kwa Kiingereza)] kwa maarifa mengine.)',
+'edit-externally-help' => '(Ona [https://www.mediawiki.org/wiki/Manual:External_editors maelezo (kwa Kiingereza)] kwa maarifa mengine.)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'zote',
@@ -3008,7 +3007,7 @@ Pia unaweza [[Special:EditWatchlist|kutumia kihariri cha kawaida]].',
 'version-other' => 'Zingine',
 'version-version' => '(Toleo $1)',
 'version-license' => 'Ruhusa',
-'version-poweredby-credits' => "Wiki hii inaendeshwa na bidhaa pepe ya '''[//www.mediawiki.org/ MediaWiki]''', hakimiliki © 2001-$1 $2.",
+'version-poweredby-credits' => "Wiki hii inaendeshwa na bidhaa pepe ya '''[https://www.mediawiki.org/ MediaWiki]''', hakimiliki © 2001-$1 $2.",
 'version-poweredby-others' => 'wengine',
 'version-license-info' => 'MediaWiki ni bidhaa pepe huru; unaweza kuisambaza pamoja na kuitumia na kuibadilisha kutokana na masharti ya leseni ya GNU General Public License inayotolewa na Free Software Foundation (Shirika la Bidhaa Pepe Huru); ama toleo 2 la hakimiliki, ama (ukitaka) toleo lolote linalofuata.
 
@@ -3033,8 +3032,7 @@ Huwa unapokea [{{SERVER}}{{SCRIPTPATH}}/COPYING nakala ya GNU General Public Lic
 
 # Special:SpecialPages
 'specialpages' => 'Kurasa maalum',
-'specialpages-note' => '----
-* Kurasa maalum za kawaida.
+'specialpages-note' => '* Kurasa maalum za kawaida.
 * <span class="mw-specialpagerestricted">Kurasa maalum zisizoonekana na wote.</span>
 * <span class="mw-specialpagecached">Kurasa maalum zinazotoka "cache" (might be obsolete).</span>',
 'specialpages-group-maintenance' => 'Ripoti za kurekebisha na kutunza kurasa',
index 1a0cca4..b08878d 100644 (file)
@@ -568,8 +568,8 @@ Jak bydźesz chćoł, coby wysyłoło Ći e-brify, pjyrwyj go przeczytej. Bydźe
 Coby powstrzimać nadużyća, mogebność wysyłańo przipůmńyń nasztalowano na jydne bez {{PLURAL:$1|godźina|$1 godźiny}}.',
 'mailerror' => 'Przi wysyłańu e-brifa zdorził śe feler: $1',
 'acct_creation_throttle_hit' => 'Przikro nom, założůł(a)żeś już {{PLURAL:$1|1 kůnto|$1 kůnta}}. Ńy możesz założyć kolejnygo.',
-'emailauthenticated' => 'Twůj adres e-brifa zostoł uwjerzitelńůny $2 uo $3.',
-'emailnotauthenticated' => 'Twůj adres e-brifa ńy je uwjerzitelńůny. Půniższe funkcyje poczty ńy bydům dźołać.',
+'emailauthenticated' => 'Twůj ausdruk e-brifa zostoł powjerzitelńůny $2 uo $3.',
+'emailnotauthenticated' => 'Twůj adres e-brifa ńy je powjerzitelńůny. Půniższe funkcyje poczty ńy dźołajům.',
 'noemailprefs' => 'Muśisz podać adres e-brifa, coby te funkcyje dźołały.',
 'emailconfirmlink' => 'Potwjyrdź swůj adres e-brifa',
 'invalidemailaddress' => 'E-brif ńy bydźe zaakceptůwany skiż tygo co jigo format ńy spełńo formalnych wymagań. Prosza naszkryflać poprowny adres e-brifa abo wyczyśćić pole.',
@@ -601,7 +601,7 @@ Kej bydźesz chćoł je podoć, bydům użyte, coby dokůmyntowoć Twoje autorst
 'resetpass_submit' => 'Nasztaluj hasło a zaloguj',
 'changepassword-success' => 'Twoje hasło zostoło půmyślńy půmjyńone!',
 'resetpass_forbidden' => 'Ńy idźe sam půmjyńyć hasłůw.',
-'resetpass-no-info' => 'Muśysz być zalogowany, coby uzyskać bezpostrzedńi dostymp do tyj zajty.',
+'resetpass-no-info' => 'Muśisz być zalogowany, coby uzyskoć bezpostrzedńi dostymp do tyj zajty.',
 'resetpass-submit-loggedin' => 'Zmjyń hasło',
 'resetpass-submit-cancel' => 'Uodćepej',
 'resetpass-wrong-oldpass' => 'Felerne tymczasowe abo aktualne hasło.
@@ -614,8 +614,8 @@ Możliwe co właśńy zmjyńiłżeś swoje hasło abo poprosiłżeś uo nowe tym
 'passwordreset-disabled' => 'No tyj wiki zamkńynto resytowańy hasył.',
 'passwordreset-username' => 'Mjano używacza:',
 'passwordreset-domain' => 'Domyna:',
-'passwordreset-capture' => 'Czy pokazywać treść wiadomości e‐mail?',
-'passwordreset-capture-help' => 'Eli zaznaczysz to pole, łoboczysz wjadomość e-mail z hasłem.',
+'passwordreset-capture' => 'Pokozać treść e-brifa?',
+'passwordreset-capture-help' => 'Eli zaznaczysz to pole, uobejrzisz wjadůmość e-brifa ze hasłym.',
 'passwordreset-email' => 'E-brif:',
 'passwordreset-emailtitle' => 'Kůnto na {{GRAMMAR:MS.lp|{{SITENAME}}}}',
 'passwordreset-emailtext-ip' => 'Ftoś (cheba Ty, s IP $1)
@@ -702,46 +702,44 @@ Powůd zawarćo:
 
 * Zawarte uod: $8 * Uodymkńe śe: $6 * Zawarće skiż: $7 Coby wyjaśńić sprawa zawarćo, naszkryflej do $1 abo inkszygo [[{{MediaWiki:Grouppage-sysop}}|admińistratora]]. Ńy możesz posłać e-brifa bez "poślij e-brifa tymu użytkowńikowi", jak żeś ńy podoł dobrygo ausdruku e-brifa we [[Special:Preferences|preferencyjach kůnta]], abo jak e-brify mosz tyż zawarte. Terozki mosz ausdruk IP $3 a nůmera zawarćo to #$5. Proszymy podać jedyn abo uoba jak chcysz połosprawjać uo zawarću.',
 'blockednoreason' => 'ńy podano skuli czygo',
-'whitelistedittext' => 'Muśiš $1 coby můc sprowjać artikle.',
-'confirmedittext' => 'Muśiš podać a potwjerdźić swůj e-brif, coby můc sam sprowjać.
-MožeÅ¡ to zrobiÄ\87 we [[Special:Preferences|swojich Å¡talowańach]].',
+'whitelistedittext' => 'Muśisz $1 coby můc sprowjać artikle.',
+'confirmedittext' => 'Muśisz podać a potwjerdźić swůj e-brif, coby můc sam sprowjać.
+Możesz to zrobiÄ\87 we [[Special:Preferences|swojich sztalowańach]].',
 'nosuchsectiontitle' => 'Ńy mo takij tajli',
 'nosuchsectiontext' => 'Průbowołżeś sprowjać tajla kero ńy istńeje.',
-'loginreqtitle' => 'Muśiš śe zalůgować',
-'loginreqlink' => 'zalůguj śe',
-'loginreqpagetext' => 'Muśiš $1 coby můc přeglůndać inkše zajty.',
-'accmailtitle' => 'Hasuo wysuane.',
-'accmailtext' => '!Hasło użytkowńika "[[User talk:$1|$1]]" zostauo wysłane pod adres $2.
-
-Hasło można pomjyńyć [[Special:ChangePassword|tu]].',
+'loginreqtitle' => 'Muśisz śe zalogować',
+'loginreqlink' => 'zaloguj śe',
+'loginreqpagetext' => 'Muśisz $1 coby můc przeglůndać inksze zajty.',
+'accmailtitle' => 'Hasło posłane.',
+'accmailtext' => "Cufalńe hasło lo [[User talk:$1|$1]] uostoło posłane do $2. Hasło lo tygo nowygo kůnta po zalogowańu je mogebność pomjyńić na zajće ''[[Special:ChangePassword|pomjyńańe hasła]]''.",
 'newarticle' => '(Nowy)',
-'newarticletext' => 'Ńy mo sam jeszcze artikla uo takijj titli. Eli chcesz go sprowjać, naszkryflej niżyj jego tekst (wjyncy informacyj nojdźesz [[{{MediaWiki:Helppage}}|na zajće půmocy]]). Eli żeś chćoł zrobić cosik inksze, naćiś ino knefel "Nazod".',
+'newarticletext' => 'Ńy mo sam jeszcze artikla uo takijj titli. Eli chcesz go sprowjać, naszkryflej niżyj jego tekst (wjyncy informacyj nojdźesz [[{{MediaWiki:Helppage}}|na zajće půmocy]]). Eli żeś chćoł zrobić cośik inksze, naćiś ino knefel "Nazod".',
 'anontalkpagetext' => "---- ''To je zajta godki lo anůnimowych używoczy  - takich, kerzi ńy majům jeszcze swojigo kůnta abo ńy chcům go terozki używać.
 By jejich idyntyfikować, używomy numerůw IP.
 Eli jeżeś anůnimowym używoczym a wydowo Ći śe, aże zamjyszczůne sam kůmyntorze ńy sům skjyrowane do Ćebje, [[Special:UserLogin|utwůrz prosza kůnto]] abo [[Special:UserLogin|zalůguj śe]] - beztůż uńikńesz potym podobnych ńyporozumjyń.''",
 'noarticletext' => 'Ńy můmy zajta uo takij titli. Mogesz [{{fullurl:{{FULLPAGENAME}}|action=edit}} wćepać artikel {{FULLPAGENAME}}] abo [[Special:Search/{{PAGENAME}}|sznupać {{PAGENAME}} we inkszych]].',
-'noarticletext-nopermission' => 'Na tyj zajće ńy mo jeszcze artikla.
-Mogesz [[Special:Search/{{PAGENAME}}|wysznupać ta titla]] we treśći inkszych zajtůw
-abo <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} przesznupać powjůnzane logi].</span>',
-'userpage-userdoesnotexist' => 'Užytkowńik "<nowiki>$1</nowiki>" ńy je zareještrowany. Sprowdź eli na pewno chćoužeś stwořyć/pomjynić gynau ta zajta.',
+'noarticletext-nopermission' => 'Ta zajta terozki je pusto.
+Mogesz [[Special:Search/{{PAGENAME}}|wysznupać ta titla]] we treśćach inkszych zajtůw, abo <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} przesznupać powjůnzane rejery]</span>, nale ńy mosz uprowńyń coby ta zajta wćepać',
+'userpage-userdoesnotexist' => 'Użytkowńik "<nowiki>$1</nowiki>" ńy je zarejesztrowany. Sprowdź eli na pewno chćołżeś stworzyć/pomjynić gynał ta zajta.',
 'userpage-userdoesnotexist-view' => "Konto sprowjorza ''$1'' ńy istnieje.",
 'blocked-notice-logextract' => '{{GENDER:$1|Tyn sprowjorz|Ta sprowjorka}} mo zawrzite sprowjyńa.',
 'clearyourcache' => "'''Dej pozůr:''' Coby uobejrzeć pomjyńańo pů naszkryflańu nowych sztalowań poleć przeglůndorce wyczyśćić zawartość pamjyńći podryncznyj (cache). '''Mozilla / Firefox / Safari:''' przitrzimej ''Shift'' klikajůnc na ''Uodśwjyž'' abo wciś ''Ctrl-Shift-R'' (''Cmd-Shift-R'' na Macu), '''IE :''' przitrzimej ''Ctrl'' klikajůnc na ''Uodśwjyž'' abo wciś ''Ctrl-F5''; '''Konqueror:''': kliknij knefel ''Uodśwjyž'' abo wciś ''F5''; użytkowńicy '''Opery''' mogům być zmuszeńi coby cołkym wyczyśćić jejich pamjyńć podrynczno we menu ''Werkcojgi→Preferencyje''.; '''Internet Explorer:''' trzim ''Ctrl'' a wćiś ''Uodśwjyż'', abo wćiś ''Ctrl-F5''.",
 'usercssyoucanpreview' => "!'''Podpowjydź:''' Użyj knefla \"Podglůnd\", coby przetestować Twůj nowy arkusz stylůw CSS abo kod JavaScript przed jego zaszrajbowańym.",
 'userjsyoucanpreview' => "!'''Podpowjydź:''' Użyj knefla \"Podglůnd\", coby przetestować Twůj nowy arkusz stylůw CSS abo kod JavaScript przed jego zaszrajbowańym.",
-'usercsspreview' => "'''Pamjyntej, aže to je na raźe ino podglůnd Twojego arkuša stylůw CSS.'''
-'''Ńic ješče ńy zostouo naškryflone!'''",
-'userjspreview' => "'''Pamjyntej, aže to je na raźe ino podglůnd Twojego JavaScriptu - nic ješče ńy zostouo naškryflone!'''",
+'usercsspreview' => "'''Pamjyntej, aże to je no raźe ino podglůnd Twojego arkusza stylůw CSS.'''
+'''Ńic jeszcze ńy zostoło naszkryflane!'''",
+'userjspreview' => "'''Pamjyntej, aże to je no raźe ino podglůnd Twojego arkusza stylůw JavaScriptu.'''
+'''Ńic jeszcze ńy zostoło naszkryflane!'''",
 'sitecsspreview' => "'''Pamjyntej, aże to je na raźe ino podglůnd Twojego arkusza stylůw CSS.'''
-'''Ńic jeszczče ńy zostoło naszkryflone!'''",
-'sitejspreview' => "'''Pamjyntej, aże to je na raźe ino podglůnd Twojego JavaScriptu - nic jeszcze ńy zostoło naškryflone!'''",
-'userinvalidcssjstitle' => "'''Pozůr:''' Å\83y mo skůrki uo mjaÅ\84e \"\$1\". Pamjyntej, aže zajty užytkowÅ\84ika zawjyrajůnce CSS i JavaScript powinny zaÄ\8dynaÄ\87 Å\9be mouům buchÅ¡tabům, np. {{ns:user}}:Foo/vector.css.",
+'''Ńic jeszcze ńy zostoło naszkryflane!'''",
+'sitejspreview' => "'''Pamjyntej, aże to je na raźe ino podglůnd Twojego JavaScriptu - nic jeszcze ńy zostoło naszkryflane!'''",
+'userinvalidcssjstitle' => "'''Pozůr:''' Å\83y mo skůrki uo mjaÅ\84e \"\$1\". Pamjyntej, aże zajty użytkowÅ\84ika zawjyrajůnce CSS i JavaScript powinny zaczynaÄ\87 Å\9be maÅ\82ům buchsztabům, lb. {{ns:user}}:Foo/vector.css.",
 'updated' => '(Pomjyńano)',
 'note' => "'''Pozůr:'''",
 'previewnote' => "'''To je ino podglůnd - artikel jeszcze ńy je spamjyntany!'''",
-'continue-editing' => 'Sprowjej dalej',
-'previewconflict' => 'Wersyjo podglůndano uodnośi śe do tekstu s pola edycyje na wjyrchu. Tak bydźe wyglůndać zajta jeli zdecyduješ śe jům naškryflać.',
-'session_fail_preview' => "'''Přeprašomy! Serwer ńy može přetwořyć tygo sprowjyńo skuli utraty danych ze sesyji. Sprůbuj ješče roz. Kejby to ńy pomoguo - wylůguj śe i zalogůj uod nowa.'''",
+'continue-editing' => 'Przyndź do pola sprowjańo',
+'previewconflict' => 'Wersyjo podglůndano uodnośi śe do tekstu ze pola edycyje na wjyrchu. Tak bydźe wyglůndać zajta jeli zdecydujesz śe jům naszkryflać.',
+'session_fail_preview' => "'''Przepraszomy! Serwer ńy może przetworzić tygo sprowjyńo skuli utraty danych ze sesyji. Sprůbuj jeszcze roz. Kejby to ńy pomogło - wyloguj śe a zalogůj uod nowa.'''",
 'session_fail_preview_html' => "'''Přeprašomy! Serwer ńy može přetwořyć tygo sprowjyńo skuli utraty danych ze sesyji.'''
 
 ''Jako iže na {{GRAMMAR:MS.lp|{{SITENAME}}}} wuůnčono zostoua uopcyjo \"raw HTML\", podglůnd zostou schrůńony coby zabezpječyć před atakami JavaScript.''
@@ -790,7 +788,7 @@ Možeš sprowjać te co juž sům, abo [[Special:UserLogin|zalogować śe, abo z
 'nocreate-loggedin' => 'Ńy moš uprowńyń do twořyńo nowych zajtůw.',
 'sectioneditnotsupported-title' => 'Sprowjańy tajli ńymogebne',
 'sectioneditnotsupported-text' => 'Sprowjańy tajli ńymogebne na tyj zajće.',
-'permissionserrors' => 'Felerne uprowńyńa',
+'permissionserrors' => 'Felerne uprawńyńo',
 'permissionserrorstext' => 'Ńy moš uprowńyń do takij akcyje {{PLURAL:$1|skuli tego, co:|bestůž, co:}}',
 'permissionserrorstext-withaction' => 'Ńy mogesz $2, ze {{PLURAL:$1|takigo powodu|takich powodůw}}:',
 'recreate-moveddeleted-warn' => "'''ůostrzeżyńy: Wćepujesz samo zajta, kery bůu poprzedńo wyćepany.'''
@@ -853,8 +851,8 @@ Skuli: ''$2''",
 Legynda: (akt.) - růżńice s wersyjům bjeżůncům, (poprz.) - růżńice s wersyjům poprzedzajůncům, d - drobne zmjany',
 'history-fieldset-title' => 'Przeglůndej gyszichta',
 'history-show-deleted' => 'Jyno wyćepane',
-'histfirst' => 'uod počůnku',
-'histlast' => 'uod uostatka',
+'histfirst' => 'nojstarsze',
+'histlast' => 'nojnowsze',
 'historysize' => '({{PLURAL:$1|1 bajt|$1 bajty|$1 bajtůw}})',
 'historyempty' => '(blank)',
 
@@ -1037,7 +1035,6 @@ $1',
 'mypreferences' => 'Preferyncyje',
 'prefs-edits' => 'Liczba sprowjyń:',
 'prefsnologin' => 'Ńy ježeś zalůgowany',
-'prefsnologintext' => 'Muśiš śe <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} zalůgować]</span> coby štalować swoje preferyncyje.',
 'changepassword' => 'Zmjana hasua',
 'prefs-skin' => 'Skůrka',
 'skin-preview' => 'podglůnd',
@@ -1294,7 +1291,7 @@ $1',
 'rc_categories' => 'Uůgrańič do katygorii (oddźelej za půmocům "|")',
 'rc_categories_any' => 'Wšyskie',
 'newsectionsummary' => '/* $1 */ nowo tajla',
-'rc-enhanced-expand' => 'Pokož Å¡Ä\8dygůuy (wymogo JavaScript)',
+'rc-enhanced-expand' => 'Pokoż szczygůÅ\82y',
 'rc-enhanced-hide' => 'Schrůń detajle',
 
 # Recent changes linked
@@ -1709,8 +1706,8 @@ Adres e-brifa, kery zostoł bez Ćebje wkludzůny we [[Special:Preferences|Twoji
 'emailuserfooter' => 'Wjadůmość e-brif zostoła wysłano s {{GRAMMAR:D.lp|{{SITENAME}}}} ku $2 bez $1 s użyćym „Wyślij e-brif ku tym użytkowńikowi”.',
 
 # Watchlist
-'watchlist' => 'Pozorlista',
-'mywatchlist' => 'Mojo pozůrlista',
+'watchlist' => 'Pozůrlista',
+'mywatchlist' => 'Pozůrlista',
 'watchlistfor2' => 'Lo $1 ($2)',
 'nowatchlist' => 'Ńy ma žodnych pozycyji na liśće zajtůw, na kere dowoš pozůr.',
 'watchlistanontext' => '$1 coby uobejřeć abo sprowjać elymynty listy zajtůw, na kere dowoš pozůr',
@@ -1941,12 +1938,12 @@ $1',
 'blanknamespace' => '(przodńo)',
 
 # Contributions
-'contributions' => 'Ajnzac sprowjorza',
+'contributions' => 'Ajnzac {{GENDER:$1|używocza|używoczki}}',
 'contributions-title' => 'Wkłod użytkowńika $1',
-'mycontris' => 'Uody mje sprowjane',
-'contribsub2' => 'Do užytkowńika $1 ($2)',
+'mycontris' => 'Sprowjyńa',
+'contribsub2' => 'Lo {{GENDER:$3|używocza|używoczki}} $1 ($2)',
 'nocontribs' => 'Brak pomjyńań uodpowjadajůncych tym kryterjům.',
-'uctop' => '(uostatnio)',
+'uctop' => '(teroźńo)',
 'month' => 'Uod mjeśůnca (i downiyjše):',
 'year' => 'Uod roku (i dowńijše):',
 
@@ -1980,7 +1977,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 {{PLURAL:$1|punkńyńćy|punkńyńćo|puńkńyńć}}',
 'whatlinkshere-hidetrans' => '$1 {{PLURAL:$1|dokuplowańy|dokuplowańo|dokuplowań}}',
 'whatlinkshere-hidelinks' => '$1 {{PLURAL:$1|link|linki|linkůw}}',
-'whatlinkshere-hideimages' => '$1 linki s grafik',
+'whatlinkshere-hideimages' => '$1 linki ze plikůw',
 'whatlinkshere-filters' => 'Filtery',
 
 # Block/unblock
@@ -2184,7 +2181,7 @@ Možeš tyž užyć linku, np.[[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] do
 'allmessagesdefault' => 'Tekst důmyślny',
 'allmessagescurrent' => 'Tekst uobecny',
 'allmessagestext' => 'Uoto lista wšyjstkych kůmůńikatůw systymowych dostympnych w přestřyńi mjan MedjaWiki.
-Uodwjydź [//www.mediawiki.org/wiki/Localisation Tuůmačyńy MediaWiki] a tyž [//translatewiki.net translatewiki.net] kejbyś chćou učestńičyć w tuůmačyńu uoprůgramowańo MediaWiki.',
+Uodwjydź [https://www.mediawiki.org/wiki/Localisation Tuůmačyńy MediaWiki] a tyž [//translatewiki.net translatewiki.net] kejbyś chćou učestńičyć w tuůmačyńu uoprůgramowańo MediaWiki.',
 'allmessagesnotsupportedDB' => "Ta zajta ńy može być užyta, bez tůž co zmjynna '''\$wgUseDatabaseMessages''' je wůuůnčůno.",
 
 # Thumbnails
@@ -2444,8 +2441,8 @@ Eli plik był modyfikowany, dane mogům w tajli ńy być we zgodźe ze parametr
 'exif-colorspace' => 'Přestřyń kolorůw',
 'exif-componentsconfiguration' => 'Značyńy skuadowych',
 'exif-compressedbitsperpixel' => 'Skůmpresowanych bitůw na piksel',
-'exif-pixelydimension' => 'Prawiduowa šyrokość uobrozu',
-'exif-pixelxdimension' => 'Prawiduowo wysokość uobrozu',
+'exif-pixelydimension' => 'Prawidłowa szyrzka uobrozu',
+'exif-pixelxdimension' => 'Prawidłowo wyżka uobrozu',
 'exif-usercomment' => 'Kůmyntoř užytkowńika',
 'exif-relatedsoundfile' => 'Powjůnzany plik audjo',
 'exif-datetimeoriginal' => 'Data i čas utwořyńo uoryginouu',
@@ -2459,8 +2456,8 @@ Eli plik był modyfikowany, dane mogům w tajli ńy być we zgodźe ze parametr
 'exif-exposureprogram' => 'Progrům ekspozycyji',
 'exif-spectralsensitivity' => 'Čuuość widmowa',
 'exif-isospeedratings' => 'Šybkość aparatu zgodńy ze ISO12232',
-'exif-shutterspeedvalue' => 'Šybkość migawki',
-'exif-aperturevalue' => 'Přisuůna uobjektywu',
+'exif-shutterspeedvalue' => 'Wartkość migawki',
+'exif-aperturevalue' => 'Przisłůna uobjektywu',
 'exif-brightnessvalue' => 'Jasność',
 'exif-exposurebiasvalue' => 'Uodchylyńy ekspozycyji',
 'exif-maxaperturevalue' => 'Maksymalno wartość přisuůny',
@@ -2534,9 +2531,9 @@ Eli plik był modyfikowany, dane mogům w tajli ńy być we zgodźe ze parametr
 'exif-orientation-3' => 'uobroz uobrůcůny uo 180°',
 'exif-orientation-4' => 'uodbiće we źřadle w pjůńy',
 'exif-orientation-5' => 'uobroz uobrůcůny uo 90° přećiwńy do ruchu wskazůwek zygora i uodbiće we źřadle w pjůńy',
-'exif-orientation-6' => 'uobroz uobrůcůny uo 90° zgodńy s ruchym wskazůwek zygora',
+'exif-orientation-6' => 'Uobroz uobrůcůny uo 90° przećiwńy lo ruchu wskazůwek zygora',
 'exif-orientation-7' => 'uobrůt uo 90° zgodńy ze wskazůwkůma zygora i uodbiće we źřadle w pjůńy',
-'exif-orientation-8' => 'uobrůt uo 90° přećiwńy do wskazůwek zygora',
+'exif-orientation-8' => 'uobrůt uo 90° zgodńy do ruchu wskazůwek zygora',
 
 'exif-planarconfiguration-1' => 'format masywny',
 'exif-planarconfiguration-2' => 'format powjeřchńowy',
@@ -2669,7 +2666,7 @@ Eli plik był modyfikowany, dane mogům w tajli ńy być we zgodźe ze parametr
 
 # External editor support
 'edit-externally' => 'Sprowjej tyn plik bez eksterno aplikacyjo',
-'edit-externally-help' => '(Zobocz [//www.mediawiki.org/wiki/Manual:External_editors instrukcyje sztalowańo eksternych edytorůw], kaj je uo tym wjyncy naszkryflůne)',
+'edit-externally-help' => '(Zobocz [https://www.mediawiki.org/wiki/Manual:External_editors instrukcyje sztalowańo eksternych edytorůw], kaj je uo tym wjyncy naszkryflůne)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'do kupy',
@@ -2752,10 +2749,10 @@ Potwjerdź chęć wćepańo nazod tygo artikla.",
 'table_pager_empty' => 'Brak wynikůw',
 
 # Auto-summaries
-'autosumm-blank' => 'POZŮR! Usůńjyńće treśći (zajta pozostoua pusto)!',
+'autosumm-blank' => 'POZŮR! Usůńjyńće treśći (zajta pozostoła pusto)!',
 'autosumm-replace' => 'POZŮR! Zastůmpjyńy treśći hasua bardzo krůtkym tekstym: „$1”',
 'autoredircomment' => 'Překerowańy do [[$1]]',
-'autosumm-new' => 'Nowo zajta: $1',
+'autosumm-new' => 'Wćepano nowo zajta: "$1"',
 
 # Live preview
 'livepreview-loading' => 'Trwo uadowańy…',
@@ -2772,9 +2769,9 @@ Potwjerdź chęć wćepańo nazod tygo artikla.",
 'watchlistedit-noitems' => 'Twoja lista artikli na kere dowoš pozůr je pusto.',
 'watchlistedit-normal-title' => 'Sprowjej lista zajtůw na kere dowom pozůr',
 'watchlistedit-normal-legend' => 'Wyćep zajty s listy artikli na kere dowoš pozůr',
-'watchlistedit-normal-explain' => 'PůÅ\84¾y moÅ¡ lista artikli na kere dowoÅ¡ pozůr.
-Coby wyćepać s ńij jako zajta,zaznač pole při ńij i naćiś knefel "Wyćep zaznačůne pozycyje".
-MožeÅ¡ tyž skoÅ\99istaÄ\87 ze [[Special:EditWatchlist/raw|tekstowygo edytora listy artikli na kere dowoÅ¡ pozůr]].',
+'watchlistedit-normal-explain' => 'PůÅ\84¼yj mosz lista artikli na kere dowosz pozůr.
+Coby wyćepać z ńij jako zajta, zaznocz pole przi ńij i naćiś knefel „{{int:Watchlistedit-normal-submit}}”.
+Możesz tyż skorzistaÄ\87 ze [[Special:EditWatchlist/raw|tekstowygo sprowjorza listy artikli na kere dowosz pozůr]].',
 'watchlistedit-normal-submit' => 'Wyćep s listy',
 'watchlistedit-normal-done' => 'Z Twoi listy artikli na kere dowoš pozůr {{PLURAL:$1|zostoua wyćepano 1 zajta|zostouy wyćepane $1 zajty|zostouo wyćepanych $1 zajtůw}}:',
 'watchlistedit-raw-title' => 'Tekstowy edytor listy artikli na kere dowoš pozůr',
@@ -2827,19 +2824,18 @@ Možeš tyž [[Special:EditWatchlist|užyć standardowygo edytora]].',
 
 # Special:SpecialPages
 'specialpages' => 'Szpecjalne zajty',
-'specialpages-note' => '----
-* Ekstra zajty uogůlńy dostympne.
+'specialpages-note' => '* Ekstra zajty uogůlńy dostympne.
 * <strong class="mw-specialpagerestricted">Ekstra zajty do kerych dostymp je uograńiczůny.</strong>',
 'specialpages-group-maintenance' => 'Raporty kůnserwacyjne',
 'specialpages-group-other' => 'Inkše ekstra zajty',
-'specialpages-group-login' => 'Lůgowańy / rejerowańy',
+'specialpages-group-login' => 'Logowańy / regisztrowańy',
 'specialpages-group-changes' => 'Pomjyńane na uostatku a rejery',
 'specialpages-group-media' => 'Pliki',
 'specialpages-group-users' => 'Użytkowńiki i uprawńyńa',
 'specialpages-group-highuse' => 'Zajty čynsto užywane',
-'specialpages-group-pages' => 'Zajty',
+'specialpages-group-pages' => 'Listy zajt',
 'specialpages-group-pagetools' => 'Nořyńdźa zajtůw',
-'specialpages-group-wiki' => 'Informacyje a nořyńdźa wiki',
+'specialpages-group-wiki' => 'Informacyje a werkcojgi wiki',
 'specialpages-group-redirects' => 'Ekstra zajty, kere kerujům',
 'specialpages-group-spam' => 'Nořyńdźa do wyćepywanio spamu',
 
index cecd1de..290a5f8 100644 (file)
@@ -526,7 +526,7 @@ $1',
 'gotaccount' => "ஏற்கனவே பயனர் கணக்கு உள்ளதா? '''$1'''.",
 'gotaccountlink' => 'புகுபதிகை',
 'userlogin-resetlink' => 'உங்கள் புகுபதிகைக் குறிப்புகளை மறந்துவிட்டீர்களா?',
-'userlogin-resetpassword-link' => 'உங்கள் கடவுச்சொல் மறந்துவிட்டதா?',
+'userlogin-resetpassword-link' => 'உங்கள் கடவுச் சொல்லை மறந்து விட்டீர்களா?',
 'helplogin-url' => 'Help:புகுபதிகை',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|புகுபதிவதற்கான உதவி]]',
 'userlogin-createanother' => 'மற்றொரு கணக்கு ஒன்றை உருவாக்கவும்',
@@ -1002,8 +1002,8 @@ $1 எனும் பயனரையோ வேறு [[{{MediaWiki:Grouppage-sy
 'revdelete-hide-user' => 'தொகுப்பவரின் ஐ.பி./பயனர்பெயரை மறை',
 'revdelete-hide-restricted' => 'குறிப்புக்களை அதிகாரிகள் உட்பட எல்லோரிடமிருந்தும் மறைத்துவிடு (காட்டத்தேவையில்லை).',
 'revdelete-radio-same' => '(தயவுசெய்து மாற்ற வேண்டாம்)',
-'revdelete-radio-set' => 'à®\86à®®à¯\8d',
-'revdelete-radio-unset' => 'à®\87லà¯\8dலà¯\88',
+'revdelete-radio-set' => 'à®\95ாணà®\95à¯\8dà®\95à¯\82à®\9fியதà¯\81',
+'revdelete-radio-unset' => 'மறà¯\88à®\95à¯\8dà®\95பà¯\8dபà®\9fà¯\8dà®\9fதà¯\81',
 'revdelete-suppress' => 'நிர்வாகிகள் உட்பட இனவரிடமிருந்தாக தரவுகளை அடக்கு',
 'revdelete-unsuppress' => 'மீட்கப்பட்ட திருத்தங்கள் மீதான கட்டுப்பாடுகளை நீக்கு',
 'revdelete-log' => 'காரணம்:',
@@ -1155,7 +1155,6 @@ $1",
 'mypreferences' => 'விருப்பத்தேர்வுகள்',
 'prefs-edits' => 'தொகுப்புகளின் எண்ணிக்கை:',
 'prefsnologin' => 'புகுபதிகை செய்யப்படவில்லை',
-'prefsnologintext' => 'பயனர் விருப்பத்தேர்வுகளை அமைப்பதற்கு நீங்கள் <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} புகுபதிகை ]</span> செய்திருக்க வேண்டும்.',
 'changepassword' => 'கடவுச்சொல்லை மாற்று',
 'prefs-skin' => 'முகப்புறை',
 'skin-preview' => 'முன்தோற்றம்',
@@ -1180,7 +1179,7 @@ $1",
 'prefs-rendering' => 'தோற்றம்',
 'saveprefs' => 'சேமி',
 'resetprefs' => 'சேமிக்காத மாற்றங்கள் நீக்குக',
-'restoreprefs' => 'à®\8eலà¯\8dலà¯\8bà®°à¯\81à®\95à¯\8dà®\95à¯\81à®®à¯\8d à®ªà¯\8aதà¯\81வான à®µà®\9fிவமà¯\88பà¯\8dபà¯\88தà¯\8d à®¤à®¿à®°à¯\81à®®à¯\8dபà®\95à¯\8dà®\95à¯\8aணà¯\8dà®\9fà¯\81வரவà¯\81à®®à¯\8d (à®\8eலà¯\8dலா à®ªà®¿à®±ிவுகளிலும்).',
+'restoreprefs' => 'à®\8eலà¯\8dலà¯\8bà®°à¯\81à®\95à¯\8dà®\95à¯\81à®®à¯\8d à®ªà¯\8aதà¯\81வான à®µà®\9fிவமà¯\88பà¯\8dபà¯\88தà¯\8d à®¤à®¿à®°à¯\81à®®à¯\8dபà®\95à¯\8dà®\95à¯\8aணà¯\8dà®\9fà¯\81வரவà¯\81à®®à¯\8d (à®\8eலà¯\8dலா à®ªà®¿à®°ிவுகளிலும்).',
 'prefs-editing' => 'தொகுத்தல்',
 'rows' => 'நிரைகள் (கிடை வரிசைகள்):',
 'columns' => 'நிரல்கள்',
@@ -1237,7 +1236,7 @@ $1",
 'badsiglength' => 'தங்களது கையெழுத்து மிக நீளமானது.
 
 அது $1 {{PLURAL:$1|எழுத்து|எழுத்துக்களுக்கு}} மேல் இருக்கக்கூடாது.',
-'yourgender' => 'பாலà¯\8d:',
+'yourgender' => 'à®\89à®\99à¯\8dà®\95ளà¯\88 à®\8eபà¯\8dபà®\9fி à®µà®¿à®µà®°à®¿à®\95à¯\8dà®\95 à®µà®¿à®°à¯\81à®®à¯\8dபà¯\81à®\95ினà¯\8dà®±à¯\80à®°à¯\8dà®\95ளà¯\8d?',
 'gender-unknown' => 'நான் குறிப்பிட விரும்பவில்லை',
 'gender-male' => 'ஆண்',
 'gender-female' => 'பெண்',
@@ -1702,6 +1701,8 @@ $1',
 'listfiles_size' => 'அளவு',
 'listfiles_description' => 'விளக்கம்',
 'listfiles_count' => 'பதிப்புக்கள்',
+'listfiles-latestversion-yes' => 'ஆம்',
+'listfiles-latestversion-no' => 'இல்லை',
 
 # File description page
 'file-anchor-link' => 'கோப்பு',
@@ -1893,8 +1894,8 @@ $1',
 'ancientpages' => 'மிகப்பழைய கட்டுரைகள்',
 'move' => 'நகர்த்தவும்',
 'movethispage' => 'இப்பக்கத்தை நகர்த்து',
-'unusedimagestext' => 'à®\95à¯\80à®´à¯\8dவரà¯\81à®®à¯\8d à®\95à¯\8bபà¯\8dபà¯\81à®\95ளà¯\8d à®\89ணà¯\8dà®\9fà¯\81, ஆனாலும் அவை எந்த ஒரு பக்கத்திலும் இணைக்கப்படவில்லை.
-இக்கோப்பு ஏனைய இணையத்தளங்களினால் நேரடியான இணையமுகவரியை பயன்படுத்தி இனைக்கப்பட்டிருக்கக் கூடுமென்பதுடன், செயல்படு பயன்பாட்டில் இருந்தும் கூட இங்கே பட்டியலிடப்பட்டிருக்கக்கூடும் என்பதையும் கவனிக்கவும்.',
+'unusedimagestext' => 'à®\95à¯\80à®´à¯\8dவரà¯\81à®®à¯\8d à®\95à¯\8bபà¯\8dபà¯\81à®\95ளà¯\8d à®\87à®°à¯\81நà¯\8dதாலà¯\81à®®à¯\8d, ஆனாலும் அவை எந்த ஒரு பக்கத்திலும் இணைக்கப்படவில்லை.
+இக்கோப்புகள் ஏனைய இணையத்தளங்களினால் இணையமுகவரியை பயன்படுத்தி நேரடியாக இனைக்கப்பட்டிருக்கக் கூடுமென்பதால் இவை பயன்பாட்டில் இருந்தாலும் இங்கே பட்டியலிடப்பட்டிருக்கக்கூடும் என்பதை கவனத்தில் கொள்ளவும்.',
 'unusedcategoriestext' => 'பின்வரும் பகுப்புகள் உருவாக்கப்பட்டுள்ளன எனினும் வேறு எந்தப் பக்கமோ அல்லது பகுப்போ இதைப் பயன்படுத்தவில்லை.',
 'notargettitle' => 'இலக்கு இல்லை',
 'notargettext' => 'நீங்கள் இந்தச் செயலை எந்தப் பயனர் அல்லது பக்கம் தொடர்பில் செய்வது என்பதைக் குறிப்பிடவில்லை.',
@@ -2585,7 +2586,7 @@ $1',
 'allmessagesdefault' => 'இயல்பிருப்பு உரை',
 'allmessagescurrent' => 'தற்போதைய உரை',
 'allmessagestext' => 'இது மீடியாவிக்கி பெயர்வெளியிலுள்ள எல்லா முறைமை தகவல்களினதும் பட்டியலாகும்.
-மொழிபெயர்ப்பில் உதவ விரும்பின் அருள்கூர்ந்து [//translatewiki.net பீட்டாவிக்கி], [//www.mediawiki.org/wiki/Localisation மீடியாவிக்கி மொழியாக்க]  தளங்களுக்குச் செல்லவும்.',
+மொழிபெயர்ப்பில் உதவ விரும்பின் அருள்கூர்ந்து [//translatewiki.net பீட்டாவிக்கி], [https://www.mediawiki.org/wiki/Localisation மீடியாவிக்கி மொழியாக்க]  தளங்களுக்குச் செல்லவும்.',
 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' முடக்கப்பட்டுள்ளப் படியால் இப்பக்கததை பயன்படுத்த முடியாது.",
 'allmessages-filter-legend' => 'வடிகட்டி',
 'allmessages-filter' => 'தனிப்பயனாக்கத்தின்படி வடிகட்டு.',
@@ -2735,7 +2736,7 @@ $1',
 'tooltip-undo' => '"பின்வாங்கு" என்பது முன்பு செய்த தொகுப்புக்களை இல்லாது செய்கிறது. மேலும் தாங்கள் செய்த தொகுப்பினை முன்தோற்ற நிலைக்கு கொண்டுவந்து காட்டும். அது தங்களுக்குச் சிறுகுறிப்புப் பகுதியில் அதற்கான காரணத்தைக் கூற அனுமதிக்கிறது.',
 'tooltip-preferences-save' => 'விருப்பங்களை சேமி',
 'tooltip-summary' => 'குறுகிய சுருக்கத்தை உள்ளிடவும்.',
-'tooltip-iwiki' => '$1 - $2',
+'interlanguage-link-title' => '$1 - $2',
 
 # Metadata
 'notacceptable' => 'உங்களது சேவையாளர் வாசிக்க கூடிய விதத்தில் இந்த விக்கியால தரவுகளை வழங்க முடியாது.',
@@ -2846,7 +2847,7 @@ $1',
 'file-nohires' => 'இதைவிட அளவில் பெரிய படிமம் இல்லை.',
 'svg-long-desc' => 'SVG கோப்பு, பெயரளவில் $1 × $2 பிக்சல்கள், கோப்பு அளவு: $3',
 'svg-long-error' => 'செல்லாத SVG கோப்பு: $1',
-'show-big-image' => 'à®®à¯\81à®´à¯\81 à®\85ளவிலான à®ªà®\9fிமமà¯\8d',
+'show-big-image' => 'à®®à¯\82லà®\95à¯\8dà®\95à¯\8bபà¯\8dபà¯\81',
 'show-big-image-preview' => 'இந்த முன்னோட்டத்தின் அளவு:  $1 .',
 'show-big-image-other' => 'மற்ற  {{PLURAL:$2|பிரிதிறன்|பிரிதிறன்கள்}}:  $1 .',
 'show-big-image-size' => '$1 × $2 படப்புள்ளிகள்',
@@ -3301,7 +3302,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'இக்கோப்பை வெளி மென்பொருள் கொண்டு தொகுக்க',
-'edit-externally-help' => 'மேலும் தகவல்களுக்கு [//www.mediawiki.org/wiki/Manual:External_editors அமைப்பு அறிவுறுத்தல்கள்] பக்கத்தைப் பார்க்கவும்.',
+'edit-externally-help' => 'மேலும் தகவல்களுக்கு [https://www.mediawiki.org/wiki/Manual:External_editors அமைப்பு அறிவுறுத்தல்கள்] பக்கத்தைப் பார்க்கவும்.',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'அனைத்து',
@@ -3474,7 +3475,7 @@ $5
 'version-hook-subscribedby' => 'பயன்பாடு',
 'version-version' => '(பதிப்பு $1)',
 'version-license' => 'அனுமதி',
-'version-poweredby-credits' => "இந்த் விக்கி '''[//www.mediawiki.org/ MediaWiki]''' இதன் மூலம் வழங்கப்படுகிறது, காப்புரிமை © 2001-$1 $2.",
+'version-poweredby-credits' => "இந்த் விக்கி '''[https://www.mediawiki.org/ MediaWiki]''' இதன் மூலம் வழங்கப்படுகிறது, காப்புரிமை © 2001-$1 $2.",
 'version-poweredby-others' => 'பிறர்',
 'version-license-info' => 'மீடியாவிக்கியானது இலவச மென்பொருள்.இதை நீங்கள் மற்றவர்களுக்கு கொடுப்பது அல்லது திருத்தம் செய்வது இலவச மென்பொருள் அறக்கட்டளை வழங்கிய   GNUவின் பொது உரிம விதிகளுக்குட்பட்டது;உரிமத்தின் இரண்டாவது பதிப்பு அல்லது அதற்கு மேற்பட்ட பதிப்பு (உங்கள் விருப்பத்திற்க்கேற்றவாறு).
 மீடியா உபயோகப்படக்கூடியது என்ற நம்பிக்கையில் வெளியிடப்பட்டுள்ளது, ஆனால் இதற்க்கு உத்தரவாதம் கிடையாது.மேலும் வணிகத்தன்மைக்கான அல்லது ஒரு குறிப்பிட்ட செயலுக்காகவும் உத்தரவாதம் கிடையாது.மேலும் விவரங்களுக்கு GNU பொது உரிமத்தை பார்க்கவும்.
@@ -3505,8 +3506,7 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'சிறப்புப் பக்கங்கள்',
-'specialpages-note' => '----
- * சராசரி சிறப்புப் பக்கங்கள்.
+'specialpages-note' => ' * சராசரி சிறப்புப் பக்கங்கள்.
  * <span class="mw-specialpagerestricted">வரையறுத்த சிறப்புப் பக்கங்கள்.</span>',
 'specialpages-group-maintenance' => 'பராமரிப்பு அறிக்கைகள்',
 'specialpages-group-other' => 'ஏனைய சிறப்புப் பக்கங்கள்',
@@ -3619,7 +3619,7 @@ $5
 'logentry-newusers-newusers' => 'பயனர் கணக்கு $1 உருவாக்கப்பட்டது',
 'logentry-newusers-create' => '$1 ஒரு புதிய பயனர் கணக்கை உருவாக்கியுள்ளார்.',
 'logentry-newusers-create2' => '$3 பயனர் கணக்கினை $1 உருவாக்கினார்',
-'logentry-newusers-autocreate' => 'à®\95ணà®\95à¯\8dà®\95à¯\81  $1   à®¤à®¾à®©à®¾à®\95    உருவாக்கப்பட்டது',
+'logentry-newusers-autocreate' => 'பயணரà¯\8d à®\95ணà®\95à¯\8dà®\95à¯\81 $1 à®¤à®¾à®©à®¾à®\95 உருவாக்கப்பட்டது',
 'rightsnone' => '(எதுவுமில்லை)',
 
 # Feedback
index 238be25..f36a2f5 100644 (file)
@@ -965,7 +965,7 @@ $messages = array(
 
 # External editor support
 'edit-externally' => 'ಬಾಹ್ಯ(ಪಿದಯಿದ) ತಂತ್ರಾಶೊನು ಉಪಯೋಗ ಮಲ್ತ್’ದ್ ಇಂದೆನ್ ಸಂಪಾದನೆ ಮಲ್ಪುಲೆ',
-'edit-externally-help' => 'ನನಲ ಮಾಹಿತಿಗ್ [//www.mediawiki.org/wiki/Manual:External_editors ಸೆಟ್-ಅಪ್ ನಿರ್ದೇಶನೊಲೆನ್] ತೂಲೆ.',
+'edit-externally-help' => 'ನನಲ ಮಾಹಿತಿಗ್ [https://www.mediawiki.org/wiki/Manual:External_editors ಸೆಟ್-ಅಪ್ ನಿರ್ದೇಶನೊಲೆನ್] ತೂಲೆ.',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ಪೂರ',
index af34836..65ebbba 100644 (file)
@@ -166,7 +166,7 @@ $messages = array(
 'tog-minordefault' => 'ప్రత్యేకంగా తెలుపనంతవరకూ నా మార్పులను చిన్న మార్పులుగా గుర్తించు',
 'tog-previewontop' => 'వ్యాసం మార్పుల మునుచూపు సవరించు పెట్టె పైన చూపు',
 'tog-previewonfirst' => 'మొదటి  దిద్దుబాటు చేసినపుడు వ్యాసపు మునుచూపు చూపించు',
-'tog-nocache' => 'విహారిణిలో పుటల  స్థానికనకలును(కాషింగు) అచేతనం',
+'tog-nocache' => 'విహారిణిలో పుటల  స్థానికనకలును(కాషింగు) అచేతనం చేయి',
 'tog-enotifwatchlistpages' => 'నా వీక్షణాజాబితా లోని పేజీ లేదా దస్త్రం మారినపుడు నాకు ఈ-మెయిలు పంపు',
 'tog-enotifusertalkpages' => 'నా చర్చా పేజీలో మార్పులు జరిగినపుడు నాకు ఈ-మెయిలు పంపు',
 'tog-enotifminoredits' => 'పేజీలు మరియు దస్త్రాలకు జరిగే చిన్న మార్పులకు కూడా నాకు ఈ-మెయిలును పంపు',
@@ -530,7 +530,7 @@ $2',
 'titleprotected' => "సభ్యులు [[User:$1|$1]] ఈ పేజీని సృష్టించనివ్వకుండా నిరోదిస్తున్నారు.
 అందుకు ఇచ్చిన కారణం: ''$2''.",
 'exception-nologin' => 'లోనికి ప్రవేశించిలేరు',
-'exception-nologin-text' => 'à°\88 à°µà°¿à°\95à±\80à°²à±\8b à°\88 à°ªà±\87à°\9cà±\80 à°²à±\87దా à°ªà°¨à°¿à°\95à°¿ à°®à±\80à°°à±\81 à°¤à°ªà±\8dపనిసరిà°\97à°¾ à°ªà±\8dà°°à°µà±\87శిà°\82à°\9aà°¿à°µà±\81à°\82డాలి.',
+'exception-nologin-text' => 'à°\88 à°ªà±\87à°\9cà±\80ని à°\9aà±\82డడానిà°\95à°¿ à°²à±\87దా à°\88 à°\9aà°°à±\8dయనà±\81 à°\9aà±\86à°¯à±\8dయడానిà°\95à°¿ à°¦à°¯à°\9aà±\87సి [[Special:Userlogin|à°ªà±\8dà°°à°µà±\87శిà°\82à°\9aà°\82à°¡à°¿]].',
 
 # Virus scanner
 'virus-badscanner' => "తప్పుడు స్వరూపణం: తెలియని వైరస్ స్కానర్: ''$1''",
@@ -552,6 +552,7 @@ $2',
 'yourname' => 'వాడుకరి పేరు:',
 'userlogin-yourname' => 'వాడుకరి పేరు',
 'userlogin-yourname-ph' => 'మీ వాడుకరి పేరును ఇవ్వండి',
+'createacct-another-username-ph' => 'మీ వాడుకరి పేరును ప్రవేశపెట్టండి',
 'yourpassword' => 'సంకేతపదం:',
 'userlogin-yourpassword' => 'సంకేతపదం',
 'userlogin-yourpassword-ph' => 'మీ సంకేతపదాన్ని ఇవ్వండి',
@@ -580,7 +581,7 @@ $2',
 'gotaccount' => 'ఇప్పటికే మీకు ఖాతా ఉందా? $1.',
 'gotaccountlink' => 'ప్రవేశించండి',
 'userlogin-resetlink' => 'మీ ప్రవేశ వివరాలను మరచిపోయారా?',
-'userlogin-resetpassword-link' => 'à°®à±\80 à°¦à°¾à°\9fà±\81మాà°\9fà°¨à±\81 à°®à°¾à°°à±\8dà°\9aà±\81à°\95à±\8bà°\82à°¡à°¿',
+'userlogin-resetpassword-link' => 'à°®à±\80 à°¸à°\82à°\95à±\87తపదానà±\8dని à°®à°°à±\8dà°\9aà°¿à°ªà±\8bయారా?',
 'helplogin-url' => 'Help:ప్రవేశించడం',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|ప్రవేశించడానికి సహాయం]]',
 'createacct-join' => 'మీ సమాచారాన్ని క్రింద ఇవ్వండి.',
@@ -1031,7 +1032,7 @@ $3 చెప్పిన కారణం: ''$2''",
 * అనుచితమైన వ్యక్తిగత సమాచారం
 * "ఇంటి చిరునామాలు, టెలిఫోను నంబర్లు, సోషల్ సెక్యూరిటీ నంబర్లు, వగైరాలు"',
 'revdelete-legend' => 'సందర్శక నిబంధనలు అమర్చు',
-'revdelete-hide-text' => 'à°\95à±\82à°°à±\8dà°ªà±\81 పాఠ్యం',
+'revdelete-hide-text' => 'à°ªà±\81à°¨à°\83పరిశà±\80లన పాఠ్యం',
 'revdelete-hide-image' => 'ఫైలులోని విషయాన్ని దాచు',
 'revdelete-hide-name' => 'చర్యను, లక్ష్యాన్నీ దాచు',
 'revdelete-hide-comment' => 'దిద్దుబాటు వ్యాఖ్యను దాచు',
@@ -1187,7 +1188,6 @@ $1",
 'mypreferences' => 'అభిరుచులు',
 'prefs-edits' => 'దిద్దుబాట్ల సంఖ్య:',
 'prefsnologin' => 'లాగిన్‌ అయిలేరు',
-'prefsnologintext' => 'వాడుకరి అభిరుచులను మార్చుకోడానికి, మీరు <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} లోనికి ప్రవేశించి]</span> ఉండాలి.',
 'changepassword' => 'సంకేతపదాన్ని మార్చండి',
 'prefs-skin' => 'అలంకారం',
 'skin-preview' => 'మునుజూపు/సరిచూడు',
@@ -1326,7 +1326,7 @@ $1",
 'group-bot' => 'బాట్‌లు',
 'group-sysop' => 'నిర్వాహకులు',
 'group-bureaucrat' => 'అధికారులు',
-'group-suppress' => 'మార్పులను పూర్తిగా కనిపించకుండాచేయుట',
+'group-suppress' => ' పూర్తి తొలగింపుదారులు',
 'group-all' => '(అందరూ)',
 
 'group-user-member' => '{{GENDER:$1|వాడుకరి}}',
@@ -1334,14 +1334,14 @@ $1",
 'group-bot-member' => '{{GENDER:$1|బాట్}}',
 'group-sysop-member' => '{{GENDER:$1|నిర్వాహకుడు|నిర్వాహకురాలు}}',
 'group-bureaucrat-member' => '{{GENDER:$1|అధికారి|అధికారిణి}}',
-'group-suppress-member' => '{{GENDER:$1|మార్పులను పూర్తిగా కనిపించకుండాచేయుట}}',
+'group-suppress-member' => 'పూర్తి   తొలగింపు',
 
 'grouppage-user' => '{{ns:project}}:వాడుకరులు',
 'grouppage-autoconfirmed' => '{{ns:project}}:ఆటోమాటిగ్గా నిర్ధారించబడిన వాడుకరులు',
 'grouppage-bot' => '{{ns:project}}:బాట్లు',
 'grouppage-sysop' => '{{ns:project}}:నిర్వాహకులు',
 'grouppage-bureaucrat' => '{{ns:project}}:అధికార్లు',
-'grouppage-suppress' => '{{ns:project}}:మారà±\8dà°ªà±\81లనà±\81 à°ªà±\82à°°à±\8dతిà°\97à°¾ à°\95నిపిà°\82à°\9aà°\95à±\81à°\82à°¡à°¾à°\9aà±\87à°¯à±\81à°\9f',
+'grouppage-suppress' => '{{ns:project}}:à°ªà±\82à°°à±\8dతి à°¤à±\8aà°²à°\97à°¿à°\82à°ªà±\81',
 
 # Rights
 'right-read' => 'పేజీలు చదవడం',
@@ -1902,7 +1902,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'nopagetext' => 'మీరు అడిగిన పేజీ లేదు',
 'pager-newer-n' => '{{PLURAL:$1|1 కొత్తది|$1 కొత్తవి}}',
 'pager-older-n' => '{{PLURAL:$1|1 పాతది|$1 పాతవి}}',
-'suppress' => 'మార్పులను పూర్తిగా కనిపించకుండాచేయుట',
+'suppress' => ' పూర్తి తొలగింపు',
 'querypage-disabled' => 'పనితీరు కారణాల వలన, ఈ ప్రత్యేకపేజీని అశక్తం చేసాం.',
 
 # Book sources
@@ -2579,7 +2579,7 @@ $1',
 'allmessagesdefault' => 'అప్రమేయ సందేశపు పాఠ్యం',
 'allmessagescurrent' => 'ప్రస్తుత పాఠ్యం',
 'allmessagestext' => 'మీడియావికీ పేరుబరిలో ఉన్న అంతరవర్తి సందేశాల జాబితా ఇది.
-సాధారణ మీడియావికీ స్థానికీకరణకి మీరు తోడ్పడాలనుకుంటే, దయచేసి [//www.mediawiki.org/wiki/Localisation మీడియావికీ స్థానికీకరణ] మరియు [//translatewiki.net ట్రాన్స్&zwnj;లేట్&zwnj;వికీ.నెట్] సైట్లను చూడండి.',
+సాధారణ మీడియావికీ స్థానికీకరణకి మీరు తోడ్పడాలనుకుంటే, దయచేసి [https://www.mediawiki.org/wiki/Localisation మీడియావికీ స్థానికీకరణ] మరియు [//translatewiki.net ట్రాన్స్&zwnj;లేట్&zwnj;వికీ.నెట్] సైట్లను చూడండి.',
 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' అన్నది అచేతనం చేసి ఉన్నందువల్ల ఈ పేజీని వాడలేరు.",
 'allmessages-filter-legend' => 'వడపోత',
 'allmessages-filter' => 'కస్టమైజేషను స్థితిని బట్టి వడకట్టు:',
@@ -3249,7 +3249,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'బయటి అప్లికేషను వాడి ఈ ఫైలును మార్చు',
-'edit-externally-help' => '(మరింత సమాచారం కొరకు [//www.mediawiki.org/wiki/Manual:External_editors సెటప్‌ సూచనల]ని చూడండి)',
+'edit-externally-help' => '(మరింత సమాచారం కొరకు [https://www.mediawiki.org/wiki/Manual:External_editors సెటప్‌ సూచనల]ని చూడండి)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'అన్నీ',
@@ -3415,7 +3415,7 @@ $5
 'version-hook-subscribedby' => 'ఉపయోగిస్తున్నవి',
 'version-version' => '(సంచిక $1)',
 'version-license' => 'లైసెన్సు',
-'version-poweredby-credits' => "ఈ వికీ  '''[//www.mediawiki.org/ మీడియావికీ]'''చే శక్తిమంతం, కాపీహక్కులు  © 2001-$1 $2.",
+'version-poweredby-credits' => "ఈ వికీ  '''[https://www.mediawiki.org/ మీడియావికీ]'''చే శక్తిమంతం, కాపీహక్కులు  © 2001-$1 $2.",
 'version-poweredby-others' => 'ఇతరులు',
 'version-license-info' => 'మీడియావికీ అన్నది స్వేచ్ఛా మృదూపకరణం; మీరు దీన్ని పునఃపంపిణీ చేయవచ్చు మరియు/లేదా ఫ్రీ సాఫ్ట్&zwnj;వేర్ ఫౌండేషన్ ప్రచురించిన గ్నూ జనరల్ పబ్లిక్ లైసెస్సు వెర్షను 2 లేదా (మీ ఎంపిక ప్రకారం) అంతకంటే కొత్త వెర్షను యొక్క నియమాలకు లోబడి మార్చుకోవచ్చు.
 
@@ -3450,8 +3450,7 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'ప్రత్యేక పేజీలు',
-'specialpages-note' => '----
-* మామూలు ప్రత్యేక పుటలు.
+'specialpages-note' => '* మామూలు ప్రత్యేక పుటలు.
 * <strong class="mw-specialpagerestricted">నియంత్రిత ప్రత్యేక పుటలు.</strong>
 * <span class="mw-specialpagecached">Cached ప్రత్యేక పుటలు (పాతబడి ఉండొచ్చు).</span>',
 'specialpages-group-maintenance' => 'నిర్వహణా నివేదికలు',
index 51a6d73..f1e717e 100644 (file)
@@ -915,7 +915,7 @@ Ligasaun seluk iha liña - ne'e pájina sira iha ne'ebé bele inklui imajen aat.
 'exif-urgency-high' => 'Aas ($1)',
 
 # External editor support
-'edit-externally-help' => "(Haree [//www.mediawiki.org/wiki/Manual:External_editors iha ne'e] ba informasaun barak liu)",
+'edit-externally-help' => "(Haree [https://www.mediawiki.org/wiki/Manual:External_editors iha ne'e] ba informasaun barak liu)",
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'hotu',
index f7ea5cd..c4610a0 100644 (file)
@@ -852,7 +852,6 @@ $1',
 'mypreferences' => 'Танзимот',
 'prefs-edits' => 'Шумораи вироишҳо:',
 'prefsnologin' => 'Ба систем ворид нашудаед',
-'prefsnologintext' => 'Барои танзими тарҷиҳоти корбарӣ бояд [[Special:UserLogin|вуруд ба систем шавед]].',
 'changepassword' => 'Иваз намудани калимаи убур',
 'prefs-skin' => 'Пӯст',
 'skin-preview' => 'Пешнамоиш',
@@ -1829,7 +1828,7 @@ $1',
 'allmessagesdefault' => 'Матни қарордодӣ',
 'allmessagescurrent' => 'Матни кунунӣ',
 'allmessagestext' => 'Ин феҳристи паёмҳои системавии дастрас дар фазои номи MediaWiki мебошад.
-Агар майли ҳиссагузорӣ карданро ба маҳалликунонии MediaWiki доред, пас лутан саҳифаҳои [//www.mediawiki.org/wiki/Localisation Маҳалликунонии MediaWiki] ва [//translatewiki.net translatewiki.net] нигаред.',
+Агар майли ҳиссагузорӣ карданро ба маҳалликунонии MediaWiki доред, пас лутан саҳифаҳои [https://www.mediawiki.org/wiki/Localisation Маҳалликунонии MediaWiki] ва [//translatewiki.net translatewiki.net] нигаред.',
 'allmessagesnotsupportedDB' => "Аз ин саҳифа наметавон истифода бурд, чун '''\$wgUseDatabaseMessages''' ғайрифаъол гардонида шудааст.",
 'allmessages-filter-legend' => 'Филтр',
 'allmessages-filter-all' => 'Ҳама',
@@ -2304,7 +2303,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'Ин файлро бо барномаи беруна таҳрир кунед',
-'edit-externally-help' => '(Барои иттилооти бештар [//www.mediawiki.org/wiki/Manual:External_editors роҳнамои танзимотро оиди вироишгарони беруна] нигаред)',
+'edit-externally-help' => '(Барои иттилооти бештар [https://www.mediawiki.org/wiki/Manual:External_editors роҳнамои танзимотро оиди вироишгарони беруна] нигаред)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ҳама',
index 40debf6..e7f97ae 100644 (file)
@@ -1615,7 +1615,7 @@ Dar holati oxir şumo metavoned pajvandero istifoda bared, namuna. [[{{#Special:
 'allmessagesdefault' => 'Matni qarordodī',
 'allmessagescurrent' => 'Matni kununī',
 'allmessagestext' => 'In fehristi pajomhoi sistemaviji dastras dar fazoi nomi MediaWiki meboşad.
-Agar majli hissaguzorī kardanro ba mahallikunoniji MediaWiki dored, pas lutan sahifahoi [//www.mediawiki.org/wiki/Localisation Mahallikunoniji MediaWiki] va [//translatewiki.net translatewiki.net] nigared.',
+Agar majli hissaguzorī kardanro ba mahallikunoniji MediaWiki dored, pas lutan sahifahoi [https://www.mediawiki.org/wiki/Localisation Mahallikunoniji MediaWiki] va [//translatewiki.net translatewiki.net] nigared.',
 'allmessagesnotsupportedDB' => "Az in sahifa nametavon istifoda burd, cun '''\$wgUseDatabaseMessages''' ƣajrifa'ol gardonida şudaast.",
 'allmessages-filter-legend' => 'Filtr',
 'allmessages-filter-all' => 'Hama',
@@ -2088,7 +2088,7 @@ Faqat satrhoe, ki bo * şurū' şavand ba nazar girifta meşavand. Avvalin pajva
 
 # External editor support
 'edit-externally' => 'In fajlro bo barnomai beruna tahrir kuned',
-'edit-externally-help' => '(Baroi ittilooti beştar [//www.mediawiki.org/wiki/Manual:External_editors rohnamoi tanzimotro oidi viroişgaroni beruna] nigared)',
+'edit-externally-help' => '(Baroi ittilooti beştar [https://www.mediawiki.org/wiki/Manual:External_editors rohnamoi tanzimotro oidi viroişgaroni beruna] nigared)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'hama',
index a0d9ec1..87fd1ff 100644 (file)
@@ -1293,7 +1293,6 @@ $1",
 'mypreferences' => 'การตั้งค่า',
 'prefs-edits' => 'จำนวนการแก้ไข:',
 'prefsnologin' => 'ไม่ได้ล็อกอิน',
-'prefsnologintext' => 'คุณต้อง<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ล็อกอิน]</span>ก่อนเพื่อตั้งค่าส่วนตัว',
 'changepassword' => 'เปลี่ยนรหัสผ่าน',
 'prefs-skin' => 'หน้าตา',
 'skin-preview' => 'แสดงตัวอย่าง',
@@ -2784,7 +2783,7 @@ $1',
 'allmessagesdefault' => 'ข้อความตามค่าตั้งต้น',
 'allmessagescurrent' => 'ข้อความปัจจุบัน',
 'allmessagestext' => 'นี่คือรายการข้อความของระบบที่อยู่ในเนมสเปซมีเดียวิกิ
-กรุณาอ่านหน้า[//www.mediawiki.org/wiki/Localisation เทศวิวัตน์ของมีเดียวิกิ] และ [//translatewiki.net translatewiki.net] ถ้าคุณอยากที่จะช่วยแปลข้อความของระบบมีเดียวิกิ',
+กรุณาอ่านหน้า[https://www.mediawiki.org/wiki/Localisation เทศวิวัตน์ของมีเดียวิกิ] และ [//translatewiki.net translatewiki.net] ถ้าคุณอยากที่จะช่วยแปลข้อความของระบบมีเดียวิกิ',
 'allmessagesnotsupportedDB' => "หน้านี้ไม่สามารถใช้งานได้เนื่องจาก '''\$wgUseDatabaseMessages''' ถูกระงับการใช้งาน",
 'allmessages-filter-legend' => 'กรอง',
 'allmessages-filter' => 'กรองตามสถานะที่เลือก:',
@@ -3442,7 +3441,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'แก้ไขไฟล์นี้โดยใช้ซอฟต์แวร์ตัวอื่น',
-'edit-externally-help' => '(ดู[//www.mediawiki.org/wiki/Manual:External_editors วิธีการตั้งค่า]สำหรับข้อมูลเพิ่มเติม)',
+'edit-externally-help' => '(ดู[https://www.mediawiki.org/wiki/Manual:External_editors วิธีการตั้งค่า]สำหรับข้อมูลเพิ่มเติม)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ทั้งหมด',
@@ -3645,7 +3644,7 @@ $5
 'version-hook-subscribedby' => 'สนับสนุนโดย',
 'version-version' => '(รุ่น $1)',
 'version-license' => 'สัญญาอนุญาต',
-'version-poweredby-credits' => "วิกินี้จัดทำโดย '''[//www.mediawiki.org/ MediaWiki]''', สงวนลิขสิทธิ์ © 2001-$1 โดย $2",
+'version-poweredby-credits' => "วิกินี้จัดทำโดย '''[https://www.mediawiki.org/ MediaWiki]''', สงวนลิขสิทธิ์ © 2001-$1 โดย $2",
 'version-poweredby-others' => 'ผู้อื่น',
 'version-poweredby-translators' => 'ผู้แปล translatewiki.net',
 'version-license-info' => 'มีเดียวิกิเป็นซอฟต์แวร์เสรี คุณสามารถแจกจ่าย และ/หรือ แก้ไขได้ภายใต้เงื่อนไขแห่งสัญญาอนุญาตสาธารณะทั่วไปของกนูตามที่เผยแพร่โดยมูลนิธิซอฟต์แวร์เสรี ไม่ว่ารุ่นที่ 2 แห่งสัญญาอนุญาต หรือรุ่นภายหลังอื่นใด (ตามที่คุณเลือก)
@@ -3684,8 +3683,7 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'หน้าพิเศษ',
-'specialpages-note' => '----
-* หน้าพิเศษปกติ
+'specialpages-note' => '* หน้าพิเศษปกติ
 * <span class="mw-specialpagerestricted">หน้าพิเศษที่ถูกจำกัด</span>',
 'specialpages-group-maintenance' => 'รายงานการเก็บกวาด',
 'specialpages-group-other' => 'หน้าพิเศษอื่น ๆ',
index 7c7b5e1..03eac79 100644 (file)
@@ -1001,7 +1001,6 @@ Emma olaryň {{SITENAME}} indeksleriniň möwriti geçen bolmagy mümkindir.',
 'mypreferences' => 'Ileri tutmalar',
 'prefs-edits' => 'Özgerdiş sany:',
 'prefsnologin' => 'Sessiýa açmansyňyz',
-'prefsnologintext' => 'Ulanyjy ileri tutmalaryny üýtgetmek üçin <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} sessiýa açmagyňyz gerek]</span>.',
 'changepassword' => 'Paroly üýtget',
 'prefs-skin' => 'Bezeg',
 'skin-preview' => 'Deslapky syn',
@@ -2327,7 +2326,7 @@ Ikinji ýagdaýy saýlap alan halatyňyzda, ýörite bir çykgyt hem ulanyp bile
 'allmessagesdefault' => 'Gaýybana habarlaşyk teksti',
 'allmessagescurrent' => 'Häzirki habarlaşyk teksti',
 'allmessagestext' => 'Bu sanaw MediaWiki at giňişliginde bar bolan ulgam habarlaşyklarynyň sanawydyr.
-Umumy MediaWiki lokalizasiýasyna goşan goşmak isleýän bolsaňyz, [//www.mediawiki.org/wiki/Localisation MediaWiki lokalizasiýasy] we [//translatewiki.net translatewiki.net] sahypalaryna baryp görmegiňizi haýyş edýäris.',
+Umumy MediaWiki lokalizasiýasyna goşan goşmak isleýän bolsaňyz, [https://www.mediawiki.org/wiki/Localisation MediaWiki lokalizasiýasy] we [//translatewiki.net translatewiki.net] sahypalaryna baryp görmegiňizi haýyş edýäris.',
 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' ýapykdygy zerarly bu sahypany ulanyp bolmaýar.",
 'allmessages-filter-legend' => 'Filtr',
 'allmessages-filter' => 'Üýtgediş statusy boýunça filtr:',
@@ -2838,7 +2837,7 @@ Ondan soňraky çykgyt(lar) kadadan çykma hökmünde kabul edilýär, meselem:
 
 # External editor support
 'edit-externally' => 'Bu faýly daşarky programmalary ulanyp redaktirläň',
-'edit-externally-help' => '(Has köp maglumat üçin metadaky [//www.mediawiki.org/wiki/Manual:External_editors gurmak boýunça gollanma] sahypasyna göz aýlaň)',
+'edit-externally-help' => '(Has köp maglumat üçin metadaky [https://www.mediawiki.org/wiki/Manual:External_editors gurmak boýunça gollanma] sahypasyna göz aýlaň)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'Ählisini görkez',
@@ -3000,7 +2999,7 @@ Bolanyňyzdan soňra "{{int:Watchlistedit-raw-submit}}" düwmesine basyň.
 'version-hook-subscribedby' => 'Abuna ýazylan',
 'version-version' => '(Wersiýa $1)',
 'version-license' => 'Ygtyýarnama',
-'version-poweredby-credits' => "Bu wiki '''[//www.mediawiki.org/ MediaWiki]''' arkaly üpjün edilýär, awtorlyk hukugy © 2001-$1 $2.",
+'version-poweredby-credits' => "Bu wiki '''[https://www.mediawiki.org/ MediaWiki]''' arkaly üpjün edilýär, awtorlyk hukugy © 2001-$1 $2.",
 'version-poweredby-others' => 'beýlekiler',
 'version-license-info' => 'MediaWiki erkin programmadyr; MediaWiki-ni Erkin programma fondy tarapyndan çazp edilen GNU General Public License lisenziýasynyň ikini wersiýasynyň ýa-da (islegiňize görä) has täzeki bir wersiýasynyň şertlerine laýyklykda täzeden paýlap we/ýa-da üýtgedip bilersiňiz.
 
@@ -3023,8 +3022,7 @@ Bu programmanyň ýany bilen siz [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU General P
 
 # Special:SpecialPages
 'specialpages' => 'Ýörite sahypalar',
-'specialpages-note' => '----
-* Adaty ýörite sahypalar.
+'specialpages-note' => '* Adaty ýörite sahypalar.
 * <strong class="mw-specialpagerestricted">Çäklendirilen ýörite sahypalar.</strong>',
 'specialpages-group-maintenance' => 'Tehniki abatlaýyş hasabatlary',
 'specialpages-group-other' => 'Başga ýörite sahypalar',
index 028870d..4d45f93 100644 (file)
@@ -12,6 +12,7 @@
  * @author Felipe Aira
  * @author Jojit fb
  * @author Kaganer
+ * @author Namayan
  * @author Sky Harbor
  * @author tl.wikipedia.org sysops
  * @author לערי ריינהארט
@@ -1237,7 +1238,6 @@ Subuking lagyan ng unlapi/paunang ''all:'' upang hanapin ang lahat ng mga nialal
 'mypreferences' => 'Mga nais',
 'prefs-edits' => 'Bilang ng mga pagbabago:',
 'prefsnologin' => 'Hindi nakalagda/nakatala',
-'prefsnologintext' => 'Kailangan mong <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} lumagda/tumala]</span> para makapagtakda ng mga kagustuhang ng tagagamit.',
 'changepassword' => 'Baguhin ang hudyat',
 'prefs-skin' => 'Pabalat',
 'skin-preview' => 'Unang tingin',
@@ -1654,9 +1654,9 @@ bumalik at ikarga ang talaksan na ito sa bagong pangalan. [[File:$1|thumb|center
 'uploadscripted' => 'Naglalaman ang talaksan na ito ng HTML o kodigong script na maaaring mali ang pagkaintindi ng isang web browser.',
 'uploadvirus' => 'Naglalaman ng virus ang talaksan! Mga detalye: $1',
 'uploadjava' => 'Ang talaksan ay isang talaksang ZIP na naglalaman ng isang .klase ng talaksan. na Java.  Hindi pinapayagan ang pagkakarga ng mga talaksang Java, dahil nakasasanhi sila ng mga paglilimita ng kaligtasan na kailangang lampasan.',
-'upload-source' => 'Pinagmulang talaksan',
+'upload-source' => 'Batayang talaksan',
 'sourcefilename' => 'Pangalan ng panggagalingang talaksan:',
-'sourceurl' => 'Pinagmulang URL:',
+'sourceurl' => 'Batayang URL:',
 'destfilename' => 'Pangalan ng patutunguhang talaksan:',
 'upload-maxfilesize' => 'Pinakamataas na sukat ng talaksan: $1',
 'upload-description' => 'Paglalarawan ng talaksan',
@@ -2029,12 +2029,11 @@ Pakitandaan lamang na ang iba mga websayt ay maaaring nakakawing sa isang talaks
 'querypage-disabled' => 'Hindi pinagagana ang natatanging pahinang ito para sa mga dahilan ng pagganap.',
 
 # Book sources
-'booksources' => 'Mapagkukuhanang mga aklat',
+'booksources' => 'Mga mapagkukunang aklat',
 'booksources-search-legend' => 'Maghanap ng mapagkukunang aklat',
 'booksources-isbn' => 'ISBN:',
-'booksources-go' => 'Punta',
-'booksources-text' => 'Matatagpuan sa ibaba ang mga tala ng mga ugnay sa ibang mga websayt na nagbebenta ng bago at nagamit na mga aklat, at maaring mayroon din
-na iba pang impormasyon tungkol sa mga aklat na hinahanap mo:',
+'booksources-go' => 'Puntahan',
+'booksources-text' => 'Matatagpuan sa ibaba ang isang tala ng mga kawil patungo sa ibang mga website na nagtitinda ng mga bago at gamit nang aklat, at maaaring may iba pang impormasyon ito tungkol sa mga aklat na hinahanap mo:',
 'booksources-invalid-isbn' => 'Tila mukhang hindi yata katanggap-tanggap ang ibinigay na ISBN; pakisuri kung may mga kamalian ang pagkakasip/pagkakakopya mula sa orihinal na pinagmulan.',
 
 # Special:Log
@@ -2250,7 +2249,7 @@ Tugon at karagdagang tulong:
 'excontentauthor' => "ang nilalaman ay: '$1' (at ang tanging nag-ambag ay si '[[Special:Contributions/$2|$2]]')",
 'exbeforeblank' => "nilalaman bago nablangko: '$1'",
 'exblank' => 'walang laman ang pahina',
-'delete-confirm' => 'Burahin "$1"',
+'delete-confirm' => 'Kaltasin ang "$1"',
 'delete-legend' => 'Burahin',
 'historywarning' => "'''Babala''': May kasaysayan ang pahinang buburahin mo na tinatayang may $1 {{PLURAL:$1|pagbabago|mga pagbabago}}:",
 'confirmdeletetext' => 'Lubos mo nang buburahin ang pahinang ito pati ang kalahatan ng kasaysayan nito.
@@ -2593,7 +2592,8 @@ Tingnan ang [[Special:BlockList|talaan ng pagharang]] para sa lista ng kasalukuy
 'proxyblockreason' => 'Hinarang ang IP address mo dahil bukas na proxy ito. Makipag-ugnayan sa iyong tagabigay ng serbisyong Internet o suportang teknikal at ipaalam sa kanila itong seryesong suliranin sa seguridad.',
 'sorbs' => 'DNSBL',
 'sorbsreason' => 'Nakalista ang IP address mo bilang isang bukas na proxy sa DNSBL na ginagamit ng sayt na ito.',
-'sorbs_create_account_reason' => 'Nakalista ang IP address mo bilang isang bukas na proxy sa DNSBL na ginagamit ng sayt na ito. Hindi ka makakalikha ng akawnt',
+'sorbs_create_account_reason' => 'Nakatala ang iyong IP address bilang open proxy sa DNSBL na ginagamit ng {{SITENAME}}.
+Hindi ka makakalikha ng account',
 'cant-block-while-blocked' => 'Hindi mo mahahadlangan/mahaharang ang ibang mga tagagamit habang hinahadlangan ka.',
 'cant-see-hidden-user' => 'Ang tagagamit na sinusubukan mong hadlangan ay naharang at naikubli na.
 Dahil wala kang karapatang magkubli ng tagagamit, hindi mo makikita o mababago ang paghadlang sa tagagamit.',
@@ -2741,8 +2741,8 @@ Sa huling kaso, maaari mong gumamit ng ungay, hal. [[{{#Special:Export}}/{{Media
 'allmessagesname' => 'Pangalan',
 'allmessagesdefault' => 'Tinakdang teksto',
 'allmessagescurrent' => 'Kasalukuyang teksto',
-'allmessagestext' => 'Isa itong talaan ng mga mensahe ng sistema na makukuha mula sa espasyo ng pangalang MediaWiki.
-Pakidalaw ang [//www.mediawiki.org/wiki/Localisation Lokalisasyong MediaWiki] at [//translatewiki.net translatewiki.net] kung ibig mong magambag sa heneriko o pangkalahatang lokalisasyon ng MediaWiki.',
+'allmessagestext' => 'Isa itong talaan ng mga mensahe ng sistema na makukuha mula sa namespace ng MediaWiki.
+Pakidalaw ang [https://www.mediawiki.org/wiki/Localisation Lokalisasyong MediaWiki] at [//translatewiki.net translatewiki.net] kung ibig mong magambag sa heneriko o pangkalahatang lokalisasyon ng MediaWiki.',
 'allmessagesnotsupportedDB' => "Hindi magagamit ang '''{{ns:special}}:AllMessages''' dahil hindi gumagana ang '''\$wgUseDatabaseMessages'''.",
 'allmessages-filter-legend' => 'Salain',
 'allmessages-filter' => 'Salain ayon sa katayuan ng pagbabagay:',
@@ -2773,7 +2773,7 @@ Pakidalaw ang [//www.mediawiki.org/wiki/Localisation Lokalisasyong MediaWiki] at
 'import-interwiki-text' => 'Pumili ng isang wiki at pamagat ng pahina na iaangkat.
 Mapapanatili ang mga petsa ng pagbabago at mga pangalan ng patnugot.
 Naitatala sa [[Special:Log/import|tala ng inangkat]] ang lahat ng mga transwiking aksyon para sa pag-angkat.',
-'import-interwiki-source' => 'Pinagmulang wiki/pahina:',
+'import-interwiki-source' => 'Batayang wiki/pahina:',
 'import-interwiki-history' => 'Kopyahin ang lahat ng mga bersyon ng kasaysayan para sa pahinang ito',
 'import-interwiki-templates' => 'Isama ang lahat ng mga suleras',
 'import-interwiki-submit' => 'Mag-angkat',
@@ -2905,7 +2905,7 @@ Maaari mong tingnan ang batayan nito.',
 
 # Stylesheets
 'common.css' => '/* Ang inilagay na CSS dito ay gagamitin para sa lahat ng mga pabalat */',
-'cologneblue.css' => "/* Ang Cascading Style Sheets na inilagay dito ay makakaapekto sa mga tagagamit ng pabalat na Bughaw na Kolown (''Cologne Blue'') */",
+'cologneblue.css' => '/* Ang Cascading Style Sheets na inilagay dito ay makakaapekto sa mga tagagamit ng pabalat na Cologne Blue */',
 'monobook.css' => '/* Ang CSS na inilagay dito ay makakaapekto sa mga tagagamit ng pabalat na Monobook */',
 'modern.css' => "/* Ang CSS na iniligay dito ay makakaapekto sa tagagamit ng Makabagong (''Modern'') pabalat */",
 'vector.css' => '/* Ang inilagay na CSS dito ay makakaapekto sa mga tagagamit ng pabalat na Vector */',
@@ -2918,7 +2918,7 @@ Maaari mong tingnan ang batayan nito.',
 
 # Scripts
 'common.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa lahat ng mga tagagamit ng bawat pahinang ikinarga. */',
-'cologneblue.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit ng pabalat na Cologne Blue o Bughaw na Kolown */',
+'cologneblue.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit ng pabalat na Cologne Blue */',
 'monobook.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit na gumagamit ng pabalat na MonoBook */',
 'modern.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit na gumagamit ng Modernong pabalat */',
 'vector.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit na gumagamit ng pabalat na Vector */',
@@ -2987,8 +2987,8 @@ Maaaring dahil ito sa isang kawing sa isang nakatalang hinarang dahil di-kinaisn
 'pageinfo-templates' => '{{PLURAL:$1|Suleras|Mga suleras}} ($1) na nasa transklusyon (kasama sa maraming mga lugar)',
 
 # Skin names
-'skinname-cologneblue' => 'Bughaw na Kolown',
-'skinname-monobook' => 'MonoAklat ("isang aklat")',
+'skinname-cologneblue' => 'Cologne Blue',
+'skinname-monobook' => 'MonoBook',
 'skinname-modern' => 'Makabago (Moderno)',
 'skinname-vector' => 'Vector',
 
@@ -3866,7 +3866,7 @@ Maaari mo ring [[Special:EditWatchlist|gamitin ang pangkaraniwang pampatnugot]].
 'version-version' => '(Bersyon $1)',
 'version-svn-revision' => '(r$2)',
 'version-license' => 'Lisensiya',
-'version-poweredby-credits' => "Ang wiking ito ay pinapatakbo ng '''[//www.mediawiki.org/ MediaWiki]''', karapatang-ari © 2001-$1 $2.",
+'version-poweredby-credits' => "Ang wiking ito ay pinapatakbo ng '''[https://www.mediawiki.org/ MediaWiki]''', karapatang-ari © 2001-$1 $2.",
 'version-poweredby-others' => 'iba pa',
 'version-license-info' => 'Ang MediaWiki ay isang malayang sopwer; maaari mo itong ipamahagi at/o baguhin ito sa ilalim ng mga patakaran ng Pangkalahatang Pangmadlang Lisensiyang GNU ayon sa pagkakalathala ng Pundasyon ng Malayang Sopwer; na maaaring bersyong 2 ng Lisensiya, o (kung nais mo) anumang susunod na bersyon.
 Ang MediaWiki ay ipinamamahagi na umaasang magiging gamitin, subaliut WALANG ANUMANG KATIYAKAN; ni walang pahiwatig ng PAGIGING MABENTA o KAANGKUPAN PARA ISANG TIYAK NA LAYUNIN.  Tingnan ang Pangkalahatang Pangmadlang Lisensiyang GNU para sa mas marami pang mga detalye.
@@ -3893,8 +3893,7 @@ Dapat na nakatanggap ka ng [{{SERVER}}{{SCRIPTPATH}}/COPYING isang sipi ng Pangk
 
 # Special:SpecialPages
 'specialpages' => 'Mga natatanging pahina',
-'specialpages-note' => '----
-* Normal na natatanging mga pahina.
+'specialpages-note' => '* Normal na natatanging mga pahina.
 * <span class="mw-specialpagerestricted">Pinaghihigpitang natatanging mga pahina.</span>',
 'specialpages-group-maintenance' => 'Mga pagpapanatiling ulat',
 'specialpages-group-other' => 'Iba pang natatanging mga pahina',
index 5e73c11..37cb810 100644 (file)
@@ -617,7 +617,6 @@ $messages = array(
 'preferences' => 'Кукон',
 'mypreferences' => 'Кукон',
 'prefsnologin' => 'Ыштәни едаштәнијоне',
-'prefsnologintext' => 'Шымә бәбе <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ыштәни едәштән]</span> бо иштирокәкә пеғәндон дәгиш кардеј.',
 'changepassword' => 'Пароли дәгиш кардеј',
 'skin-preview' => 'Сыфтәнә нишо дој',
 'prefs-user-pages' => 'Иштирокәкә сәһифон',
@@ -1002,7 +1001,7 @@ $messages = array(
 
 # External editor support
 'edit-externally' => 'Редактә кардеј ым фајли де заһири програм',
-'edit-externally-help' => '(Bo mıffəssələ məlumoton bə [//www.mediawiki.org/wiki/Manual:External_editors dərsəvon bo soxtəy] diyə bıkən)',
+'edit-externally-help' => '(Bo mıffəssələ məlumoton bə [https://www.mediawiki.org/wiki/Manual:External_editors dərsəvon bo soxtəy] diyə bıkən)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'һәммәј',
index 1329371..22a76af 100644 (file)
@@ -1144,7 +1144,7 @@ Pea hoko ai pē hoʻo lava tānaki ha ʻuhinga ʻi he fakanounou',
 
 # External editor support
 'edit-externally' => 'Fatuʻi ʻa e failé ni ngāueʻaki mo e polokalama ʻi tuʻa',
-'edit-externally-help' => 'Vakai ki he [//www.mediawiki.org/wiki/Manual:External_editors fakahinohino ki he fokotuʻu] maʻa toe fakamatala.',
+'edit-externally-help' => 'Vakai ki he [https://www.mediawiki.org/wiki/Manual:External_editors fakahinohino ki he fokotuʻu] maʻa toe fakamatala.',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'kātoa',
index 98de2bb..68aa71a 100644 (file)
@@ -1468,7 +1468,6 @@ Aramanızın başına '''all:''' önekini ekleyerek tüm içeriği aramayı (tar
 'mypreferences' => 'Tercihler',
 'prefs-edits' => 'Değişiklik sayısı:',
 'prefsnologin' => 'Oturum açık değil',
-'prefsnologintext' => 'Kullanıcı tercihlerinizi ayarlamak için <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} giriş yapmalısınız]</span>.',
 'changepassword' => 'Parolayı değiştir',
 'prefs-skin' => 'Görünüm',
 'skin-preview' => 'Önizleme',
@@ -2940,7 +2939,7 @@ Sonuncu durumda, bir link de kullanabilirsiniz, ör: "[[{{MediaWiki:Mainpage}}]]
 'allmessagesdefault' => 'Varsayılan mesaj metni',
 'allmessagescurrent' => 'Kullanımdaki metin',
 'allmessagestext' => 'Bu liste  MediaWiki ad alanında mevcut olan sistem mesajlarının listesidir.
-Genel MediaWiki yerelleştirmesine katkıda bulunmak isterseniz, lütfen [//www.mediawiki.org/wiki/Localisation MediaWiki Yerelleştirmesi] ve [//translatewiki.net translatewiki.net] sayfalarını ziyaret edin.',
+Genel MediaWiki yerelleştirmesine katkıda bulunmak isterseniz, lütfen [https://www.mediawiki.org/wiki/Localisation MediaWiki Yerelleştirmesi] ve [//translatewiki.net translatewiki.net] sayfalarını ziyaret edin.',
 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' kapalı olduğu için '''{{ns:special}}:Allmessages''' kullanıma açık değil.",
 'allmessages-filter-legend' => 'Filtre',
 'allmessages-filter' => 'Özelleştirme durumuna göre filtrele:',
@@ -3684,7 +3683,7 @@ Diğerleri varsayılan olarak gizlenecektir.
 
 # External editor support
 'edit-externally' => 'Dosyayı harici bir uygulamayla değiştirin.',
-'edit-externally-help' => '(Daha fazla bilgi için metadaki [//www.mediawiki.org/wiki/Manual:External_editors dış uygulama ayarları] (İngilizce) sayfasına bakabilirsiniz)',
+'edit-externally-help' => '(Daha fazla bilgi için metadaki [https://www.mediawiki.org/wiki/Manual:External_editors dış uygulama ayarları] (İngilizce) sayfasına bakabilirsiniz)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'Hepsini göster',
@@ -3876,7 +3875,7 @@ Ayrıca [[Special:EditWatchlist|standart düzenleme sayfasını]] da kullanabili
 'version-hook-subscribedby' => 'Abone olan',
 'version-version' => '(Sürüm $1)',
 'version-license' => 'Lisans',
-'version-poweredby-credits' => "Bu wiki '''[//www.mediawiki.org/ MediaWiki]''' programı kullanılarak oluşturulmuştur, telif © 2001-$1 $2.",
+'version-poweredby-credits' => "Bu wiki '''[https://www.mediawiki.org/ MediaWiki]''' programı kullanılarak oluşturulmuştur, telif © 2001-$1 $2.",
 'version-poweredby-others' => 'diğerleri',
 'version-license-info' => "MediaWiki özgür bir yazılımdır; MediaWiki'yi, Özgür Yazılım Vakfı tarafından yayımlanmış olan GNU Genel Kamu Lisansının 2. veya (seçeceğiniz) daha sonraki bir sürümünün koşulları altında yeniden dağıtabilir ve/veya değiştirebilirsiniz.
 
@@ -3913,8 +3912,7 @@ Bu programla birlikte [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU Genel Kamu Lisansın
 
 # Special:SpecialPages
 'specialpages' => 'Özel sayfalar',
-'specialpages-note' => '----
-* Normal özel sayfalar.
+'specialpages-note' => '* Normal özel sayfalar.
 * <span class="mw-specialpagerestricted">Kısıtlı özel sayfalar.</span>
 * <span class="mw-specialpagecached">Önbelleğe alınan özel sayfalar (eskimiş olabilir)</span>',
 'specialpages-group-maintenance' => 'Bakım raporları',
index 5dd3011..47b3f5e 100644 (file)
@@ -804,7 +804,7 @@ Others will be hidden by default.
 
 # External editor support
 'edit-externally' => 'Edit this file using an external application',
-'edit-externally-help' => '(See the [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] for more information)',
+'edit-externally-help' => '(See the [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] for more information)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'kulle',
index a468b68..d26a779 100644 (file)
@@ -877,7 +877,7 @@ Lebyi n'wana vuxokoxoko bya finiso byitumbetiwile.
 
 # External editor support
 'edit-externally' => 'Lulamisa fayili leyi utirhisa xilulamisi xale handle ka wiki leyi',
-'edit-externally-help' => '(Vona [//www.mediawiki.org/wiki/Manual:External_editors swiletelo swo sungurisa] leswaku ukuma vuxokoxoko lebyi engetelekeke)',
+'edit-externally-help' => '(Vona [https://www.mediawiki.org/wiki/Manual:External_editors swiletelo swo sungurisa] leswaku ukuma vuxokoxoko lebyi engetelekeke)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'Hinkwawo',
index f6b9404..391c4b7 100644 (file)
@@ -1190,7 +1190,6 @@ $1",
 'mypreferences' => 'Көйләнмәләр',
 'prefs-edits' => 'Үзгәртүләр исәбе:',
 'prefsnologin' => 'Кермәгәнсез',
-'prefsnologintext' => 'Кулланучы көйләнмәләрене үзгәртү өчен, сез <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} керергә]</span> тиешсез.',
 'changepassword' => 'Серсүзне үзгәртү',
 'prefs-skin' => 'Күренеш',
 'skin-preview' => 'Алдан карау',
@@ -2050,7 +2049,7 @@ $1',
 'allmessagesname' => 'Исем',
 'allmessagesdefault' => 'Баштан ук куелган текс',
 'allmessagestext' => 'Бу исемлек MediaWiki исемнәр мәйданында булган система хәбәрләренең исемлеге.
-Гомуми MediaWiki локализациясендә катнашырга теләсәгез, зинһар [//www.mediawiki.org/wiki/Localisation MediaWiki Локализациясе] һәм [//translatewiki.net translatewiki.net] сәхифәләрне кулланыгыз.',
+Гомуми MediaWiki локализациясендә катнашырга теләсәгез, зинһар [https://www.mediawiki.org/wiki/Localisation MediaWiki Локализациясе] һәм [//translatewiki.net translatewiki.net] сәхифәләрне кулланыгыз.',
 'allmessages-filter-legend' => 'Фильтр',
 'allmessages-filter-unmodified' => 'Үзгәртелмәгән',
 'allmessages-filter-all' => 'Барысы',
@@ -2376,7 +2375,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'Бу файлны тышкы кушымтаны кулланып үзгәртү',
-'edit-externally-help' => '(тулырак мәгълүмат өчен [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] битен карагыз)',
+'edit-externally-help' => '(тулырак мәгълүмат өчен [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] битен карагыз)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'барлык',
@@ -2452,8 +2451,7 @@ $1',
 
 # Special:SpecialPages
 'specialpages' => 'Махсус битләр',
-'specialpages-note' => '----
-* Гади махсус битләр.
+'specialpages-note' => '* Гади махсус битләр.
 * <strong class="mw-specialpagerestricted">Чикләнелгән махсус битләр.</strong>
 * <span class="mw-specialpagecached">Кешланган махсус битләр.</span>',
 'specialpages-group-maintenance' => 'Техник карау хисапнамәсе',
index 8f96b5b..c388277 100644 (file)
@@ -924,7 +924,6 @@ Barlıq alannarda (bäxäs bitläre, ürnäklär, h.b.) ezläw öçen ''all'' s
 'mypreferences' => 'Köylänmälärem',
 'prefs-edits' => 'Üzgärtülär isäbe:',
 'prefsnologin' => 'Kermägänsez',
-'prefsnologintext' => 'Qullanuçı köylänmälärene üzgärtü öçen, sez <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} kerergä]</span> tieşsez.',
 'changepassword' => 'Sersüzne üzgärtü',
 'prefs-skin' => 'Küreneş',
 'skin-preview' => 'Aldan qaraw',
@@ -1753,7 +1752,7 @@ Zinhar başqa isem saylağız.',
 'allmessagesdefault' => 'Töpcay yazma',
 'allmessagescurrent' => 'Eligi yazma',
 'allmessagestext' => 'Bu isemlek MediaWiki isemnär mäydanında bulğan sistema xäbärläreneñ isemlege.
-Ğomumi MediaWiki lokalizatsiäsendä qatnaşırğa teläsägez, zinhar [//www.mediawiki.org/wiki/Localisation MediaWiki Lokalizatsiäse] häm [//translatewiki.net translatewiki.net] säxifälärne qullanığız.',
+Ğomumi MediaWiki lokalizatsiäsendä qatnaşırğa teläsägez, zinhar [https://www.mediawiki.org/wiki/Localisation MediaWiki Lokalizatsiäse] häm [//translatewiki.net translatewiki.net] säxifälärne qullanığız.',
 'allmessages-filter-legend' => 'Filtr',
 'allmessages-filter-unmodified' => 'Üzgärtelmägän',
 'allmessages-filter-all' => 'Barısı',
@@ -2038,7 +2037,7 @@ Yulnıñ berençe sıltaması quyma öçen tıyılğan räsemgä sıltama bulır
 
 # External editor support
 'edit-externally' => 'Bu faylnı tışqı quşımtanı qullanıp üzgärtü',
-'edit-externally-help' => '(tulıraq mäğlümat öçen [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] biten qarağız)',
+'edit-externally-help' => '(tulıraq mäğlümat öçen [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] biten qarağız)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'barlıq',
@@ -2102,8 +2101,7 @@ Yulnıñ berençe sıltaması quyma öçen tıyılğan räsemgä sıltama bulır
 
 # Special:SpecialPages
 'specialpages' => 'Maxsus bitlär',
-'specialpages-note' => '----
-* Ğädi maxsus bitlär.
+'specialpages-note' => '* Ğädi maxsus bitlär.
 * <strong class="mw-specialpagerestricted">Çiklänelgän ğädi maxsus bitlär</strong>',
 'specialpages-group-maintenance' => 'Texnik qaraw xisapnamäse',
 'specialpages-group-other' => 'Başqa maxsus bitlär',
index 8a1d47e..953210f 100644 (file)
@@ -127,7 +127,7 @@ $messages = array(
 'tog-watchlisthidebots' => 'Хайгаарал даңзызындан роботтарның эдиглерин чажыр',
 'tog-watchlisthideminor' => 'Хайгаарал даңзызындан бичии эдиглерни чажыр',
 'tog-watchlisthidepatrolled' => 'Хайгаарал даңзындан истээн өскерлиишкиннерны чажырары',
-'tog-showhiddencats' => 'ЧажÑ\8bÑ\82 Ð±Ó©Ð»Ò¯ÐºÑ\82еÑ\80ни ÐºÓ©Ñ\80гүзеÑ\80и',
+'tog-showhiddencats' => 'ЧажÑ\8bÑ\82 Ð°Ò£Ð³Ñ\8bлалдаÑ\80нÑ\8b ÐºÓ©Ñ\80гүзеÑ\80',
 
 'underline-always' => 'Кезээде',
 'underline-never' => 'Кажан-даа',
@@ -602,7 +602,7 @@ Please check if you want to create/edit this page.',
 'nextn' => 'дараазында {{PLURAL:$1|$1}}',
 'prevn-title' => 'Эрткен $1 {{PLURAL:$1|бижик|бижик}}',
 'nextn-title' => 'Дараазында $1 {{PLURAL:$1|бижик|бижик}}',
-'shown-title' => 'Арынга $1 {{PLURAL:$1|түңнелди|түңнелди}} көргүзери',
+'shown-title' => 'Арынга $1 {{PLURAL:$1|түңнел}} көргүзер',
 'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) көөрү',
 'searchmenu-exists' => "'''Бо викиде \"[[:\$1]]\" деп арын бар.'''",
 'searchmenu-new' => "'''Бо викиде «[[:$1]]» арынны чогаадыры'''",
@@ -755,16 +755,16 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'rcnotefrom' => 'Адаанда <strong>$2</strong> тура (<strong>$1</strong> чедир) өскертилгелерни санаан.',
 'rclistfrom' => '$1 тура чаа өскерилгелерни көргүзер',
 'rcshowhideminor' => 'Бичии өскерлиишкиннерни $1',
-'rcshowhidebots' => 'РобоÑ\82Ñ\82аÑ\80нÑ\83 $1',
-'rcshowhideliu' => 'Ð\9aиÑ\80еÑ\80 Ð°Ð¶Ñ\8bглакÑ\87Ñ\8bлаÑ\80нÑ\8b $1',
-'rcshowhideanons' => 'Ат эвес ажыглакчыларны $1',
+'rcshowhidebots' => 'РобоÑ\82Ñ\82аÑ\80нÑ\8b $1',
+'rcshowhideliu' => 'Ð\9aиÑ\80ген ÐºÐ¸Ñ\80жикÑ\87илеÑ\80ни $1',
+'rcshowhideanons' => 'Ады чок ажыглакчыларны $1',
 'rcshowhidepatr' => 'истээн өскерлиишкиннерни $1',
-'rcshowhidemine' => 'Ð\9cÑ\8dÑ\8dÒ£ Ó©Ñ\81кеÑ\80лииÑ\88кинимни $1',
-'rclinks' => '$2 хүнде эрткен $1 өскерлиишкиннерни көргүзери<br />$3',
+'rcshowhidemine' => 'ЭдиглеÑ\80имни $1',
+'rclinks' => 'Сөөлгү $2 хүн иштинде болган $1 өскерлиишкиннерни көргүзер<br />$3',
 'diff' => 'ылгал',
 'hist' => 'төөгү',
-'hide' => 'чажырары',
-'show' => 'көÑ\80гүзеÑ\80и',
+'hide' => 'Чажырар',
+'show' => 'Ð\9aÓ©Ñ\80гүзеÑ\80',
 'minoreditletter' => 'б',
 'newpageletter' => 'Ч',
 'boteditletter' => 'р',
@@ -873,7 +873,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'brokenredirects-delete' => 'ырадыры',
 
 'withoutinterwiki' => 'Дыл холбаалар эвес арыннар',
-'withoutinterwiki-submit' => 'Көргүзери',
+'withoutinterwiki-submit' => 'Көргүзер',
 
 'fewestrevisions' => 'Эң эвээш үндүрери арыннар',
 
@@ -987,7 +987,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'unwatching' => 'Хайгааравайн турар...',
 
 'enotif_impersonal_salutation' => '{{grammar:genitive|{{SITENAME}}}} ажыглакчызы',
-'enotif_anon_editor' => 'аÑ\82 Ñ\8dвеÑ\81 Ð°Ð¶Ñ\8bглакÑ\87Ñ\8b $1',
+'enotif_anon_editor' => 'аÑ\82 Ñ\87ок ÐºÐ¸Ñ\80жикÑ\87и $1',
 'changed' => 'өскертти',
 
 # Delete
@@ -1095,7 +1095,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'contribslink' => 'салыышкыннар',
 'blocklogpage' => 'Кызыгаарлаашкынның журналы',
 'blocklogentry' => ', [[$1]] $2 дургузунда кызыгаарлаттынган: $3',
-'block-log-flags-anononly' => 'чүгле ат эвес ажыглакчылар',
+'block-log-flags-anononly' => 'чүгле адыжок киржикчилер',
 'block-log-flags-nocreate' => 'Кижилер бүрүткээри хоруглуг',
 'block-log-flags-hiddenname' => 'ажыглакчының ады чажырган',
 
@@ -1199,7 +1199,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'tooltip-summary' => 'Кысказы-биле бижиңер',
 
 # Attribution
-'anonymous' => '{{grammar:genitive|{{SITENAME}}}} ат эвес {{PLURAL:$1|ажыглакчызы|ажыглакчылары}}',
+'anonymous' => '{{grammar:genitive|{{SITENAME}}}} адыжок {{PLURAL:$1|киржикчизи}}',
 
 # Skin names
 'skinname-cologneblue' => 'Cologne Blue',
@@ -1287,7 +1287,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 
 # External editor support
 'edit-externally' => 'Бо файлды даштыкы капсырылга-биле эдер',
-'edit-externally-help' => '(Улаштыр тодарадырда бо [//www.mediawiki.org/wiki/Manual:External_editors кыстып алыр саавырны] көрүңер)',
+'edit-externally-help' => '(Улаштыр тодарадырда бо [https://www.mediawiki.org/wiki/Manual:External_editors кыстып алыр саавырны] көрүңер)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'шупту',
index aad3464..1803bc0 100644 (file)
@@ -13,6 +13,7 @@
  * @author Kaganer
  * @author Reedy
  * @author Sahran
+ * @author Tel'et
  */
 
 $rtl = true;
@@ -55,10 +56,10 @@ $messages = array(
 'tog-extendwatchlist' => 'كۈچەيتىلگەن كۆزەت تىزىملىكىدە يېقىنقى ئۆزگەرتىشنىلا كۆرسەتمەي بەلكى ھەممە ئۆزگەرتىشنى كۆرسەت',
 'tog-usenewrc' => 'بەت گۇرۇپپىلىنىشىغا ئاساسەن يېقىنقى ئۆزگەرتىش ۋە كۆزەت تىزىمى (JavaScript زۆرۈر)',
 'tog-numberheadings' => 'ماۋزۇغا ئۆزلۈكىدىن تەرتىپ نومۇرى قوش',
-'tog-showtoolbar' => 'تەھرىر قورال بالداقنى كۆرسەت (JavaScript زۆرۈر)',
-'tog-editondblclick' => 'قوش چەككەندە بەت تەھرىرلە (JavaScript زۆرۈر)',
+'tog-showtoolbar' => 'تەھرىر قورال بالداقنى كۆرسەت',
+'tog-editondblclick' => 'قوش چەككەندە بەت تەھرىرلە',
 'tog-editsection' => '[تەھرىر] ئۇلانمىسىنى چېكىپ ئابزاس تەھرىرلەشكە يول قوي',
-'tog-editsectiononrightclick' => 'ماۋزۇنى چاشقىنەكتە ئوڭ چېكىپ ئابزاس تەھرىرلەشكە يول قوي (JavaScript زۆرۈر)',
+'tog-editsectiononrightclick' => 'تېمىنى ئوڭ چېكىپ ئابزاس تەھرىرلەشكە يول قوي',
 'tog-showtoc' => 'مەزمۇن جەدۋىلى كۆرسەت (بىر بەتتە 3 تىن ئارتۇق ماۋزۇ بار بەتكە قارىتىلغان)',
 'tog-rememberpassword' => 'بۇ كومپيۇتېردا كىرگىنىمنى ئەستە ساقلا(ئەڭ ئۇزۇن بولغاندا $1 {{PLURAL:$1|كۈن|كۈن}})',
 'tog-watchcreations' => 'مەن قۇرغان بەت ۋە يۈكلىگەن ھۆججەتلەرنى كۆزەت تىزىملىكىمگە قوش',
@@ -76,7 +77,7 @@ $messages = array(
 'tog-shownumberswatching' => 'بۇ بەتنى كۆزىتىۋاتقان ئىشلەتكۈچى سانىنى كۆرسەت',
 'tog-oldsig' => 'نۆۋەتتىكى ئىمزا:',
 'tog-fancysig' => 'ئىمزاغا wiki تېكستى سۈپىتىدە مۇئامىلە قىل (ئۆزلۈكىدىن ئۇلانما ھاسىل بولمايدۇ)',
-'tog-uselivepreview' => 'رÙ\89ئاÙ\84 Û\8bاÙ\82Ù\89تÙ\84Ù\89Ù\82 Ø¦Ø§Ù\84دÙ\89Ù\86 Ù\83Û\86زÙ\89تÙ\89Ø´Ù\86Ù\89 Ø¦Ù\89Ø´Ù\84Û\95ت (JavaScript Ø²Û\86رÛ\88ر) (سىناق)',
+'tog-uselivepreview' => 'جاÙ\86Ù\84Ù\89Ù\82 Ø¦Ø§Ù\84دÙ\89Ù\86 Ù\83Û\86زÙ\89تÙ\89Ø´Ù\86Ù\89 Ø¦Ù\89Ø´Ù\84Û\95ت (سىناق)',
 'tog-forceeditsummary' => 'ئۈزۈندە كىرگۈزمىگەندە مېنى ئەسكەرت',
 'tog-watchlisthideown' => 'كۆزەت تىزىملىكىدىن مېنىڭ تەھرىرلىگىنىمنى يوشۇر',
 'tog-watchlisthidebots' => 'كۆزەت تىزىملىكىدىن ماشىنا ئادەم تەھرىرلىگەننى يوشۇر',
@@ -152,6 +153,18 @@ $messages = array(
 'oct' => 'ئۆكتەبىر',
 'nov' => 'نويابىر',
 'dec' => 'دېكابىر',
+'january-date' => '$1- يانۋار',
+'february-date' => '$1- فېۋرال',
+'march-date' => '$1- مارت',
+'april-date' => '$1- ئاپرىل',
+'may-date' => '$1- ماي',
+'june-date' => '$1- ئىيۇن',
+'july-date' => '$1- ئىيۇل',
+'august-date' => '$1- ئاۋغۇست',
+'september-date' => '$1- سىنتەبىر',
+'october-date' => '$1- ئۆكتەبىر',
+'november-date' => '$1- نويابىر',
+'december-date' => '$1- دىكابىر',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|تۈر|تۈرلەر}}',
@@ -178,7 +191,7 @@ $messages = array(
 'newwindow' => '(يېڭى كۆزنەكتە ئاچ)',
 'cancel' => 'ۋاز كەچ',
 'moredotdotdot' => 'تەپسىلىي…',
-'morenotlisted' => 'تÛ\95پسÙ\89Ù\84اتÙ\89 Ù\83Û\86رسÙ\89تÙ\89Ù\84Ù\85Ù\89Ú¯Û\95Ù\86Ù\84Ù\89رÙ\89â\80¦',
+'morenotlisted' => 'بÛ\87 ØªÙ\89زÙ\89Ù\85Ù\84Ù\89Ù\83 ØªÙ\88Ù\84Û\87Ù\82 Ø¦Û\95Ù\85Û\95س.',
 'mypage' => 'بەتىم',
 'mytalk' => 'مۇنازىرە بېتىم',
 'anontalk' => 'بۇ IP نىڭ مۇنازىرە بېتى',
@@ -234,6 +247,7 @@ $messages = array(
 'create-this-page' => 'بۇ بەتنى قۇر',
 'delete' => 'ئۆچۈر',
 'deletethispage' => 'بۇ بەتنى ئۆچۈر',
+'undeletethispage' => ' بۇ بەتنى ئەسلىگە كەلتۈر',
 'undelete_short' => 'ئۆچۈرۈلگەن {{PLURAL:$1|بىر تەھرىر|$1 تەھرىر}} ئەسلىگە كەلتۈرۈلدى',
 'viewdeleted_short' => '{{PLURAL:$1|بىر ئۆچۈرۈلگەن نەشرى|$1 ئۆچۈرۈلگەن نەشرى}}نى كۆرسەت',
 'protect' => 'قوغدا',
@@ -250,7 +264,7 @@ $messages = array(
 'articlepage' => 'مەزمۇن بېتىنى كۆرسەت',
 'talk' => 'مۇنازىرە',
 'views' => 'كۆرۈنۈش',
-'toolbox' => 'قورال ساندۇقى',
+'toolbox' => 'قوراللار',
 'userpage' => 'ئىشلەتكۈچى بېتىنى كۆرسەت',
 'projectpage' => 'قۇرۇلۇش بېتىنى كۆرسەت',
 'imagepage' => 'ھۆججەت بېتىنى كۆرسەت',
@@ -373,6 +387,8 @@ URL نى خاتا كىرگۈزۈپ قالدىڭىز ياكى خاتا ئۇلان
 # General errors
 'error' => 'خاتالىق',
 'databaseerror' => 'ساندان خاتالىقى',
+'databaseerror-function' => 'فۇنكىسىيە: $1',
+'databaseerror-error' => 'خاتا: $1',
 'laggedslavemode' => 'ئاگاھلاندۇرۇش: بەت يېقىنقى يېڭىلاشنى ئۆز ئىچىگە ئالمىغان بولۇشى مۇمكىن.',
 'readonly' => 'ساندان قۇلۇپلانغان',
 'enterlockreason' => 'قۇلۇپلىنىش سەۋەبىنى كىرگۈزۈڭ، قايتا ئېچىشنىڭ مۆلچەر ۋاقتىنىمۇ ئۆز ئىچىگە ئالىدۇ',
@@ -470,9 +486,19 @@ $2',
 
 [[Special:Preferences|{{SITENAME}} تەڭشىكىڭىزنى تەڭشەشنى ئۇنتۇپ قالماڭ]].',
 'yourname' => 'ئىشلەتكۈچى ئاتى:',
-'yourpassword' => 'ئىم:',
+'userlogin-yourname' => 'ئىشلەتكۈچى نامى',
+'userlogin-yourname-ph' => 'ئىشلەتكۈچى نامىڭىزنى كىرگۈزۈڭ',
+'createacct-another-username-ph' => 'ئىشلەتكۈچى نامىنى كىرگۈزۈڭ',
+'yourpassword' => 'پارول:',
+'userlogin-yourpassword' => 'پارول',
+'userlogin-yourpassword-ph' => 'پارولىڭىزنى كىرگۈزۈڭ',
+'createacct-yourpassword-ph' => 'پارول كىرگۈزۈڭ',
 'yourpasswordagain' => 'ئاچقۇچنى قايتا بەسىڭ:',
+'createacct-yourpasswordagain' => 'پارولنى مۇقىملاشتۇرۇڭ',
+'createacct-yourpasswordagain-ph' => 'پارولنى قايتا كىرگۈزۈڭ',
 'remembermypassword' => 'بۇ كومپيۇتېردا كىرگىنىمنى ئەستە ساقلا(ئەڭ ئۇزۇن بولغاندا $1 {{PLURAL:$1|كۈن|كۈن}})',
+'userlogin-remembermypassword' => 'مېنى ئەستە ساقلا',
+'userlogin-signwithsecure' => 'بىخەتەر ئۇلىنىشنى ئىشلەت',
 'yourdomainname' => 'دائىرە ئاتىڭىز:',
 'password-change-forbidden' => 'بۇ ۋىكىدىكى ئىمنى ئۆزگەرتەلمەيسىز.',
 'externaldberror' => 'بۇ سانداننى دەلىللەش خاتالىقى ياكى سىرتقى ھېساباتىڭىزنى يېڭىلاشنى چەكلىگەنلىكتىن بولغان بولۇشى مۇمكىن.',
@@ -484,18 +510,42 @@ $2',
 'logout' => 'تىزىمدىن چىق',
 'userlogout' => 'تىزىمدىن چىق',
 'notloggedin' => 'تىزىمغا كىرمىدى',
+'userlogin-noaccount' => 'ھېساباتىڭىز يوقمۇ؟',
+'userlogin-joinproject' => '{{SITENAME}} قا ئەزا بولۇش',
 'nologin' => "ھېساباتىڭىز يوقمۇ؟ '''$1'''.",
 'nologinlink' => 'ھېساباتتىن بىرنى قۇر',
 'createaccount' => 'ھېسابات قۇر',
 'gotaccount' => "ھېساباتىم بار؟ '''$1'''.",
 'gotaccountlink' => 'تىزىمغا كىر',
 'userlogin-resetlink' => 'تىزىمغا كىرىش تەپسىلاتىنى ئۇنۇتتىڭىز؟',
+'userlogin-resetpassword-link' => 'پارولىڭىزنى ئۇنتۇپ قالدىڭىزمۇ؟',
+'helplogin-url' => 'Help:تىزىمغا كىرىش',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|تىزىمغا كىرىش ئۈچۈن ياردەم]]',
+'userlogin-loggedin' => 'سىز ئاللىقاچان {{GENDER:$1|$1}} ھالىتىدە تىزىمغا كىرىپ بولدىڭىز. تۆۋەندىكىلەرنى تولدۇرۇپ باشقا ئىشلەتكۈچى ھالىتىدە تىزىمغا كىرىڭ.',
+'userlogin-createanother' => 'باشقا ھېسابات قۇرىمەن',
+'createacct-join' => 'تۆۋەنگە ئۇچۇرلىرىڭىزنى كىرگۈزۈڭ.',
+'createacct-another-join' => 'يېڭى ئىشلەتكۈچىنىڭ ئۇچۇرلىرىنى كىرگۈزۈڭ.',
+'createacct-emailrequired' => 'ئېلخەت ئادرېسى',
+'createacct-emailoptional' => 'ئېلخەت ئادرېسى (ئىختىيارى)',
+'createacct-email-ph' => 'ئېلخەت ئادرېسىڭىزنى كىرگۈزۈڭ',
+'createacct-another-email-ph' => 'ئېلخەت ئادرېسى كىرگۈزۈڭ',
 'createaccountmail' => 'ۋاقىتلىق ئىختىيارىي بىر ئېمنى ئىشلىتىدۇ ھەمدە تۆۋەندىكى بەلگىلەنگەن تورخەت ئادرېسىغا ئەۋەتىدۇ',
+'createacct-realname' => 'ھەقىقى ئىسمىڭىز (ئىختىيارى)',
 'createaccountreason' => 'سەۋەب:',
-'badretype' => 'سىز كىرگۈزگەن ئىم ماس كەلمىدى.',
+'createacct-reason' => 'سەۋەبى',
+'createacct-reason-ph' => 'نېمىشقا باشقا ھېسابات قۇرماقچى بولدىڭىز',
+'createacct-captcha' => 'بىخەتەرلىك تەكشۈرۈشى',
+'createacct-imgcaptcha-ph' => 'ئۈستىدە كۆرگىنىڭىزنى كىرگۈزۈڭ',
+'createacct-submit' => 'ھېساباتىڭىزنى قۇرۇڭ',
+'createacct-another-submit' => 'باشقا ھېسابات قۇرىمەن',
+'createacct-benefit-heading' => '{{SITENAME}} سىزگە ئوخشاش كىشىلەر تەرىپىدىن قۇرۇلغان.',
+'createacct-benefit-body1' => '{{PLURAL:$1|قېتىم}} تەھرىرلەنگەن',
+'createacct-benefit-body2' => '{{PLURAL:$1|بەت}}',
+'badretype' => 'سىز كىرگۈزگەن پارول ماس كەلمىدى.',
 'userexists' => 'كىرگۈزگەن ئىشلەتكۈچى ئاتى ئىشلىتىلىۋاتىدۇ.
 باشقا ئاتنى تاللاڭ.',
 'loginerror' => 'تىزىمغا كىرىش خاتالىقى',
+'createacct-error' => 'ھېسابات قۇرۇش خاتالىقى',
 'createaccounterror' => 'ھېسابات قۇرالمىدى: $1',
 'nocookiesnew' => 'ئىشلەتكۈچى ھېساباتى قۇرۇلدى ئەمما سىز تېخى كىرمىدىڭىز..
 
@@ -522,15 +572,15 @@ cookies نى قوزغاتقانلىقىڭىزنى جەزملەڭ، بۇ بەتن
 كىرگۈزگىنىڭىزنى تەكشۈرۈڭ.',
 'nouserspecified' => 'ئىشلەتكۈچى ئاتىدىن بىرنى بەلگىلەڭ.',
 'login-userblocked' => 'بۇ ئىشلەتكۈچى چەكلەنگەن. تىزىمغا كىرىشكە يول قويۇلمايدۇ.',
-'wrongpassword' => 'كىرگۈزگەن ئىم خاتا.
+'wrongpassword' => 'كىرگۈزگەن پارول خاتا.
 قايتا سىناڭ.',
-'wrongpasswordempty' => 'ئىم كىرگۈزمىدىڭىز
+'wrongpasswordempty' => 'پارول كىرگۈزمىدىڭىز
 قايتا سىناڭ.',
 'passwordtooshort' => 'ئىم ئاز دېگەندە {{PLURAL:$1|1 ھەرپ|$1 ھەرپ}} بولۇشى لازىم.',
-'password-name-match' => 'ئىم ئىشلەتكۈچى ئاتىڭىزدىن پەرقلىنىشى لازىم.',
-'password-login-forbidden' => 'بۇ ئىشلەتكۈچى ئاتى ۋە ئىم چەكلەنگەن.',
+'password-name-match' => 'پارولىڭىز ئىشلەتكۈچى نامىڭىزدىن پەرقلىنىشى لازىم.',
+'password-login-forbidden' => 'بۇ ئىشلەتكۈچى نامى ۋە پارول چەكلەنگەن.',
 'mailmypassword' => 'يېڭى ئىمنى ئېخەتكە ئەۋەت',
-'passwordremindertitle' => '{{SITENAME}} ئۈچۈن يېڭى ۋاقىتلىق ئىم',
+'passwordremindertitle' => '{{SITENAME}} ئۈچۈن يېڭى ۋاقىتلىق پارول',
 'passwordremindertext' => 'باشقىلار (بەلكىم سىز، IP ئادرېسى $1)
 {{SITENAME}} بېكەتنىڭ يېڭى ئىم ($4) نى ئىلتىماس قىلدى .
  "$2" ئىشلەتكۈچىنىڭ يېڭى ۋاقىتلىق ئىمنى "$3" غا تەڭشىدى.
@@ -552,7 +602,7 @@ cookies نى قوزغاتقانلىقىڭىزنى جەزملەڭ، بۇ بەتن
 'mailerror' => 'ئېلخەت يوللىغاندا خاتالىق كۆرۈلدى:$1',
 'acct_creation_throttle_hit' => 'Wiki ئىشلىتىدىغان زىيارەتچى IP ئادرېسىڭىزنى ئىشلىتىپ {{PLURAL:$1|1 ھېسابات|$1 ھېسابات}} قۇردى.
 مۇشۇ پەيتتە يەنە ھېسابات قۇرالمايسىز.',
-'emailauthenticated' => 'ئېلخەت ئادرېسىڭىز $2 $3 ئىناۋەتلىك ئىكەنلىكى دەلىللەندى.',
+'emailauthenticated' => 'ئېلخەت ئادرېسىڭىز $2 سائەت $3 دە دەلىللەندى.',
 'emailnotauthenticated' => 'ئېلخەت ئادرېسىڭىز تېخى دەلىللەنمىدى.
 تۆۋەندىكى ئىقتىدارى ھېچقانداق ئېلخەت ئەۋەتمەيدۇ.',
 'noemailprefs' => 'بۇ ئىقتىدارنى ئىشلىتىش ئۈچۈن مايىللىق تەڭشىكىڭىزدە ئېلخەت ئادرېسى بەلگىلەڭ.',
@@ -581,25 +631,25 @@ cookies نى قوزغاتقانلىقىڭىزنى جەزملەڭ، بۇ بەتن
 'user-mail-no-body' => 'بوش ياكى مەزمۇنى قىسقا مۇۋاپىق بولمىغان تورخەت ئەۋەتىشنى سىنىدى.',
 
 # Change password dialog
-'resetpass' => 'ئىم ئۆزگەرت',
+'resetpass' => 'پارولنى ئۆزگەرتىش',
 'resetpass_announce' => 'سىز ۋاقىتلىق ئېلخەت جەزملەش كودىدا تىزىمغا كىرگەن.
 تىزىمغا كىرىشنى تاماملاشتا، بۇ جايدا يېڭى ئىم بەلگىلىشىڭىز لازىم:',
 'resetpass_text' => '<!-- بۇ يەرگە تېكست قوشۇڭ -->',
 'resetpass_header' => 'ھېسابات ئىمنى ئۆزگەرت',
-'oldpassword' => 'كونا ئىم:',
-'newpassword' => 'يېڭى ئىم:',
-'retypenew' => 'يېڭى ئىمنى قايتا كىرگۈزۈڭ:',
-'resetpass_submit' => 'ئىم بەلگىلەپ تىزىمغا كىرىڭ',
+'oldpassword' => 'كونا پارول:',
+'newpassword' => 'يېڭى پارول:',
+'retypenew' => 'يېڭى پارولنى قايتا كىرگۈزۈڭ:',
+'resetpass_submit' => 'پارول بەلگىلەپ تىزىمغا كىرىڭ',
 'changepassword-success' => 'سىز ئىمنى مۇۋەپپەقىيەتلىك ئۆزگەرتتىڭىز!
  تىزىمغا كىرىۋاتىسىز…',
 'resetpass_forbidden' => 'ئىمنى ئۆزگەرتەلمىدى',
 'resetpass-no-info' => 'سىز تىزىمغا كىرگەندىن كېيىن بىۋاسىتە بۇ بەتكە كىرىشىڭىز لازىم.',
-'resetpass-submit-loggedin' => 'ئىم ئۆزگەرت',
+'resetpass-submit-loggedin' => 'پارولنى ئۆزگەرتىش',
 'resetpass-submit-cancel' => 'ۋاز كەچ',
 'resetpass-wrong-oldpass' => 'ۋاقىتلىق ياكى نۆۋەتتىكى ئىم ئىناۋەتسىز.
 
 ئىمنى ئاللىبۇرۇن ئۆزگەرتىپ بولدىڭىز ياكى يېڭى ۋاقىتلىق ئىم ئىلتىماس قىلدىڭىز.',
-'resetpass-temp-password' => 'ۋاقىتلىق ئىم:',
+'resetpass-temp-password' => 'ۋاقىتلىق پارول:',
 
 # Special:PasswordReset
 'passwordreset' => 'ئىمنى ئەسلىگە قايتۇرماق',
@@ -642,7 +692,7 @@ $2
 'changeemail-oldemail' => 'نۆۋەتتىكى ئېلخەت ئادرېسى:',
 'changeemail-newemail' => 'يېڭى ئېلخەت ئادرېسى:',
 'changeemail-none' => '(يوق)',
-'changeemail-password' => '{{SITENAME}} دىكى ئىم:',
+'changeemail-password' => '{{SITENAME}} دىكى پارولىڭىز:',
 'changeemail-submit' => 'ئېلخەت ئۆزگەرت',
 'changeemail-cancel' => 'ۋاز كەچ',
 
@@ -723,7 +773,7 @@ $2
 'loginreqtitle' => 'تىزىمغا كىرىڭ',
 'loginreqlink' => 'تىزىمغا كىر',
 'loginreqpagetext' => '$1 بولغاندىلا ئاندىن باشقا بەتلەرنى كۆرەلەيسىز.',
-'accmailtitle' => 'ئىم يوللاندى.',
+'accmailtitle' => 'پارول يوللاندى.',
 'accmailtext' => "[[User talk:$1|$1]] ئىختىيارىي قۇرۇلغان ئىم  $2 غا يوللاندى.
 
 يېڭى ھېساباتقا قۇرغان ئىمنى تىزىمغا كىرىپ''[[Special:ChangePassword|ئىم ئۆزگەرت]]'' بېتىدىن ئۆزگەرتەلەيسىز.",
@@ -920,8 +970,8 @@ $3 تەمىنلىگەن چەكلەش سەۋەبى ''$2''",
  '''{{int:minoreditletter}}''' ئازراقلا ئۆزگەرتىش.",
 'history-fieldset-title' => 'كۆز يۈگۈرتۈش تارىخى',
 'history-show-deleted' => 'ئۆچۈرۈلگەنلا',
-'histfirst' => 'تÛ\87Ù\86جÙ\89',
-'histlast' => 'ئاخىرقى',
+'histfirst' => 'ئÛ\95Ú­ Ù\83Ù\88Ù\86ا',
+'histlast' => 'ئەڭ يېڭى',
 'historysize' => '$1 {{PLURAL:$1|بايت|بايت}}',
 'historyempty' => '(بوش)',
 
@@ -987,7 +1037,7 @@ $3 تەمىنلىگەن چەكلەش سەۋەبى ''$2''",
 'revdelete-hide-image' => 'ھۆججەت مەزمۇنىنى يوشۇر',
 'revdelete-hide-name' => 'مەشغۇلات ۋە نىشاننى يوشۇر',
 'revdelete-hide-comment' => 'تەھرىر ئىزاھاتىنى يوشۇر',
-'revdelete-hide-user' => 'تەھرىرلىگۈچىنىڭ ئىشلەتكۈچى ئاتى/IP ئادرېس يوشۇر',
+'revdelete-hide-user' => 'تەھرىرلىگۈچىنىڭ نامى/IP ئادرېسىنى يوشۇر',
 'revdelete-hide-restricted' => 'مەشغۇلاتچى ۋە باشقا ئىشلەتكۈچىنىڭ سانلىق مەلۇمات كۆرۈشىنىمۇ چەكلە',
 'revdelete-radio-same' => '(ئۆزگەرتمە)',
 'revdelete-radio-set' => 'ھەئە',
@@ -1120,7 +1170,7 @@ $1",
 'search-interwiki-default' => '$1 نەتىجە:',
 'search-interwiki-more' => '(تېخىمۇ كۆپ)',
 'search-relatedarticle' => 'ئالاقىدار',
-'mwsuggest-disable' => 'AJAX تەكلىپىنى چەكلە',
+'mwsuggest-disable' => 'ئىزدەش تەكلىپىنى چەكلە',
 'searcheverything-enable' => 'ھەممە ئات بوشلۇقىدىن ئىزدە',
 'searchrelated' => 'ئالاقىدار',
 'searchall' => 'ھەممىسى',
@@ -1147,8 +1197,7 @@ $1",
 'mypreferences' => 'مايىللىق',
 'prefs-edits' => 'تەھرىر سانى:',
 'prefsnologin' => 'تىزىمغا كىرمىدى',
-'prefsnologintext' => 'سىز ئالدى بىلەن <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} تىزىمغا كىر]</span>سىڭىز ئاندىن ئىشلەتكۈچى مايىللىقنى تەڭشىيەلەيسىز.',
-'changepassword' => 'ئىم ئۆزگەرت',
+'changepassword' => 'پارولنى ئۆزگەرتىش',
 'prefs-skin' => 'تېرە',
 'skin-preview' => 'ئالدىن كۆزەت',
 'datedefault' => 'مايىللىق يوق',
@@ -1165,7 +1214,7 @@ $1",
 'prefs-watchlist-edits-max' => 'ئەڭ كۆپ سانى: 1000',
 'prefs-watchlist-token' => 'كۆزەت تىزىملىك نىشانى:',
 'prefs-misc' => 'ئارىلاشما تۈر',
-'prefs-resetpass' => 'ئىم ئۆزگەرت',
+'prefs-resetpass' => 'پارولنى ئۆزگەرتىش',
 'prefs-changeemail' => 'ئېلخەت ئۆزگەرت',
 'prefs-setemail' => 'ئېلخەت ئادرېس تەڭشەك',
 'prefs-email' => 'ئېلخەت تاللانما',
@@ -1253,6 +1302,8 @@ HTML بەلگىسىنى تەكشۈرۈڭ.',
 'prefs-dateformat' => 'چېسلا فورماتى',
 'prefs-timeoffset' => 'ۋاقىت پەرقى',
 'prefs-advancedediting' => 'ئالىي تاللانما',
+'prefs-editor' => 'تەھرىرلىگۈچ',
+'prefs-preview' => 'ئالدىن كۆزەت',
 'prefs-advancedrc' => 'ئالىي تاللانما',
 'prefs-advancedrendering' => 'ئالىي تاللانما',
 'prefs-advancedsearchoptions' => 'ئالىي تاللانما',
@@ -1260,6 +1311,7 @@ HTML بەلگىسىنى تەكشۈرۈڭ.',
 'prefs-displayrc' => 'كۆرسىتىش تاللانما',
 'prefs-displaysearchoptions' => 'كۆرسىتىش تاللانما',
 'prefs-displaywatchlist' => 'كۆرسىتىش تاللانما',
+'prefs-tokenwatchlist' => 'ئاچقۇچ',
 'prefs-diffs' => 'پەرقلەر',
 
 # User preference: email validation using jQuery
@@ -1359,6 +1411,8 @@ HTML بەلگىسىنى تەكشۈرۈڭ.',
 'right-editusercssjs' => 'باشقا ئىشلەتكۈچىنىڭ CSS ۋە JS ھۆججىتىنى تەھرىرلە',
 'right-editusercss' => 'باشقا ئىشلەتكۈچىنىڭ CSS ھۆججىتىنى تەھرىرلە',
 'right-edituserjs' => 'باشقا ئىشلەتكۈچىنىڭ  JS ھۆججىتىنى تەھرىرلە',
+'right-editmyusercss' => 'ئۆزىڭىزنىڭ CSS ھۆججىتىڭىزنى تەھرىرلەڭ',
+'right-editmyuserjs' => 'ئۆزىڭىزنىڭ JavaScript ھۆججىتىڭىزنى تەھرىرلەڭ',
 'right-rollback' => 'ئاخىرقى ئىشلەتكۈچىنىڭ مەلۇم بەتكە ئېلىپ بارغان تەھرىرىنى تېزلىكتە ئەسلىگە كەلتۈر',
 'right-markbotedits' => 'ئەسلىگە كەلتۈرۈلگەن تەھرىرنى ماشىنا ئادەم تەھرىرى دەپ بەلگە قوي',
 'right-noratelimit' => 'چاستوتا چەكلىمىسى ئىشلىتىلمىدى',
@@ -1423,6 +1477,7 @@ HTML بەلگىسىنى تەكشۈرۈڭ.',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|ئۆزگەرتىش|ئۆزگەرتىش}}',
+'enhancedrc-history' => 'تارىخ',
 'recentchanges' => 'يېقىنقى ئۆزگەرتىشلەر',
 'recentchanges-legend' => 'يېقىنقى ئۆزگەرتىش تاللانمىسى',
 'recentchanges-summary' => 'بۇ wiki نىڭ يېقىنقى ئۆزگىرىشىنى ئىز قوغلا.',
@@ -1455,7 +1510,7 @@ HTML بەلگىسىنى تەكشۈرۈڭ.',
 'rc-change-size' => '$1',
 'rc-change-size-new' => 'ئۆزگەرتكەندىن كېيىن $1 {{PLURAL:$1|بايت}}',
 'newsectionsummary' => '* $1 * يېڭى ئابزاس',
-'rc-enhanced-expand' => 'تەپسىلاتىنى كۆرسەت (JavaScript قوللىشى زۆرۈر)',
+'rc-enhanced-expand' => 'تەپسىلاتىنى كۆرسەت',
 'rc-enhanced-hide' => 'تەپسىلاتىنى يوشۇر',
 'rc-old-title' => 'ئەڭ دەسلەپتە "$1" سۈپىتىدە قۇرۇلغان',
 
@@ -1728,6 +1783,9 @@ URL نىڭ توغرىلىقى ۋە تور بېكەتنى زىيارەت قىلى
 'listfiles_size' => 'چوڭلۇقى',
 'listfiles_description' => 'چۈشەندۈرۈش',
 'listfiles_count' => 'نەشرى',
+'listfiles-latestversion' => 'نۆۋەتتىكى نەشرى',
+'listfiles-latestversion-yes' => 'ھەئە',
+'listfiles-latestversion-no' => 'ياق',
 
 # File description page
 'file-anchor-link' => 'ھۆججەت',
@@ -1825,6 +1883,11 @@ URL نىڭ توغرىلىقى ۋە تور بېكەتنى زىيارەت قىلى
 'randompage' => 'ئىختىيارىي بەت',
 'randompage-nopages' => 'تۆۋەندىكى {{PLURAL:$2|ئات بوشلۇقى|ئات بوشلۇقى}}دا بەت يوق: $1.',
 
+# Random page in category
+'randomincategory' => 'تۈردىكى ئىختىيارى بەت',
+'randomincategory-invalidcategory' => '«$1» ئىناۋەتلىك تۈر نامى ئەمەس',
+'randomincategory-nopages' => '[[:Category:$1|$1]] تۈرىدە ھىچقانداق بەت يوق.',
+
 # Random redirect
 'randomredirect' => 'ئىختىيارىي قايتا نىشانلانغان بەت',
 'randomredirect-nopages' => '"$1" ئات بوشلۇقىدا قايتا نىشانلانغان بەت يوق.',
@@ -2355,9 +2418,9 @@ $1',
 'contributions' => '{{$1:GENDER|ئىشلەتكۈچى}} تۆھپىسى',
 'contributions-title' => '$1 نىڭ ئىشلەتكۈچى تۆھپىسى',
 'mycontris' => 'تۆھپە',
-'contribsub2' => '$1 نىڭ تۆھپىسى ($2)',
+'contribsub2' => '{{GENDER:$3|$1}} ($2) ئۈچۈن',
 'nocontribs' => 'بۇ ئۆلچەمگە ماس كېلىدىغان ئۆزگەرتىش تېپىلمىدى.',
-'uctop' => '(ئۈستى)',
+'uctop' => '(نۆۋەتتىكى)',
 'month' => 'ئايدىن بۇيان (ياكى ئىلگىرى):',
 'year' => 'يىلدىن بۇيان (ياكى ئىلگىرى):',
 
@@ -2676,7 +2739,7 @@ $1',
 'allmessagesdefault' => 'كۆڭۈلدىكى ئۇچۇر تېكستى',
 'allmessagescurrent' => 'نۆۋەتتىكى ئۇچۇر تېكستى',
 'allmessagestext' => 'بۇ جايدا تەڭشىگىلى بولىدىغان ھەممە سىستېما كۆرۈنۈش ئۇچۇرلىرى كۆرسىتىلدى.
-ئەگەر ھەقىقىي يەرلەشتۈرۈلگەن MediaWiki غا تۆھپە قوشماقچى بولسىڭىز[//www.mediawiki.org/wiki/Localisation MediaWiki يەرلىكلەشتۈرۈش] ۋە [//translatewiki.net translatewiki.net] نى زىيارەت قىلىڭ.',
+ئەگەر ھەقىقىي يەرلەشتۈرۈلگەن MediaWiki غا تۆھپە قوشماقچى بولسىڭىز[https://www.mediawiki.org/wiki/Localisation MediaWiki يەرلىكلەشتۈرۈش] ۋە [//translatewiki.net translatewiki.net] نى زىيارەت قىلىڭ.',
 'allmessagesnotsupportedDB' => "بۇ بەتنى ئىشلەتكىلى بولمايدۇ، سەۋەبى '''\$wgUseDatabaseMessages''' چەكلەنگەن.",
 'allmessages-filter-legend' => 'سۈزگۈچ',
 'allmessages-filter' => 'ئىختىيارىچە سۈزگۈچ ھالىتى:',
@@ -2906,8 +2969,8 @@ $1',
 'pageinfo-article-id' => 'بەت ID',
 'pageinfo-language' => 'بەت مەزمۇن تىلى',
 'pageinfo-robot-policy' => 'ئىزدەش ماتور ھالىتى',
-'pageinfo-robot-index' => 'ئىندېكىسلاشچان',
-'pageinfo-robot-noindex' => 'ئىندېكىسلانمايدىغان',
+'pageinfo-robot-index' => 'چەكلەنمىگەن',
+'pageinfo-robot-noindex' => 'چەكلەنگەن',
 'pageinfo-views' => 'كۆرۈنۈش سانى',
 'pageinfo-watchers' => 'بەت كۆزەتكۈچىلەر سانى',
 'pageinfo-redirects-name' => 'بۇ بەتكە قايتا نىشانلايدۇ',
@@ -3030,6 +3093,16 @@ $1',
 'ago' => '$1 بۇرۇن',
 'just-now' => 'بايا',
 
+# Human-readable timestamps
+'monday-at' => 'دۈشەنبە $1 دە',
+'tuesday-at' => 'سەيشەنبە $1 دە',
+'wednesday-at' => 'چارشەنبە $1 دە',
+'thursday-at' => 'پەيشەنبە $1 دە',
+'friday-at' => 'جۈمە $1 دە',
+'saturday-at' => 'شەنبە $1 دە',
+'sunday-at' => 'يەكشەنبە $1 دە',
+'yesterday-at' => 'تۈنۈگۈن $1 دە',
+
 # Bad image list
 'bad_image_list' => 'تۆۋەندىكى فورماتتا يېزىڭ:
 
@@ -3277,7 +3350,7 @@ Variants for Chinese language
 'exif-compression-4' => 'CCITT نىڭ 4-گۇرۇپپا فاكس كودلىنىشى',
 
 'exif-copyrighted-true' => 'نەشر ھوقۇقى',
-'exif-copyrighted-false' => 'ئاممىۋى دائىرە',
+'exif-copyrighted-false' => 'نەشىر ھوقۇقى ھالىتى بېكىتىلمىگەن',
 
 'exif-unknowndate' => 'نامەلۇم چېسلا',
 
@@ -3483,7 +3556,7 @@ Variants for Chinese language
 
 # External editor support
 'edit-externally' => 'بۇ ھۆججەتنى سىرتقى قوللىنىشچان پروگراممىدا تەھرىرلە',
-'edit-externally-help' => '( [//www.mediawiki.org/wiki/Manual:External_editors تەڭشەك قەدىمى] نى كۆرۈپ تەپسىلاتىنى چۈشىنىڭ)',
+'edit-externally-help' => '( [https://www.mediawiki.org/wiki/Manual:External_editors تەڭشەك قەدىمى] نى كۆرۈپ تەپسىلاتىنى چۈشىنىڭ)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ھەممىسى',
@@ -3667,8 +3740,9 @@ $5
 'version-hook-subscribedby' => 'ئىمزا قويغۇچى',
 'version-version' => '(نەشرى $1)',
 'version-license' => 'ئىجازەتنامە',
-'version-poweredby-credits' => "بۇ ۋىكىنى '''[//www.mediawiki.org/ MediaWiki]''' تېخنىكىلىق قوللايدۇ، نەشر ھوقۇقى © 2001-$1 $2",
+'version-poweredby-credits' => "بۇ ۋىكىنى '''[https://www.mediawiki.org/ MediaWiki]''' تېخنىكىلىق قوللايدۇ، نەشر ھوقۇقى © 2001-$1 $2",
 'version-poweredby-others' => 'باشقا',
+'version-poweredby-translators' => 'translatewiki.net تەرجىمانلىرى',
 'version-credits-summary' => 'تۆۋەندىكى كىشىنىڭ [[Special:Version|MediaWiki]] غا تۆھپە قوشقانلىقىغا رەھمەت ئېيتىمىز.',
 'version-license-info' => 'MediaWiki ئەركىن يۇمشاق دېتال؛ سىز ئەركىن يۇمشاق دېتال ۋەخپىسىنىڭ ئېلان قىلغان GNU ئاممىباپ ئاممىۋى ئىجازەت ماددىلىرىدىكى بەلگىمىلەرگە ئاساسەن، بۇ پىروگراممىنى قايتا تارقىتىپ ياكى ئۆزگەرتەلەيسىز؛ مەيلى سىز مەزكۇر ئىجازەتنامىنىڭ ئىككىنچى نەشرى ياكى (ئۆزىڭىز تاللىغان) خالىغان كۈندە تارقىتىلغان نەشرىنى ئاساس قىلسىڭىز بولۇۋېرىدۇ.
 
@@ -3682,6 +3756,11 @@ MediaWiki ئىشلىتىش مەقسىتىنى ئاساس قىلىپ ئېلان 
 'version-entrypoints-header-entrypoint' => 'كىرىش نۇقتىسى',
 'version-entrypoints-header-url' => 'URL',
 
+# Special:Redirect
+'redirect-value' => 'قىممىتى:',
+'redirect-file' => 'ھۆججەت نامى',
+'redirect-not-exists' => 'قىممىتى تېپىلمىدى',
+
 # Special:FileDuplicateSearch
 'fileduplicatesearch' => 'تەكرار ھۆججەت ئىزدە',
 'fileduplicatesearch-summary' => 'چاچما (hash) قىممىتىگە ئاساسەن تەكرار ھۆججەت ئىزدە.',
@@ -3734,7 +3813,10 @@ MediaWiki ئىشلىتىش مەقسىتىنى ئاساس قىلىپ ئېلان 
 'tags-tag' => 'خەتكۈچ ئاتى',
 'tags-display-header' => 'ئۆزگەرتىش تىزىملىكىدە كۆرسىتىلىش شەكلى',
 'tags-description-header' => 'مەناسىنىڭ تولۇق چۈشەندۈرۈلۈشى',
+'tags-active-header' => 'ئاكتىپمۇ؟',
 'tags-hitcount-header' => 'بەلگە سېلىنغان ئۆزگەرتىش',
+'tags-active-yes' => 'ھەئە',
+'tags-active-no' => 'ياق',
 'tags-edit' => 'ئۆزگەرتىش',
 'tags-hitcount' => '$1 {{PLURAL:$1|ئۆزگەرتىش|ئۆزگەرتىش}}',
 
@@ -3755,6 +3837,7 @@ MediaWiki ئىشلىتىش مەقسىتىنى ئاساس قىلىپ ئېلان 
 'dberr-problems' => 'كەچۈرۈڭ! بۇ بېكەتتە تېخنىكىلىق قىيىنچىلىق كۆرۈلدى.',
 'dberr-again' => 'بىر قانچە مىنۇت كۈتۈپ ئاندىن قايتا يۈكلەڭ.',
 'dberr-info' => '(ساندان مۇلازىمىتىرىغا ئۇلىنالمىدى:  $1)',
+'dberr-info-hidden' => '(ساندان مۇلازىمېتىرىغا ئۇلىنالمىدى)',
 'dberr-usegoogle' => 'بۇ ۋاقىتتا Google ئىزدىگۈچتىن ئىزدەشنى سىناپ بېقىڭ.',
 'dberr-outofdate' => 'دىققەت ئۇلار ئىندىكېسلىغان مەزمۇن ئەڭ يېڭى بولماسلىقى مۇمكىن.',
 'dberr-cachederror' => 'بۇ ئىلتىماس قىلغان بەتنىڭ غەملەنگەن كۆپەيتىلمىسى، ئەڭ يېڭىسى بولماسلىقى مۇمكىن.',
@@ -3770,14 +3853,17 @@ MediaWiki ئىشلىتىش مەقسىتىنى ئاساس قىلىپ ئېلان 
 'htmlform-submit' => 'تاپشۇر',
 'htmlform-reset' => 'ئۆزگەرتىشتىن يېنىۋال',
 'htmlform-selectorother-other' => 'باشقا',
+'htmlform-no' => 'ياق',
+'htmlform-yes' => 'ھەئە',
+'htmlform-chosen-placeholder' => 'بىرنى تاللاڭ',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 پۈتۈن تېكست ئىزدەشنى قوللايدۇ',
 'sqlite-no-fts' => '$1 پۈتۈن تېكست ئىزدەشنى قوللىمايدۇ',
 
 # New logging system
-'logentry-delete-delete' => '$1 $3 بەتنى ئۆچۈرەتتى',
-'logentry-delete-restore' => '$1 $3 بەتنى ئەسلىگە قايتۇردى',
+'logentry-delete-delete' => '$1 $3 بەتنى {{GENDER:$2|ئۆچۈرىۋەتتى}}',
+'logentry-delete-restore' => '$1 $3 بەتنى {{GENDER:$2|ئەسلىگە قايتۇردى}}',
 'logentry-delete-event' => '$1 ئىشلەتكۈچى $3 دىكى {{PLURAL:$5|خاتىرە ھادىسە}}سىنىڭ كۆۈنۈشچانلىقىنى ئۆزگەرتتى: $4',
 'logentry-delete-revision' => '$1 ئىشلەتكۈچى $3 بەتتىكى {{PLURAL:$5|تۈزىتىلگەن نەشرى}}نىڭ كۆرۈنۈشچانلىقىنى ئۆزگەرتتى: $4',
 'logentry-delete-event-legacy' => '$3 دىكى خاتىرە كۆرۈنۈشچانلىقنى $1 ئۆزگەرتتى',
@@ -3883,4 +3969,10 @@ MediaWiki ئىشلىتىش مەقسىتىنى ئاساس قىلىپ ئېلان 
 'duration-centuries' => '$1 {{PLURAL:$1|ئەسىر}}',
 'duration-millennia' => '$1 {{PLURAL:$1|مىڭ يىل}}',
 
+# Limit report
+'limitreport-cputime' => 'CPU ئىشلەتكەن ۋاقىت',
+'limitreport-cputime-value' => '$1 {{PLURAL:$1|سېكۇنت}}',
+'limitreport-walltime' => 'ئەمەلىي كەتكەن ۋاقىت',
+'limitreport-walltime-value' => '$1 {{PLURAL:$1|سېكۇنت}}',
+
 );
index f426d59..7b20e61 100644 (file)
@@ -774,7 +774,8 @@ $1',
 'invalidtitle-knownnamespace' => 'Неприйнятна назва у просторі імен «$2» і текстом «$3»',
 'invalidtitle-unknownnamespace' => 'Неправильний заголовок з невідомим номером простору імен ($1) і текстом: «$2»',
 'exception-nologin' => 'Не виконано вхід',
-'exception-nologin-text' => 'Ця сторінка чи дія потребує, щоб Ви ввійшли до цієї Вікі.',
+'exception-nologin-text' => 'Необхідно [[Special:Userlogin|увійти]], щоб мати доступ до цієї сторінки або дії.',
+'exception-nologin-text-manual' => 'Потрібно $1, щоб мати доступ до цієї сторінки або дії.',
 
 # Virus scanner
 'virus-badscanner' => "Помилка налаштування: невідомий сканер вірусів: ''$1''",
@@ -1339,19 +1340,19 @@ $3 зазначив таку причину: ''$2''",
 крім випадків, коли були встановлені додаткові обмеження власниками сайту.",
 'revdelete-confirm' => 'Будь ласка, підтвердить, що ви справді бажаєте це здійснити, усвідомлюєте наслідки та робите це згідно з [[{{MediaWiki:Policy-url}}|правилами]].',
 'revdelete-suppress-text' => "Приховування може відбуватися '''лише''' в таких випадках:
-
-* Ð\9dепоÑ\82Ñ\80Ñ\96бна особиста інформація
+* Потенційно наклепницькі відомості
+* Ð\9dедоÑ\80еÑ\87на особиста інформація
 *: ''домашні адреси, номери телефонів, номер паспорта тощо.''",
-'revdelete-legend' => 'УÑ\81Ñ\82ановиÑ\82и Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ\8f',
-'revdelete-hide-text' => 'ТекÑ\81Ñ\82 Ð²Ð¸Ð¿Ñ\80авленÑ\8c',
+'revdelete-legend' => 'Ð\92Ñ\81Ñ\82ановиÑ\82и Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ\8f Ð²Ð¸Ð´Ð¸Ð¼Ð¾Ñ\81Ñ\82Ñ\96',
+'revdelete-hide-text' => 'ТекÑ\81Ñ\82 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\97 Ñ\81Ñ\82оÑ\80Ñ\96нки',
 'revdelete-hide-image' => 'Приховати вміст файлу',
 'revdelete-hide-name' => "Приховати дію та її об'єкт",
-'revdelete-hide-comment' => 'Ð\9fÑ\96дÑ\81Ñ\83мок Ð·Ð¼Ñ\96н',
+'revdelete-hide-comment' => 'Ð\9aоменÑ\82аÑ\80 Ñ\80едагÑ\83ваннÑ\8f',
 'revdelete-hide-user' => "Ім'я автора/IP адреса",
 'revdelete-hide-restricted' => 'Приховати дані також і від адміністраторів',
 'revdelete-radio-same' => '(не змінювати)',
-'revdelete-radio-set' => 'Ð\92идимий',
-'revdelete-radio-unset' => 'Ð\9fÑ\80иÑ\85ований',
+'revdelete-radio-set' => 'Ð\92идимо',
+'revdelete-radio-unset' => 'Ð\9fÑ\80иÑ\85овано',
 'revdelete-suppress' => 'Приховувати дані також і від адміністраторів',
 'revdelete-unsuppress' => 'Зняти обмеження з відновлених версій',
 'revdelete-log' => 'Причина:',
@@ -1506,7 +1507,7 @@ $1",
 'mypreferences' => 'Налаштування',
 'prefs-edits' => 'Кількість редагувань:',
 'prefsnologin' => 'Ви не ввійшли в систему',
-'prefsnologintext' => 'Щоб змінити налаштування користувача, ви повинні <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ввійти до системи]</span>.',
+'prefsnologintext2' => 'Потрібно $1 для налаштування параметрів користувача.',
 'changepassword' => 'Змінити пароль',
 'prefs-skin' => 'Оформлення',
 'skin-preview' => 'Попередній перегляд',
@@ -2551,9 +2552,9 @@ $PAGEINTRO $NEWPAGE
 електронною поштою: $PAGEEDITOR_EMAIL
 через вікі: $PAGEEDITOR_WIKI
 
-Якщо ви не відвідаєте цю сторінку, то в подальшому не будете отримувати сповіщень про наступні редагування. Ви також можете вимкнути налаштування сповіщень для усіх сторінок зі списку спостереження.
+Якщо ви не відвідаєте цю сторінку під своїм обліковим записом, то в подальшому не будете отримувати сповіщень про наступні дії. Ви також можете вимкнути налаштування сповіщень для усіх сторінок зі списку спостереження.
 
-                        Ваша дружня система сповіщення {{grammar:genitive|{{SITENAME}}}}
+Ваша дружня система сповіщення {{grammar:genitive|{{SITENAME}}}}
 
 --
 Зміна налаштувань повідомлень електронною поштою
@@ -2806,9 +2807,11 @@ $1',
 'blockip' => 'Блокування',
 'blockip-title' => 'Блокування користувача',
 'blockip-legend' => 'Блокування користувача',
-'blockiptext' => "Використовуйте форму нижче, щоб заблокувати можливість редагування із зазначеної IP-адреси або або ім'я користувача.
-Це слід робити лише для попередження вандалізму і у відповідності до [[{{MediaWiki:Policy-url}}|правил]].
-Заповніть конкретну причину нижче (наприклад, вкажіть точні сторінки, на яких було зроблено акт вандалізму).",
+'blockiptext' => "Використовуйте форму нижче, щоб заблокувати можливість редагування зазначеній IP-адресі або користувачу.
+Це слід робити лише для запобігання порушенням і у відповідності до [[{{MediaWiki:Policy-url}}|правил]].
+Обов'язково заповніть причину нижче, бажано дати інформативну вичерпну інформацію (наприклад, послатися на конкретні правила, дати посилання на редагування користувача, які призвели до блокування). Можна конкретизувати причину блокування на сторінці обговорення користувача.
+* Якщо ви блокуєте обліковий запис бота, переконайтеся, що ви вимкнули автоблокування (для запобігання автоматичного блокування облікових записів власника бота або інших ботів).
+* Зверніть увагу, що IP-адреси у більшості випадків не варто блокувати на більший за декілька днів термін, щоб під блокування не підпали інші користувачі з таким самим IP. Винятки — частий довготривалий вандалізм.",
 'ipadressorusername' => "IP-адреса або ім'я користувача:",
 'ipbexpiry' => 'Термін:',
 'ipbreason' => 'Причина:',
@@ -3065,7 +3068,7 @@ $1',
 'allmessagesdefault' => 'Стандартний текст',
 'allmessagescurrent' => 'Поточний текст',
 'allmessagestext' => 'Це список усіх системних повідомлень, які доступні в просторі назв «MediaWiki».
-Будь ласка, відвідайте [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] і [//translatewiki.net translatewiki.net], якщо ви хочете зробити внесок до спільної локалізації MediaWiki.',
+Будь ласка, відвідайте [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] і [//translatewiki.net translatewiki.net], якщо ви хочете зробити внесок до спільної локалізації MediaWiki.',
 'allmessagesnotsupportedDB' => "Ця сторінка не може використовуватися, оскільки вимкнена опція '''\$wgUseDatabaseMessages'''.",
 'allmessages-filter-legend' => 'Фільтр',
 'allmessages-filter' => 'Фільтр за внесеними змінами:',
@@ -3226,7 +3229,7 @@ $2',
 'tooltip-undo' => 'Прибрати внесені зміни і показати попередній перегляд. Дозволяє зазначити причину скасування.',
 'tooltip-preferences-save' => 'Зберегти налаштування',
 'tooltip-summary' => 'Введіть короткий опис',
-'tooltip-iwiki' => '$1 — $2',
+'interlanguage-link-title' => '$1 — $2',
 
 # Stylesheets
 'common.css' => '/** Розміщений тут CSS буде застосовуватися до всіх тем оформлення */',
@@ -3292,6 +3295,7 @@ The wiki server can't provide data in a format your client can read.",
 'pageinfo-length' => 'Довжина сторінки (в байтах)',
 'pageinfo-article-id' => 'ID сторінки',
 'pageinfo-language' => 'Мова вмісту сторінки',
+'pageinfo-content-model' => 'Модель вмісту сторінки',
 'pageinfo-robot-policy' => 'Індексація пошуковими системами',
 'pageinfo-robot-index' => 'Індексується',
 'pageinfo-robot-noindex' => 'Не індексується',
@@ -3940,7 +3944,7 @@ $8',
 
 # External editor support
 'edit-externally' => 'Редагувати цей файл, використовуючи зовнішню програму',
-'edit-externally-help' => '(Подробиці див. на сторінці [//www.mediawiki.org/wiki/Manual:External_editors Інструкції з установки зовнішніх редакторів])',
+'edit-externally-help' => '(Подробиці див. на сторінці [https://www.mediawiki.org/wiki/Manual:External_editors Інструкції з установки зовнішніх редакторів])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'всі',
@@ -4047,6 +4051,7 @@ $5
 'ellipsis' => '...',
 'percent' => '$1%',
 'parentheses' => '($1)',
+'quotation-marks' => '„$1“',
 
 # Multipage image navigation
 'imgmultipageprev' => '← попередня сторінка',
@@ -4198,7 +4203,7 @@ $5
 'version-version' => '(Версія $1)',
 'version-svn-revision' => '(r$2)',
 'version-license' => 'Ліцензія',
-'version-poweredby-credits' => "Ця Вікі працює на системі управління вмістом '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Ця Вікі працює на системі управління вмістом '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'інші',
 'version-poweredby-translators' => 'перекладачі translatewiki.net',
 'version-credits-summary' => 'Нам хотілося б відзначити наступних осіб, що зробили внесок у [[Special:Version|MediaWiki]].',
@@ -4241,10 +4246,9 @@ MediaWiki поширюється в надії, що вона буде кори
 
 # Special:SpecialPages
 'specialpages' => 'Спеціальні сторінки',
-'specialpages-note' => '----
-* Звичайні службові сторінки
-* <span class="mw-specialpagerestricted">Сторінки з обмеженим доступом.</span>
-* <span class="mw-specialpagecached">Кешовані сторінки (можуть бути застарілими).</span>',
+'specialpages-note-top' => 'Легенда',
+'specialpages-note' => '* Звичайні службові сторінки
+* <span class="mw-specialpagerestricted">Сторінки з обмеженим доступом.</span>',
 'specialpages-group-maintenance' => 'Технічні звіти',
 'specialpages-group-other' => 'Інші',
 'specialpages-group-login' => 'Вхід до системи / реєстрація',
index cc5d0f7..1a54af9 100644 (file)
@@ -959,7 +959,6 @@ $1",
 'mypreferences' => 'میری ترجیہات',
 'prefs-edits' => 'تدوینات کی تعداد:',
 'prefsnologin' => 'نا داخل شدہ حالت',
-'prefsnologintext' => 'ترجیحات ترتیب دینے کیلئے <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} داخل نوشتہ]</span> ہونا لازمی ہے.',
 'changepassword' => 'کلمۂ شناخت تبدیل کریں',
 'prefs-skin' => 'جِلد',
 'skin-preview' => 'پیش منظر',
index b154b14..f6ae821 100644 (file)
@@ -1657,7 +1657,7 @@ Umumiy omborda [[:$1]] mavjud. Faylning bu nomga qayta nomlanishi faylning umumi
 
 # External editor support
 'edit-externally' => 'Bu faylni tashqi dasturiy ilovalar yordamida tahrirla',
-'edit-externally-help' => "(Batafsil ma'lumotlar uchun [//www.mediawiki.org/wiki/Manual:External_editors bu yerga] qarang)",
+'edit-externally-help' => "(Batafsil ma'lumotlar uchun [https://www.mediawiki.org/wiki/Manual:External_editors bu yerga] qarang)",
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'Barcha',
index 535d622..2953b49 100644 (file)
@@ -1236,7 +1236,6 @@ Prova a métarghe \"all:\" davanti al testo che te serchi par vardar in tuti i n
 'mypreferences' => 'Prefarense',
 'prefs-edits' => 'Nùmaro de modifiche:',
 'prefsnologin' => 'No te ghè eseguìo el login',
-'prefsnologintext' => 'Te ghè da aver eseguìo el <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} login]</span> par poder personalixare le to preferense.',
 'changepassword' => 'Cànbia ła password',
 'prefs-skin' => 'Aspeto grafico',
 'skin-preview' => 'Anteprima',
@@ -2715,7 +2714,7 @@ Nel secondo caso te poli anca doparar un colegamento, par esenpio [[{{#Special:E
 'allmessagesdefault' => 'Testo predefinìo',
 'allmessagescurrent' => 'Testo come che el xe desso',
 'allmessagestext' => "Sta quà l'è na lista de tuti i messagi disponibili nel namespace MediaWiki.
-Par piaser visita [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] se te voli jutarne par la traduzion del software MediaWiki ne le varie lengue.",
+Par piaser visita [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] se te voli jutarne par la traduzion del software MediaWiki ne le varie lengue.",
 'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' no'l xè supportà parché '''\$wgUseDatabaseMessages''' no'l xè ativo.",
 'allmessages-filter-legend' => 'Filtro',
 'allmessages-filter' => 'Filtra par stato de personalixassion:',
@@ -3470,7 +3469,7 @@ I colegamenti dopo, su la stessa riga, i xe considerai come ecession (cioè, pag
 
 # External editor support
 'edit-externally' => 'Modifega sto file usando on programa foresto',
-'edit-externally-help' => '(Par saverghene de pì consultare łe [//www.mediawiki.org/wiki/Manual:External_editors istrusion])',
+'edit-externally-help' => '(Par saverghene de pì consultare łe [https://www.mediawiki.org/wiki/Manual:External_editors istrusion])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tute',
@@ -3646,7 +3645,7 @@ Nota che te pol anca [[Special:EditWatchlist|modificar la lista con l'interfacia
 'version-hook-subscribedby' => 'Sotoscrizioni',
 'version-version' => '(Version $1)',
 'version-license' => 'Licensa',
-'version-poweredby-credits' => "Sta wiki la va con '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Sta wiki la va con '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'altri',
 'version-poweredby-translators' => 'tradutori de translatewiki.net',
 'version-credits-summary' => "Semo contenti de riconosare łe seguenti persone p' 'ver contribuio a [[Special:Version|MediaWiki]].",
@@ -3687,8 +3686,7 @@ Insieme co sto programa te dovaressi 'ver ricevùo na copia de la Licensa Public
 
 # Special:SpecialPages
 'specialpages' => 'Pagine speciali',
-'specialpages-note' => '----
-* Pàjine speciałi normałi.
+'specialpages-note' => '* Pàjine speciałi normałi.
 * <span class="mw-specialpagerestricted">Pàjine speciałi a aceso limità.</span>',
 'specialpages-group-maintenance' => 'Resoconti de manutenzion',
 'specialpages-group-other' => 'Altre pagine speciali',
index a724c1e..0381d52 100644 (file)
@@ -967,7 +967,6 @@ Otkat sil'mnägubale üks-se, miše {{SITENAME}}-saitan sädäimišt voib olda v
 'mypreferences' => 'Järgendused',
 'prefs-edits' => 'Redaktiruindoiden lugu:',
 'prefsnologin' => 'Tö et olgoi kirjutanus sistemha.',
-'prefsnologintext' => 'Teile pidab <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} kirjutadas sistemha]</span>, miše toižetada järgendusid.',
 'changepassword' => 'Peitsanan toižetuz',
 'prefs-skin' => 'Irdnägu',
 'skin-preview' => 'Ezikaclend',
@@ -2762,7 +2761,7 @@ Ku fail redaktiruidihe sändan polhe, erased parametrad voidas erineda nügüdl
 
 # External editor support
 'edit-externally' => 'Redaktiruida nece fail irdprogrammal',
-'edit-externally-help' => '(Kc. [//www.mediawiki.org/wiki/Manual:External_editors seižutamižinstrukcijoid])',
+'edit-externally-help' => '(Kc. [https://www.mediawiki.org/wiki/Manual:External_editors seižutamižinstrukcijoid])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'kaik',
@@ -2934,8 +2933,7 @@ Kävutagat normaline ezikacund.',
 
 # Special:SpecialPages
 'specialpages' => 'Specialižed lehtpoled',
-'specialpages-note' => '----
-* Järgeližed specialižed lehtpoled.
+'specialpages-note' => '* Järgeližed specialižed lehtpoled.
 * <span class="mw-specialpagerestricted">Kaitud specialižed lehtpoled.</span>',
 'specialpages-group-maintenance' => 'Tehnižen holitandan satusenladindad',
 'specialpages-group-other' => 'Toižed specialižed lehtpoled',
index 1d6e405..3b92c70 100644 (file)
@@ -835,12 +835,12 @@ Nếu bạn không yêu cầu gửi mật khẩu mới, hoặc bạn đã nhớ
 'noemailcreate' => 'Bạn cần cung cấp một địa chỉ thư điện tử hợp lệ',
 'passwordsent' => 'Mật khẩu mới đã được gửi tới thư điện tử của thành viên “$1”. Xin đăng nhập lại sau khi nhận thư.',
 'blocked-mailpassword' => 'Địa chỉ IP của bạn bị cấm không được sửa đổi, do đó cũng không được phép dùng chức năng phục hồi mật khẩu để tránh sai phạm.',
-'eauthentsent' => 'Thư xác nhận đã được gửi. Trước khi dùng chức năng nhận thư, bạn cần thực hiện hướng dẫn trong thư xác nhận, để đảm bảo tài khoản thuộc về bạn.',
+'eauthentsent' => 'Thư xác nhận đã được gửi cho địa chỉ thư điện tử được chỉ định. Trước khi bạn có thể nhận thư, bạn cần thực hiện hướng dẫn trong thư để xác nhận tài khoản thuộc về bạn.',
 'throttled-mailpassword' => 'Mật khẩu đã được gửi đến cho bạn trong vòng {{PLURAL:$1|$1 giờ|$1 giờ}} đồng hồ trở lại. Để tránh lạm dụng, chỉ có thể gửi mật khẩu $1 giờ đồng hồ một lần.',
 'mailerror' => 'Lỗi gửi thư : $1',
 'acct_creation_throttle_hit' => 'Ai đó cùng [[địa chỉ IP]] với bạn đã mở {{PLURAL:$1|một tài khoản|$1 tài khoản}} ở đây trong vòng 24 giờ. Vì quy định hạn chế số tài khoản mở trên một địa chỉ IP nên bạn hiện không thể mở thêm được nữa dùng địa chỉ IP này.',
 'emailauthenticated' => 'Địa chỉ thư điện tử của bạn được xác nhận vào lúc $3 $2.',
-'emailnotauthenticated' => 'Địa chỉ thư điện tử của bạn chưa được xác nhận. Chức năng thư điện tử chưa bật.',
+'emailnotauthenticated' => 'Địa chỉ thư điện tử của bạn chưa được xác nhận. Các chức năng sau sẽ không gửi thư điện tử.',
 'noemailprefs' => 'Hãy ghi một địa chỉ thư điện tử trong tùy chọn cá nhân để có thể sử dụng tính năng này.',
 'emailconfirmlink' => 'Xác nhận địa chỉ thư điện tử',
 'invalidemailaddress' => 'Địa chỉ thư điện tử không được chấp nhận vì định dạng thư có vẻ sai.
@@ -1030,7 +1030,7 @@ Có thể nó đã bị di chuyển hoặc xóa đi trong khi bạn đang xem tr
 'accmailtitle' => 'Đã gửi mật khẩu.',
 'accmailtext' => "Một mật khẩu được tạo ngẫu nhiên cho [[User talk:$1|$1]] đã được gửi đến $2. Có thể đổi mật khẩu tại trang ''[[Special:ChangePassword|đổi mật khẩu]]'' sau khi đã đăng nhập.",
 'newarticle' => '(Mới)',
-'newarticletext' => "Bạn đi đến đây từ một liên kết đến một trang chưa tồn tại. Để tạo trang, hãy bắt đầu gõ vào ô bên dưới (xem [[{{MediaWiki:Helppage}}|trang trợ giúp]] để có thêm thông tin). Nếu bạn đến đây do nhầm lẫn, chỉ cần nhấn vào nút '''Lùi''' (''Back'') trong trình duyệt của bạn.",
+'newarticletext' => "Bạn đi đến đây từ một liên kết đến một trang chưa tồn tại. Để tạo trang, hãy bắt đầu gõ vào ô bên dưới (xem [[{{MediaWiki:Helppage}}|trang trợ giúp]] để có thêm thông tin). Nếu bạn đến đây do nhầm lẫn, chỉ cần nhấn vào nút '''Lùi''' (hoặc Trở lại, Quay lại, Back) trong trình duyệt của bạn.",
 'anontalkpagetext' => "----''Đây là trang thảo luận của một người dùng vô danh chưa tạo tài khoản hoặc có tài khoản nhưng không đăng nhập.
 Do đó chúng ta phải dùng một dãy số gọi là địa chỉ IP để xác định anh/chị ta.
 Một địa chỉ IP như vậy có thể có nhiều người cùng dùng chung.
@@ -1275,17 +1275,17 @@ Các quản lý khác ở {{SITENAME}} vẫn có thể truy nhập vào nội du
 'revdelete-suppress-text' => "Việc ẩn giấu '''chỉ''' nên dùng trong các trường hợp sau:
 * Thông tin có thể phỉ báng
 * Thông tin cá nhân không thích hợp
-*: ''địa chỉ nhà và số điện thoại, số an sinh xã hội, v.v.''",
+*: ''địa chỉ nhà và số điện thoại, số chứng minh nhân dân, số an sinh xã hội, v.v.''",
 'revdelete-legend' => 'Thiết lập hạn chế khả kiến',
-'revdelete-hide-text' => 'Ẩn nội dung phiên bản',
+'revdelete-hide-text' => 'Nội dung phiên bản',
 'revdelete-hide-image' => 'Ẩn nội dung tập tin',
 'revdelete-hide-name' => 'Ẩn tác vụ và đích của tác vụ',
-'revdelete-hide-comment' => 'Ẩn tóm lược sửa đổi',
-'revdelete-hide-user' => 'Ẩn tên người dùng hay địa chỉ IP của người viết trang',
+'revdelete-hide-comment' => 'Tóm lược sửa đổi',
+'revdelete-hide-user' => 'Tên người dùng hay địa chỉ IP của người viết trang',
 'revdelete-hide-restricted' => 'Ẩn giấu thông tin khỏi các Quản lý lẫn thành viên khác',
 'revdelete-radio-same' => '(không đổi)',
-'revdelete-radio-set' => '',
-'revdelete-radio-unset' => 'n',
+'revdelete-radio-set' => 'Ẩn',
+'revdelete-radio-unset' => 'Hiện',
 'revdelete-suppress' => 'Che dữ liệu đối với bảo quản viên cũng như các thành viên khác',
 'revdelete-unsuppress' => 'Bỏ các hạn chế trên các phiên bản được phục hồi',
 'revdelete-log' => 'Lý do:',
@@ -1440,7 +1440,6 @@ Xem chi tiết trong [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}
 'mypreferences' => 'Tùy chọn',
 'prefs-edits' => 'Số lần sửa đổi:',
 'prefsnologin' => 'Chưa đăng nhập',
-'prefsnologintext' => 'Bạn phải <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} đăng nhập]</span> để thiết lập tùy chọn cá nhân.',
 'changepassword' => 'Đổi mật khẩu',
 'prefs-skin' => 'Hình dạng',
 'skin-preview' => 'Xem trước',
@@ -2731,9 +2730,10 @@ $1',
 'ipbreason' => 'Lý do:',
 'ipbreasonotherlist' => 'Lý do khác',
 'ipbreason-dropdown' => '*Một số lý do cấm thường gặp
+** Phá hoại
 ** Thêm thông tin sai lệch
 ** Xóa nội dung trang
-** Đăng liên kết thư rác đến trang Web bên ngoài
+** Đăng liên kết thư rác dẫn đến trang Web bên ngoài
 ** Cho thông tin rác vào trang
 ** Có thái độ dọa dẫm/quấy rối
 ** Lạm dụng nhiều tài khoản
@@ -2979,7 +2979,7 @@ Trong trường hợp sau bạn cũng có thể dùng một liên kết, ví d
 'allmessagesdefault' => 'Nội dung mặc định',
 'allmessagescurrent' => 'Nội dung hiện thời',
 'allmessagestext' => 'Đây là toàn bộ thông điệp hệ thống có trong không gian tên MediaWiki.
-Mời vào [//www.mediawiki.org/wiki/Localisation?uselang=vi Địa phương hóa MediaWiki] và [//translatewiki.net/wiki/?uselang=vi translatewiki.net] nếu bạn muốn đóng góp dịch chung cả MediaWiki.',
+Mời vào [https://www.mediawiki.org/wiki/Localisation?uselang=vi Địa phương hóa MediaWiki] và [//translatewiki.net/wiki/?uselang=vi translatewiki.net] nếu bạn muốn đóng góp dịch chung cả MediaWiki.',
 'allmessagesnotsupportedDB' => "Trang này không dùng được vì biến '''\$wgUseDatabaseMessages''' đã bị tắt.",
 'allmessages-filter-legend' => 'Bộ lọc',
 'allmessages-filter' => 'Lọc theo tình trạng sửa đổi:',
@@ -3141,7 +3141,7 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.',
 'tooltip-undo' => '“Lùi lại” sẽ lùi sửa đổi này và mở trang sửa đổi ở chế độ xem trước. Cho phép thêm lý do vào tóm lược.',
 'tooltip-preferences-save' => 'Lưu tùy chọn',
 'tooltip-summary' => 'Hãy nhập câu tóm lược',
-'tooltip-iwiki' => '$1 – $2',
+'interlanguage-link-title' => '$1 – $2',
 
 # Stylesheets
 'common.css' => '/* Mã CSS đặt ở đây sẽ áp dụng cho mọi hình dạng */',
@@ -3206,6 +3206,7 @@ Xin '''ĐỪNG''' điền gì vào!",
 'pageinfo-length' => 'Chiều dài của trang (byte)',
 'pageinfo-article-id' => 'Mã số trang',
 'pageinfo-language' => 'Ngôn ngữ nội dung trang',
+'pageinfo-content-model' => 'Kiểu nội dung trang',
 'pageinfo-robot-policy' => 'Ghi chỉ mục bởi robot',
 'pageinfo-robot-index' => 'Cho phép',
 'pageinfo-robot-noindex' => 'Không cho phép',
@@ -3293,7 +3294,7 @@ Nếu thực thi nó máy tính của bạn có thể bị tiếm quyền.",
 'svg-long-desc' => 'tập tin SVG, $1×$2 điểm ảnh trên danh nghĩa, kích thước: $3',
 'svg-long-desc-animated' => 'tập tin hình động SVG, $1×$2 điểm ảnh trên danh nghĩa, kích thước: $3',
 'svg-long-error' => 'Tập tin SVG có lỗi: $1',
-'show-big-image' => 'Độ phân giải tối đa',
+'show-big-image' => 'Tập tin gốc',
 'show-big-image-preview' => 'Kích thước của hình xem trước: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Độ phân giải|Các độ phân giải}} khác: $1.',
 'show-big-image-size' => '$1×$2 điểm ảnh',
@@ -3810,7 +3811,7 @@ Những thông tin khác mặc định sẽ được ẩn đi.
 
 # External editor support
 'edit-externally' => 'Sửa bằng phần mềm bên ngoài',
-'edit-externally-help' => '(Xem [//www.mediawiki.org/wiki/Manual:External_editors hướng dẫn cài đặt bằng tiếng Anh] để biết thêm thông tin)',
+'edit-externally-help' => '(Xem [https://www.mediawiki.org/wiki/Manual:External_editors hướng dẫn cài đặt bằng tiếng Anh] để biết thêm thông tin)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tất cả',
@@ -3913,6 +3914,7 @@ Xin hãy xác nhận bạn thực sự muốn tạo lại trang này.",
 
 # Separators for various lists, etc.
 'ellipsis' => '…',
+'quotation-marks' => '“$1”',
 
 # Multipage image navigation
 'imgmultipageprev' => '← trang trước',
@@ -4054,7 +4056,7 @@ Bạn cũng có thể [[Special:EditWatchlist|dùng trang sửa đổi bình th
 'version-hook-subscribedby' => 'Được theo dõi bởi',
 'version-version' => '(Phiên bản $1)',
 'version-license' => 'Giấy phép bản quyền',
-'version-poweredby-credits' => "Wiki này chạy trên '''[//www.mediawiki.org/ MediaWiki]''', bản quyền © 2001–$1 $2.",
+'version-poweredby-credits' => "Wiki này chạy trên '''[https://www.mediawiki.org/ MediaWiki]''', bản quyền © 2001–$1 $2.",
 'version-poweredby-others' => 'những người khác',
 'version-poweredby-translators' => 'các biên dịch viên translatewiki.net',
 'version-credits-summary' => 'Chúng tôi muốn công nhận những người sau đã đóng góp vào [[Special:Version|MediaWiki]].',
@@ -4080,7 +4082,7 @@ hoặc [//www.gnu.org/licenses/old-licenses/gpl-2.0.html đọc nó trực tuy
 # Special:Redirect
 'redirect' => 'Đổi hướng đến tập tin, người dùng, hoặc số phiên bản',
 'redirect-legend' => 'Đổi hướng đến tập tin hoặc trang',
-'redirect-summary' => 'Trang đặc biệt này đổi hướng đến một tập tin (theo tên tập tin được cho vào), trang (theo số phiên bản được cho vào), hoặc trang cá nhân (theo số thành viên).',
+'redirect-summary' => 'Trang đặc biệt này đổi hướng đến một tập tin (theo tên tập tin được cho vào), trang (theo số phiên bản được cho vào), hoặc trang cá nhân (theo số thành viên). Cách sử dụng: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], hoặc [[{{#Special:Redirect}}/user/101]].',
 'redirect-submit' => 'Đi',
 'redirect-lookup' => 'Tra cứu:',
 'redirect-value' => 'Giá trị:',
@@ -4102,8 +4104,7 @@ hoặc [//www.gnu.org/licenses/old-licenses/gpl-2.0.html đọc nó trực tuy
 
 # Special:SpecialPages
 'specialpages' => 'Các trang đặc biệt',
-'specialpages-note' => '----
-* Trang đặc biệt thông thường.
+'specialpages-note' => '* Trang đặc biệt thông thường.
 * <strong class="mw-specialpagerestricted">Trang đặc biệt được hạn chế.</strong>
 * <span class="mw-specialpagecached">Trang đặc biệt được lấy từ vùng nhớ đệm (có thể lỗi thời).</span>',
 'specialpages-group-maintenance' => 'Báo cáo bảo quản',
index 11b0ea3..4d5b813 100644 (file)
@@ -541,7 +541,6 @@ Zu deiner Informadion folchd des Lösch- un Verschäibungs-Logbuch miid der Begr
 'mypreferences' => 'Ajschdelunga',
 'prefs-edits' => 'So ofd umgmoodld:',
 'prefsnologin' => 'Ned ôôgmäld',
-'prefsnologintext' => 'Ärschd wen\'d <span class="plainlinks">[{{fullurl:{{#special:UserLogin}}|returnto=$1}} ôôgmäld]</span> bisch, ghôôsch dâj âjschdelungn ändârn.',
 'changepassword' => "S'bhaswôrd ändârn",
 'prefs-skin' => 'Schaale',
 'skin-preview' => 'Môôl schbign',
@@ -1010,7 +1009,7 @@ Bloos  dsajln, dii mi´m dsajchn * ôôfanga, wärn berigsichdichd. Un dä ärsc
 
 # External editor support
 'edit-externally' => 'Dii dadaj mid an ägsdärna brogram ändârn',
-'edit-externally-help' => '(Määr un genauârs dâdsuu baj den [//www.mediawiki.org/wiki/Manual:External_editors Inschdaladsjoonsanwajsungn])',
+'edit-externally-help' => '(Määr un genauârs dâdsuu baj den [https://www.mediawiki.org/wiki/Manual:External_editors Inschdaladsjoonsanwajsungn])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ale',
index a2868eb..cdf855e 100644 (file)
@@ -1007,7 +1007,6 @@ Kontrololös, va votükam at okipon fovöfi padajenotema.',
 'mypreferences' => 'Buükams',
 'prefs-edits' => 'Num redakamas:',
 'prefsnologin' => 'No enunädon oki',
-'prefsnologintext' => 'Nedol <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} nunädön oli]</span> büä kanol votükön gebanabuükamis.',
 'changepassword' => 'Votükön letavödi',
 'prefs-skin' => 'Fomät',
 'skin-preview' => 'Büologed',
@@ -2183,7 +2182,7 @@ Ad seveigön padis, penolös tiädis in penamaspad dono, tiädi bal a kedet, e v
 'allmessagesdefault' => 'Vödem rigädik',
 'allmessagescurrent' => 'Vödem nuik',
 'allmessagestext' => 'Is binon lised sitanunas valik lonöföl in nemaspad: Sitanuns.
-Gebolös [//www.mediawiki.org/wiki/Localisation Topükami ela MediaWiki] ed el [//translatewiki.net translatewiki.net] if vilol keblünön topükame valemik ela MediaWiki.',
+Gebolös [https://www.mediawiki.org/wiki/Localisation Topükami ela MediaWiki] ed el [//translatewiki.net translatewiki.net] if vilol keblünön topükame valemik ela MediaWiki.',
 'allmessagesnotsupportedDB' => "Pad at no kanon pagebön bi el '''\$wgUseDatabaseMessages''' penemögükon.",
 'allmessages-filter-legend' => 'Sul',
 'allmessages-filter-unmodified' => 'Penevotüköl',
@@ -2695,7 +2694,7 @@ Nünabinets votik poklänedons.
 
 # External editor support
 'edit-externally' => 'Votükön ragivi at me nünömaprogram plödik',
-'edit-externally-help' => '(Reidolös eli [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] [in Linglänapük] ad tuvön nünis pluik)',
+'edit-externally-help' => '(Reidolös eli [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] [in Linglänapük] ad tuvön nünis pluik)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'valikis',
@@ -2844,8 +2843,7 @@ Kanol i [[Special:EditWatchlist|gebön redakametodi kösömik]].',
 
 # Special:SpecialPages
 'specialpages' => 'Pads patik',
-'specialpages-note' => '----
-* Pads patik nomik.
+'specialpages-note' => '* Pads patik nomik.
 * <span class="mw-specialpagerestricted">Pads patik pemiedüköl.</span>',
 'specialpages-group-maintenance' => 'Nunods tefü kiped',
 'specialpages-group-other' => 'Pads patik votik',
index 3998ef4..b21667c 100644 (file)
@@ -898,7 +898,7 @@ Kui faili on muutõttu, siiz detaaľid võivad õlla kahõllaizõd muutõtull fa
 
 # External editor support
 'edit-externally' => 'Muuttaa sitä failia ulkopoolizõõ prograammiikaa.',
-'edit-externally-help' => '(Kattsoga [//www.mediawiki.org/wiki/Manual:External_editors praavilõd], kui tahotta lisäinformaattsia.)',
+'edit-externally-help' => '(Kattsoga [https://www.mediawiki.org/wiki/Manual:External_editors praavilõd], kui tahotta lisäinformaattsia.)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'koko istori',
index 7ed5278..53bb760 100644 (file)
@@ -803,7 +803,6 @@ otsisõna iin edejakku ''all:''. Ütest kimmäst nimeruumist otsmisõs pruugiq e
 'mypreferences' => 'Säädmiseq',
 'prefs-edits' => 'Tõimõndamiisi arv:',
 'prefsnologin' => 'Sa olõ-i nimega sisse lännüq',
-'prefsnologintext' => 'Et säädmiisi tetäq, tulõ sul [[Special:UserLogin|nimega sisse minnäq]].',
 'changepassword' => 'Muudaq salasõnna',
 'prefs-skin' => 'Vällänägemine',
 'skin-preview' => 'Kaeminõ',
@@ -1649,7 +1648,7 @@ Viimädse johtumisõ kõrral võit ka pruukiq linki, nt leht {{MediaWiki:Mainpag
 'allmessagesdefault' => 'Vaikimiisi tekst',
 'allmessagescurrent' => 'Parhillanõ tekst',
 'allmessagestext' => 'Taan nimekirän ommaq kõik MediaWiki nimeruumi tallitusteedüseq.
-Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
+Please visit [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
 'allmessagesnotsupportedDB' => "Taad lehte saa-i pruukiq, selle et '''\$wgUseDatabaseMessages'''-säädmine om välän.",
 
 # Thumbnails
@@ -2105,7 +2104,7 @@ Kokkovõttõria pääle või kirotaq tagasivõtmisõ põhjusõ.',
 
 # External editor support
 'edit-externally' => 'Toimõndaq taad teedüstüt välidse programmiga',
-'edit-externally-help' => '(Lisateedüst loeq [//www.mediawiki.org/wiki/Manual:External_editors pruukmisoppusõ lehe päält])',
+'edit-externally-help' => '(Lisateedüst loeq [https://www.mediawiki.org/wiki/Manual:External_editors pruukmisoppusõ lehe päält])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => ', terveq aolugu',
@@ -2207,8 +2206,7 @@ Prooviq harilikku kaehust.',
 
 # Special:SpecialPages
 'specialpages' => 'Tallitusleheküleq',
-'specialpages-note' => '----
-* Hariliguq tallitusleheq.
+'specialpages-note' => '* Hariliguq tallitusleheq.
 * <strong class="mw-specialpagerestricted">Piiredüq tallitusleheq.</strong>',
 'specialpages-group-maintenance' => 'Kõrranpidämisteedüseq',
 'specialpages-group-other' => 'Muuq tallitusleheq',
index 52b3202..0b11e86 100644 (file)
@@ -845,7 +845,6 @@ Vos ploz sayî di mete «all:» pa dvant l' tecse a cweri po cweri dins tot l' c
 'mypreferences' => 'Mes preferinces',
 'prefs-edits' => 'Nombe di candjmints:',
 'prefsnologin' => "Vos n' estoz nén elodjî",
-'prefsnologintext' => 'I vs fåt esse <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} elodjî]</span> po pleur candjî vos preferinces.',
 'changepassword' => "Candjî l' sicret",
 'prefs-skin' => 'Pea',
 'skin-preview' => 'vey divant',
@@ -1803,7 +1802,7 @@ Dins ç' dierin cas, vos ploz eto eployî ene hårdêye, eg: [[{{#Special:Export
 'allmessagesdefault' => 'Tecse prémetou',
 'allmessagescurrent' => 'Tecse pol moumint',
 'allmessagestext' => "Çouchal est ene djivêye des messaedjes sistinme k' i gn a dins l' espåce di lomaedje ''MediaWiki:''.
-Loukîz les pådjes sol [//www.mediawiki.org/wiki/Localisation Locålijhaedje di MediaWiki] et 
+Loukîz les pådjes sol [https://www.mediawiki.org/wiki/Localisation Locålijhaedje di MediaWiki] et 
 [//translatewiki.net/ translatewiki.net] si vos vloz pårticiper avou l' ratournaeje djenerike di MediaWiki.",
 'allmessagesnotsupportedDB' => "'''{{ns:special}}:AllMessages''' n' est nén sopoirté paski '''\$wgUseDatabaseMessages''' est dismetou.",
 'allmessages-filter-legend' => 'Passete',
@@ -2128,7 +2127,7 @@ est raptiti. Les ôtes seront catchîs.
 
 # External editor support
 'edit-externally' => "Candjî ç' fitchî ci avou on dfoûtrin programe",
-'edit-externally-help' => "(Loukîz les [//www.mediawiki.org/wiki/Manual:External_editors instruccions d' apontiaedje] po pus di racsegnes)",
+'edit-externally-help' => "(Loukîz les [https://www.mediawiki.org/wiki/Manual:External_editors instruccions d' apontiaedje] po pus di racsegnes)",
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'totafwait',
index 14db086..ab280d9 100644 (file)
@@ -2076,7 +2076,7 @@ Makikit-an nimo an ginkuhaaan',
 'tooltip-undo' => '"Igpawara an ginbuhat (undo)" in nagbabalik hinin nga pagliwat ngan nabuklad hin pagliwat nga porma ha pahiuna-nga-paggawas nga kahimtang.  Natugot liwat pagdugang hin katadungan ha dinalikyat nga sumat.',
 'tooltip-preferences-save' => 'Tipiga an mga karuyag',
 'tooltip-summary' => 'Pagbutang hin dalikyat nga sumat',
-'tooltip-iwiki' => '$1 – $2',
+'interlanguage-link-title' => '$1 – $2',
 
 # Attribution
 'siteuser' => '{{SITENAME}} gumaramit $1',
@@ -2341,7 +2341,7 @@ An iba in daan nakatago.
 
 # External editor support
 'edit-externally' => 'Igliwat ini nga fayl gamit han gawas nga aplikasyon',
-'edit-externally-help' => '(Kitaa an [//www.mediawiki.org/wiki/Manual:External_editors mga pagtutdo hin pag-ayad] para han dugang nga pananabutan)',
+'edit-externally-help' => '(Kitaa an [https://www.mediawiki.org/wiki/Manual:External_editors mga pagtutdo hin pag-ayad] para han dugang nga pananabutan)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ngatanan',
@@ -2442,7 +2442,7 @@ An iba in daan nakatago.
 'version-hook-name' => 'Ngaran han kawil',
 'version-version' => '(Bersion $1)',
 'version-license' => 'Lisensya',
-'version-poweredby-credits' => "Ini nga wiki in pinapaandar han '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Ini nga wiki in pinapaandar han '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'mga iba',
 'version-software-product' => 'Produkto',
 'version-software-version' => 'Bersyon',
index 092ea9d..9e3a08b 100644 (file)
@@ -912,7 +912,6 @@ Jéemala bindaale ''all'' ngir seet ci biir ëmbit gépp (boolewaale ci xëti wa
 'mypreferences' => 'Samay tànneef',
 'prefs-edits' => 'Limu coppite yi:',
 'prefsnologin' => 'Duggoo',
-'prefsnologintext' => 'Laaj na nga <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} dugg]</span> ngir soppi say tànneef.',
 'changepassword' => 'Coppiteg baatujàll bi',
 'prefs-skin' => 'Melokaan',
 'skin-preview' => 'Wonendil',
@@ -2097,7 +2096,7 @@ Lëkkalekaay yiy toftal, ci wenn rëdd wi, dees leen di jàppee nikiy sette, maa
 
 # External editor support
 'edit-externally' => 'Soppi xët wii ak ab tëriin bu biti',
-'edit-externally-help' => 'Xoolal [//www.mediawiki.org/wiki/Manual:External_editors tegtali camp gi] ngir yeneeni xamle',
+'edit-externally-help' => 'Xoolal [https://www.mediawiki.org/wiki/Manual:External_editors tegtali camp gi] ngir yeneeni xamle',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'yépp',
index 3ca4da0..ded0b9a 100644 (file)
@@ -14,6 +14,7 @@
  * @author Wu-chinese.com
  * @author Xiaomingyan
  * @author Yfdyh000
+ * @author 乌拉跨氪
  * @author 十弌
  */
 
@@ -840,7 +841,7 @@ $3封禁个原因是''$2''",
 'revdelete-show-file-submit' => '是',
 'revdelete-selected' => "'''选取'''[[:$1]]'''个$2趟修订:'''",
 'logdelete-selected' => "'''选取'''$1'''个日志事件:'''",
-'revdelete-text' => "'''删脱个修订仍然将显示拉页面历史里向不过渠拉个文本内容公众已经弗好访问。'''
+'revdelete-text' => "'''删脱个修订仍然将显示拉页面历史里向不过渠拉个文本内容公众已经弗好访问。'''
 垃拉{{SITENAME}}个其他管理员将仍旧好访问隐藏个内容并通过与此相同个界面恢复删除,除非站点工作者添加了附加限制。",
 'revdelete-confirm' => '假使侬想箇能介做个闲话,请确认侬已经清爽箇能介做个后果,外加箇个程序符合[[{{MediaWiki:Policy-url}}|政策]]。',
 'revdelete-suppress-text' => "'''只有'''出现下头眼情况再应阻止访问:
@@ -994,7 +995,6 @@ $1",
 'mypreferences' => '偏好设定',
 'prefs-edits' => '编辑数量:',
 'prefsnologin' => '朆登录',
-'prefsnologintext' => '侬必须先<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 登录]</span>再好设置个人参数。',
 'changepassword' => '改密码',
 'prefs-skin' => '皮肤',
 'skin-preview' => '预览',
@@ -1442,7 +1442,7 @@ $1",
 # Rollback
 'rollback' => '恢复编辑',
 'rollback_short' => '恢复',
-'rollbacklink' => '恢复',
+'rollbacklink' => '回退',
 'rollbackfailed' => '恢复失败',
 'revertpage' => '恢复[[Special:Contributions/$2|$2]] ([[User talk:$2|讲张]])个改动;恢复到[[User:$1|$1]]个上一版本',
 
@@ -1666,7 +1666,7 @@ $1",
 'tooltip-rollback' => '揿一记“回转”就回退到上一位贡献者个编辑状态',
 'tooltip-undo' => '“撤销”可以恢复该编辑并且垃拉预览模式下头打开编辑表单。渠允许垃拉摘要里向说明原因。',
 'tooltip-summary' => '打进短摘要',
-'tooltip-iwiki' => '̩$1 - $2',
+'interlanguage-link-title' => '̩$1 - $2',
 
 # Attribution
 'anonymous' => '{{SITENAME}}浪个匿名用户',
@@ -1740,7 +1740,7 @@ Variants for Chinese language
 
 # External editor support
 'edit-externally' => '用外部应用程序来编辑该只文件',
-'edit-externally-help' => '(请参见[//www.mediawiki.org/wiki/Manual:External_editors 设置步骤]了解详细信息)',
+'edit-externally-help' => '(请参见[https://www.mediawiki.org/wiki/Manual:External_editors 设置步骤]了解详细信息)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => '全部',
index a0edc0c..1cfd90d 100644 (file)
@@ -593,7 +593,6 @@ $1',
 'mypreferences' => 'Көгүд',
 'prefs-edits' => 'Чикллһнә то:',
 'prefsnologin' => 'Та харһв биш',
-'prefsnologintext' => 'Та <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} харһх]</span> кергтә,  тегәд көгүдиг сольҗ чаднат.',
 'changepassword' => 'Нууц үгиг сольҗ',
 'prefs-skin' => 'Хувцнь',
 'skin-preview' => 'Хәләвр',
@@ -1166,7 +1165,7 @@ $2 шидрә һарһлһна төлә хәләтн.',
 
 # External editor support
 'edit-externally' => 'Эн боомгиг һаза заклһар чиклх',
-'edit-externally-help' => '([//www.mediawiki.org/wiki/Manual:External_editors Тәвллһнә заалт]  икәр өггцнә төлә хәләтн)',
+'edit-externally-help' => '([https://www.mediawiki.org/wiki/Manual:External_editors Тәвллһнә заалт]  икәр өггцнә төлә хәләтн)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'цуг',
index d3e036a..fe9c8e0 100644 (file)
@@ -883,7 +883,7 @@ $messages = array(
 
 # External editor support
 'edit-externally' => 'თე ფაილიშ ორედაქტირაფალო გიმირინეთ გალენ პროგრამა',
-'edit-externally-help' => '(უმოს ინფორმაციაშო ქოძირით [//www.mediawiki.org/wiki/Manual:External_editors])',
+'edit-externally-help' => '(უმოს ინფორმაციაშო ქოძირით [https://www.mediawiki.org/wiki/Manual:External_editors])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'არძა',
index 4c40e02..c3cc126 100644 (file)
@@ -608,7 +608,8 @@ $2',
 'invalidtitle-knownnamespace' => 'אומגילטירער טיטל מיט נאמענטייל "$2" און טעקסט "$3"',
 'invalidtitle-unknownnamespace' => 'אומגילטיקער טיטל מיט אומבאוואוסטן נאמענטייל נומער $1 און טעקסט "$2"',
 'exception-nologin' => 'נישט אַרײַנלאגירט',
-'exception-nologin-text' => 'דער בלאט אדער אקציע פֿאדערט אז איר זענט אריינלאגירט ביי דער וויקי.',
+'exception-nologin-text' => 'איר שאפרט זיין [[Special:Userlogin|אריינלאגירט]] to כדי צו קענען צוקומען צו דעם בלאט אדער דער אקציע.',
+'exception-nologin-text-manual' => 'זייט אזוי גוט $1 כדי צו קענען צוקומען צו דעם בלאט אדער דער אקציע.',
 
 # Virus scanner
 'virus-badscanner' => "שלעכטע קאנפֿיגוראציע: אומבאוואוסטער ווירוס איבערקוקער: ''$1''",
@@ -655,7 +656,7 @@ $2',
 'gotaccount' => "האסטו שוין א קאנטע? '''$1'''.",
 'gotaccountlink' => 'אַרײַנלאגירן',
 'userlogin-resetlink' => 'פארגעסן אײַערע אַרײַנלאָגירן פרטים?',
-'userlogin-resetpassword-link' => 'צ×\95ר×\99קש×\98×¢×\9c×\9f ×\90ײַער ×¤×\90ַס×\95×\95×\90ר×\98',
+'userlogin-resetpassword-link' => 'פֿ×\90ַר×\92עס×\9f ×\90ײַער ×¤×\90ַס×\95×\95×\90ר×\98?',
 'helplogin-url' => 'Help:אריינלאגירן',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|הילף מיט אריינלאגירן]]',
 'userlogin-loggedin' => 'איר זענט שוין אריינלאגירט ווי {{GENDER:$1|$1}}.
@@ -733,7 +734,8 @@ $2',
 
 דערפֿאַר קענען באַזוכער וואס באַניצן דעם  IP אַדרעס נישט מער שאַפֿן נײַע קאָנטעס דערווײַל.',
 'emailauthenticated' => 'אייער ע-פאסט אדרעס איז באשטעטיגט געווארן אום $2, $3.',
-'emailnotauthenticated' => 'אײַער ע-פאסט אדרעס איז נאכנישט באשטעטיגט. קיין ע-פאסט וועט נישט ווערן געשיקט פון קיין איינע פון די פאלגנדע אייגנקייטן.',
+'emailnotauthenticated' => 'אײַער ע-פאסט אדרעס איז נאכנישט באשטעטיגט. 
+קיין ע-פאסט וועט נישט ווערן געשיקט פון קיין איינע פון די פאלגנדע אייגנקייטן.',
 'noemailprefs' => 'ספעציפֿירט אן ע־פאסט אַדרעס אין אײַער פרעפֿערענצן כדי די פֿעאיקייטן זאלן אַרבעטן.',
 'emailconfirmlink' => 'באַשטעטיקט אײַער ע-פאסט אַדרעס',
 'invalidemailaddress' => 'דער ע-פאסט אדרעס קען נישט אקצעפטירט ווערן ווייל ער שיינט צו האבן אן אומגילטיגן פֿארמאט.
@@ -1170,9 +1172,10 @@ $2
 'revdelete-text' => "'''אויסגעמעקטע רעוויזיעס און געשעענישן וועלן בלייבן אין דער בלאט היסטאריע און די לאגביכער, אבער טיילן פון זייער אינהאלט וועט ווערן אומגרייכלעך צום קהל. '''
 אנדערע סיסאפן אויף {{SITENAME}} וועלן נאך האבן צוטריט צום באהאלטענעם אינהאלט און קענען אים צוריקשטעלן דורך דעם זעלבן אייבערפלאך,  אחוץ ווען מען שטעלט נאך באגרענעצונגען.",
 'revdelete-confirm' => 'זייט אזוי גוט און באשטעטיקט אז דאס איז טאקע אייער כוונה, אז איר פארשטייט די קאנסעקווענצן, און אז איר טוט דאס לויט  [[{{MediaWiki:Policy-url}}|דער פאליסי]].',
-'revdelete-suppress-text' => "באהאלטן זאל בלויז גענוצט ווערן '''נאר''' אין די פאלגענדע פעלער:
+'revdelete-suppress-text' => "אונטערדרוקן זאל בלויז גענוצט ווערן '''נאר''' אין די פאלגנדע פעלער:
+* אינפארמאציע וואס קען זיין מוציא שם רע
 * אויפדעקונג פון פריוואטקייט אינפארמאציע
-* ''היים אדרעסן, טעלעפאן נומערן, אדער סאשעל סעקיורעטי, א.א.וו.:'''",
+*: ''היים אדרעסן, טעלעפאן נומערן, נאציאנאלע אידענטיפיקאציע נומערן, א.א.וו.''",
 'revdelete-legend' => 'שטעלט ווייזונג באגרענעצונגען',
 'revdelete-hide-text' => 'ווערסיע טעקסט',
 'revdelete-hide-image' => 'באהאלט טעקע אינהאלט',
@@ -1181,8 +1184,8 @@ $2
 'revdelete-hide-user' => "רעדאַקטאר'ס באניצער-נאמען/IP-אַדרעס",
 'revdelete-hide-restricted' => 'באהאלט אינפארמאציע אויך פון אדמיניסטראטורן פונקט ווי פשוטע באנוצער',
 'revdelete-radio-same' => '(נישט ענדערן)',
-'revdelete-radio-set' => '×\96×¢×\91×\90ר',
-'revdelete-radio-unset' => 'פֿ×\90ַר×\91×\90ָר×\92×\9f',
+'revdelete-radio-set' => 'פֿ×\90ַר×\91×\90ָר×\92×\9f',
+'revdelete-radio-unset' => '×\96×¢×\91×\90ר',
 'revdelete-suppress' => 'באַהאַלטן אינפֿארמאַציע פון אַדמיניסטראַטארן ווי אויך אנדערע',
 'revdelete-unsuppress' => 'טוה אפ באגרענעצונגן אין גענדערטע רעוויזיעס',
 'revdelete-log' => 'אורזאַך:',
@@ -1341,7 +1344,6 @@ $1",
 'mypreferences' => 'פּרעפֿערענצן',
 'prefs-edits' => 'צאָל ענדערונגען:',
 'prefsnologin' => 'נישט אריינלאגירט',
-'prefsnologintext' => 'איר דארפט זיין  <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} אריינלאגירט]</span> כדי צו ענדערן באניצער פרעפֿערענצן.',
 'changepassword' => 'טוישן פאַסווארט',
 'prefs-skin' => 'סקין',
 'skin-preview' => 'פארויסדיגע ווייזונג',
@@ -1545,6 +1547,7 @@ $1",
 'right-blockemail' => 'בלאקירן א באַניצער פֿון שיקן ע־פאסט',
 'right-hideuser' => 'בלאקירן באַניצער־נאָמען און פֿאַרבארגן אים',
 'right-ipblock-exempt' => 'ארומגיין IP בלאקן, אויטאבלאקן און גרייך־בלאקן',
+'right-proxyunbannable' => 'ארומגיין אויטאמאטישע בלאקירן פון פראקסיס',
 'right-unblockself' => 'זיך אליין אויפֿשפאַרן',
 'right-protect' => 'ענדערן שוץ ניוואען און רעדאַגירן קאסקאד־געשיצטע בלעטער',
 'right-editprotected' => 'רעדאַגירן בלעטער געשיצט ווי "{{int:protect-level-sysop}}"',
@@ -1556,6 +1559,7 @@ $1",
 'right-editmyusercss' => 'רעדאקטירע אײַערע אייגענע באניצער CSS טעקעס',
 'right-editmyuserjs' => 'רעדאקטירן אײַערע אייגענע באניצער JavaScript טעקעס',
 'right-viewmywatchlist' => 'באקוקן אייער אייגענע אויפפאסונג ליסטע',
+'right-editmywatchlist' => 'רעדאקטירן אייער אייגענע אויפפאסונג ליסטער. טייל פעולות וועלן דאך צולייגן בלעטער אפילו אן דעם רעכט.',
 'right-viewmyprivateinfo' => 'באקוקן אײַער אייגענע פריוואטע דאטן (צ"ב ע־פאסט אדרעס, אמתער נאמען)',
 'right-editmyprivateinfo' => 'רעדאקטירן אײַער אייגענע פריוואטע דאטן (צ"ב ע־פאסט אדרעס, אמתער נאמען)',
 'right-editmyoptions' => 'רעדאקטירן אײַערע אייגענע פרעפערענצן',
@@ -2100,6 +2104,7 @@ $1",
 'listusers' => 'באַניצער ליסטע',
 'listusers-editsonly' => 'ווייזן נאר באניצערס מיט רעדאקטירונגען',
 'listusers-creationsort' => 'סארטירן לויט דער שאַפן דאַטע',
+'listusers-desc' => 'סארטירן אין אראפרשטייגעדיקן סדר',
 'usereditcount' => '{{PLURAL:$1|רעדאַקטירונג|$1 רעדאַקטירונגען}}',
 'usercreated' => '{{GENDER:$3|געשאַפֿן}} אום $2, $1',
 'newpages' => 'נייע בלעטער',
@@ -2315,7 +2320,7 @@ $PAGEINTRO $NEWPAGE
 ע-פאסט: $PAGEEDITOR_EMAIL
 וויקי: $PAGEEDITOR_WIKI
 
-עס ×\95×\95×¢×\98 ×\9eער × ×\99ש×\98 ×\96×\99×\99×\9f ×§×\99×\99×\9f ×\9e×¢×\9c×\93×\95× ×\92×¢×\9f ×\90×\99×\9f ×¤×\90×\9c ×¤×\95×\9f × ×\90×\9a ×¢× ×\93ער×\95× ×\92×¢×\9f × ×\90ר ×\90×\95×\99×\91 ×\90×\99ר ×\95×\95×¢×\98 ×\91×\90×\96×\95×\9b×\9f ×\93×¢×\9d ×\91×\9c×\90ט.
+עס ×\95×\95×¢×\98 ×\9eער × ×\99ש×\98 ×\96×\99×\99×\9f ×§×\99×\99×\9f ×\9e×¢×\9c×\93×\95× ×\92×¢×\9f ×\90×\99×\9f ×¤×\90×\9c ×¤×\95×\9f × ×\90×\9a ×\90ק×\98×\99×\95×\95×\99×\98×¢×\98 × ×\90ר ×\90×\95×\99×\91 ×\90×\99ר ×\95×\95×¢×\98 ×\91×\90×\96×\95×\9b×\9f ×\93×¢×\9d ×\91×\9c×\90×\98 ×\95×\95×¢×\9f ×\90ר×\99×\99× ×\9c×\90×\92×\99רט.
 איר קענט אויך צוריקשטעלן די מעלדונגען פאנען פון אלע אייערע אויפֿגעפאסטע בלעטער אין אייער אויפפאסונג ליסטע.
 
 אייער פֿריינטליכע  {{SITENAME}} מעלדונגען סיסטעם
@@ -2828,7 +2833,7 @@ $1',
 
 סיסאפן קענען ענדערן די מעלדונגען דורך דרוקן אויפן נאמען פון דער מעלדונג.
 
-ביטע באזוכט [//www.mediawiki.org/wiki/Localisation מעדיעוויקי לאקאליזאציע] און [//translatewiki.net בעטאוויקי] אויב איר ווילט ביישטייערן צו דער גענערישער מעדיעוויקי לאקאליזאציע.',
+ביטע באזוכט [https://www.mediawiki.org/wiki/Localisation מעדיעוויקי לאקאליזאציע] און [//translatewiki.net בעטאוויקי] אויב איר ווילט ביישטייערן צו דער גענערישער מעדיעוויקי לאקאליזאציע.',
 'allmessagesnotsupportedDB' => 'מען קען זיך נישט באניצן מיט דעם בלאט וויבאלד די $wgUseDatabseMessages איז געווארן בטל.',
 'allmessages-filter-legend' => 'פילטער',
 'allmessages-filter' => 'פֿילטערן לויטן סטאטוס פון מעלדונג:',
@@ -3122,7 +3127,7 @@ $1',
 'file-nohires' => 'נישטא מיט א העכערער רעזאלוציע.',
 'svg-long-desc' => 'טעקע SVG, נאמינעל: $1 × $2 פיקסעלן, טעקע גרייס: $3',
 'svg-long-error' => 'אומגילטיקע SVG טעקע: $1',
-'show-big-image' => '×\91×\99×\9c×\93 ×\9e×\99×\98 ×\93ער ×\92רעס×\98ער ×¨×¢×\96×\90×\9c×\95צ×\99ע',
+'show-big-image' => '×\90ר×\92×\99× ×¢×\9c×¢ ×\98עקע',
 'show-big-image-preview' => 'גרייס פון דעם פארויסקוק: $1.',
 'show-big-image-other' => '{{PLURAL:$2|אנדער רעזאלוציע|אנדערע רעזאלוציעס}}: $1.',
 'show-big-image-size' => '$1 × $2 פיקצעלן',
@@ -3529,7 +3534,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'רעדאַקטירט די טעקע מיט א דרויסנדיגער אַפליקאַציע',
-'edit-externally-help' => 'זעט די [//www.mediawiki.org/wiki/Manual:External_editors אויפֿשטעל אנווייזונגען] פאר מער אינפארמאציע.',
+'edit-externally-help' => 'זעט די [https://www.mediawiki.org/wiki/Manual:External_editors אויפֿשטעל אנווייזונגען] פאר מער אינפארמאציע.',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'אַלע',
@@ -3768,8 +3773,7 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'ספּעציעלע זײַטן',
-'specialpages-note' => '----
-* נארמאַלע באַזונדערע בלעטער.
+'specialpages-note' => '* נארמאַלע באַזונדערע בלעטער.
 * <strong class="mw-specialpagerestricted">באַגרענעצטע באַזונדערע בלעטער.</strong>
 * <span class="mw-specialpagecached">באַזונדערע בלעטער פֿון זאַפאַס (קענען זײַן פֿאַרעלטערט).</span>',
 'specialpages-group-maintenance' => 'אויפֿהאַלטונג באַריכטן',
index 1d2c0b2..13eb68f 100644 (file)
@@ -60,12 +60,12 @@ $messages = array(
 'tog-hidepatrolled' => 'Ìbòmọ́lẹ̀ àwọn àtúnṣe oníìṣọ́ nínú àwọn àtúnṣe tuntun',
 'tog-newpageshidepatrolled' => 'Ìbòmọ́lẹ̀ àwọn ojúewé oníìṣọ́ lọ́dọ̀ àtòjọ ojúewé tuntun',
 'tog-extendwatchlist' => "Ìfẹ̀ àmójútó láti ṣ'àfihàn gbogbo àtúnṣe, kìí ṣe tuntun nìkan",
-'tog-usenewrc' => 'Ìtò àwọn àtúnṣe gẹ́gẹ́bí ojúewé nínú àwọn àtúnṣe tuntun àti ìmújútó (JavaScript pọndandan)',
+'tog-usenewrc' => 'Ìtò àwọn àtúnṣe gẹ́gẹ́bí ojúewé nínú àwọn àtúnṣe tuntun àti ìmújútó',
 'tog-numberheadings' => 'Àwọn àkọlé nọmba-araẹni',
-'tog-showtoolbar' => 'Ìfihàn pẹpẹ irinṣẹ́ àtúnṣe (JavaScript pọndandan)',
-'tog-editondblclick' => "Ṣ'àtúnṣe àwọn ojúewé ní kíkàn lẹ́mẹjì (JavaScript)",
+'tog-showtoolbar' => 'Ìfihàn pẹpẹ irinṣẹ́ àtúnṣe',
+'tog-editondblclick' => "Ṣ'àtúnṣe àwọn ojúewé ní kíkàn lẹ́mẹjì",
 'tog-editsection' => 'Ìgbàláyè àtúnṣe abala láti inú [àtúnṣe] àwọn àjápọ̀',
-'tog-editsectiononrightclick' => 'Ìgbàláyè àtúnṣe abala nípa klííkì ọ̀tún lórí àkọlé abala (JavaScript pọndandan)',
+'tog-editsectiononrightclick' => 'Ìgbàláyè àtúnṣe abala nípa klííkì ọ̀tún lórí àkọlé abala',
 'tog-showtoc' => 'Ìfihàn tábìlì àkóónú (fún àwọn ojúewé tó ní ju orí ọ̀rọ̀ 3 lọ)',
 'tog-rememberpassword' => "Ṣè'rántí àkọọ́lẹ̀ ìwọlé mi lórí agbétàkùn yìí (fún {{PLURAL:$1|ọjọ́|ọjọ́}} $1 pípẹ́jùlọ)",
 'tog-watchcreations' => "Ṣ'àfikún ojúewé tí mo dá àti àwọn fáìlì tí mo rùsókè mọ́ ìmójútó mi",
@@ -83,7 +83,7 @@ $messages = array(
 'tog-shownumberswatching' => "S'àfihàn iye àwọn oníṣe tí wọn tẹjú mọ́ọ",
 'tog-oldsig' => 'Ìtọwọ́bọ̀wé tówà:',
 'tog-fancysig' => 'Ṣe ìtọwọ́bọ̀wé bíi ìkọ wiki (láìní ìjápọ̀ fúnrararẹ̀)',
-'tog-uselivepreview' => 'Ìlo àkọ́kọ́yẹ̀wò lẹ́ṣẹ̀kẹṣẹ̀ (JavaScript pọndandan) (aládànhánwò)',
+'tog-uselivepreview' => 'Ìlo àkọ́kọ́yẹ̀wò lẹ́ṣẹ̀kẹṣẹ̀ (àdánwò)',
 'tog-forceeditsummary' => 'Kìlọ̀ fún mi tí àkótán àtúnṣe bá jẹ́ òfo',
 'tog-watchlisthideown' => 'Ìbòmọ́lẹ̀ àwọn àtúnṣe mi nínú ìmójútó',
 'tog-watchlisthidebots' => 'Ìbòmọ́lẹ̀ àwọn àtúnṣe bot nínú ìmójútó',
@@ -196,7 +196,7 @@ $messages = array(
 'newwindow' => '(yíò sí nínú fèrèsè tuntun)',
 'cancel' => 'Fagilé',
 'moredotdotdot' => 'Ẹ̀kúnrẹ́rẹ́...',
-'morenotlisted' => 'Àtòjọ kíkúnrẹ́rẹ́ kò sí...',
+'morenotlisted' => 'Àtòjọ yìí kò kúnrẹ́rẹ́.',
 'mypage' => 'Ojúewé',
 'mytalk' => 'Ọ̀rọ̀',
 'anontalk' => 'Ọ̀rọ̀ fún IP yí',
@@ -269,7 +269,7 @@ $messages = array(
 'articlepage' => 'Ìfihàn àkóónú ojúewé',
 'talk' => 'Ìfọ̀rọ̀wérọ̀',
 'views' => 'Àwọn ìwò',
-'toolbox' => 'Àpótí irinṣẹ',
+'toolbox' => 'Àwọn irinṣẹ́',
 'userpage' => 'Wo ojúewé oníṣe',
 'projectpage' => 'Wo ojúewé iṣẹ́ọwọ́',
 'imagepage' => 'Wo ojúewé fáìlì',
@@ -299,7 +299,7 @@ $1',
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
 'aboutsite' => 'Nípa {{SITENAME}}',
 'aboutpage' => 'Project:Nípa',
-'copyright' => 'Gbogbo ohun inú ibí yìí wà lábẹ́  $1.',
+'copyright' => 'Gbogbo ohun inú ibí yìí wà lábẹ́ $1 àyàfi tí a bá sọ pé kò rí bẹ̀ẹ̀.',
 'copyrightpage' => '{{ns:project}}:Ẹ̀tọ́àwòko',
 'currentevents' => 'Ìṣẹ̀lẹ̀ lọ́wọ́lọ́wọ́',
 'currentevents-url' => 'Project:Ìṣẹ̀lẹ̀ lọ́wọ́lọ́wọ́',
@@ -460,10 +460,9 @@ Olùṣeàmójútó tó típa ṣe àlàyé yìí: "$3".',
 'virus-unknownscanner' => 'ògùn-kòkòrò àìmọ̀:',
 
 # Login and logout pages
-'logouttext' => "'''Ẹ ti bọ́sọ́de.'''
+'logouttext' => "'''Ẹ ti sọ́de.'''
 
-Ẹ le tẹ̀síwájú sí ní lo {{SITENAME}} láìmorúkọ yín, tàbí kí ẹ <span class='plainlinks'>[$1 padà wọlé]</span> bí ẹnikanan tàbí ẹlòmíràn.
-Àkíyèsí wípé àwọn ojúewé kan le hàn b'ígbà tójẹ́pé ẹ sì wọlé títí tí ẹ ó fi jọ̀wọ́ cache browser yín.",
+Àkíyèsí wípé àwọn ojúewé kan le hàn b'ígbà tójẹ́pé ẹ sì wà ní ìjáwọlé títí tí ẹ ó fi jọ̀wọ́ cache browser yín.",
 'welcomeuser' => 'Ẹ kú àbọ̀, $1!',
 'welcomecreation-msg' => "A ti ṣ'èdá àpamọ́ yín.
 Ẹ mọ́ gbàgbé l'áti ṣ'àtúnṣe [[Special:Preferences|{{SITENAME}} àwọn ìfẹ́ràn]] yín.",
@@ -499,7 +498,7 @@ Olùṣeàmójútó tó típa ṣe àlàyé yìí: "$3".',
 'gotaccount' => "Ṣé ẹ ti ní àpamọ́ tẹ́lẹ̀? '''$1'''.",
 'gotaccountlink' => "Ẹ w'ọlé",
 'userlogin-resetlink' => 'À bí ẹ gbàgbé ìwọlé yín?',
-'userlogin-resetpassword-link' => 'Ìtúntò ọ̀rọ̀ìpamọ́ yín',
+'userlogin-resetpassword-link' => 'Ṣé ẹ ti gbàgbé ọ̀rọ̀ìpamọ́ yín?',
 'helplogin-url' => 'Help:Ìwolé',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Ìrànlọ́wọ́ láti ìwọlé]]',
 'createacct-join' => 'Ẹ kọ ìsọ̀rọ̀nípa yín sísàlẹ̀',
@@ -564,16 +563,16 @@ tí ẹ kò sì fẹ́ yípadà mọ́, ẹ mọ́ kọbiara sí ìránṣẹ́
 'passwordsent' => 'A ti fi ọ̀rọ̀ìpamọ́ tuntun ránṣẹ́ sí ojúọ̀nà e-mail tí a fisílẹ̀ fún "$1".
 Ẹ jọ̀wọ́ ẹ padà wọlé tí ẹ bá ti gbàá.',
 'blocked-mailpassword' => 'Àdírẹ́sì IP yín jẹ́ dídèlọ́nà láti ṣàtúnṣe, nípa báyìí kò ní ààyè láti lo ìfigbéṣe ìtúnwárí ọ̀rọ̀ìpamọ́ kó le dínà ìbàjẹ́.',
-'eauthentsent' => 'A ti fi e-mail ìmúdájú ránṣẹ́ sí àdírẹ́ẹ̀sì e-mail tí ẹ fi sílẹ̀.
-Kí á tó fi e-mail mìíràn ránṣẹ́ sí àkópamọ́ yìí, ẹ gbọ́dọ̀ tẹ̀lé àwọn ìlànà inú e-mail ọ̀ún, láti múdájú pé àkópamọ́ ọ̀ún jẹ́ ti yín lóòótọ́.',
+'eauthentsent' => 'A ti fi e-mail ìṣàmúdájú ránṣẹ́ sí àdírẹ́ẹ̀sì e-mail tí ẹ fi sílẹ̀.
+Kí á tó fi e-mail mìíràn ránṣẹ́ sí àkópamọ́ yìí, ẹ gbọ́dọ̀ tẹ̀lé àwọn ìlànà inú e-mail ọ̀ún, láti ṣàmúdájú pé àkópamọ́ ọ̀ún jẹ́ ti yín lóòótọ́.',
 'throttled-mailpassword' => 'Email ìtúntò ọ̀rọ̀ìpamọ́ kan tilẹ̀ ti jẹ́ fífiránṣẹ́, láàrin {{PLURAL:$1|wákàtí kan|wákàtí $1}} ṣẹ́yìn.
 Láti dínà àlòbàjẹ́, email ìtúntò ọ̀rọ̀ìpamọ́ kan péré ni yíò jẹ́ fífiránṣẹ́ láàrin {{PLURAL:$1|wákàtí kọ̀ọ̀kan|wákàtí $1}}.',
 'mailerror' => 'Àsìṣe ìfiránṣẹ́: $1',
 'acct_creation_throttle_hit' => 'Àwọn aṣàbẹ̀wò sí wiki yìí tí wọ́n únlo àdírẹ́sì IP yín ti dá {{PLURAL:$1|àpamọ́ 1|àpamọ́ $1}} láàrin ọjọ́ tókọjá, èyí ni púpọ̀jùlọ tó jẹ́ gbígbà ní ààyè láàrin gbà àsìkò yìí.
 Nítorí èyí, àwọn aṣàbẹ̀wò tí wọ́n únlo àdírẹ́sì IP yìí kò le dá àpamọ́ báyìí.',
-'emailauthenticated' => 'Àdírẹ́ẹ̀sì e-mail yín ti fidájú ní ago $3 ọjọ́ $2.',
-'emailnotauthenticated' => 'Ã\80dírẹÌ\81sì e-mail yín kò Ã¬ jẹÌ\81 fífidájú.
-E-mail kankan kò ní jẹ́ fífiránṣẹ́ fún ìkankan nínú àwọn ìní wọ̀nyí.',
+'emailauthenticated' => 'Àdírẹ́ẹ̀sì e-mail yín ti jẹ́ ìmúdájú ní ago $3 ní ọjọ́ $2.',
+'emailnotauthenticated' => 'Ã\80dírẹÌ\81sì e-mail yín kò Ã­ tíì jẹÌ\81 Ã¬múdájú.
+E-mail kankan kò ní jẹ́ fífiránṣẹ́ fún ìkankan nínú àwọn ojúìní wọ̀nyí.',
 'noemailprefs' => 'Ẹ pèsè àdírẹ́sì e-mail kan nínú àwọn ìfẹ́ràn yín fún àwọn ìní yìí le ba ṣiṣẹ́.',
 'emailconfirmlink' => 'Ìmúdájú àdírẹ́ẹ̀sì e-mail yín',
 'invalidemailaddress' => 'Àdírẹ́sì e-mail náà kò ṣe é gbà torípé ó dà bi pé irú rẹ̀ kò tọ́.
@@ -588,8 +587,8 @@ E-mail kankan kò ní jẹ́ fífiránṣẹ́ fún ìkankan nínú àwọn ìn
 
 Ẹ le fojúfo ìránṣẹ́ yìí, tó bá jẹ́ pé àpamọ́ yìí jẹ́ dídá nítorí àsìṣe.',
 'usernamehasherror' => 'Orúkọ oníṣe yín kò gbọdọ̀ ní àmílẹ́tà hash',
-'login-throttled' => 'Ẹ ti gbìyànjú bó ṣe yẹ lọ láti wọlé.
-Ẹ jọ̀wọ́ ẹ dúró ná kí ẹ tó gbìyànjú lẹ́ẹ̀kan síi.',
+'login-throttled' => 'Ẹ ti gbìyànjú lọ́pọ̀ bó ṣe yẹ lọ láti jáwọlé.
+Ẹ jọ̀wọ́ ẹ dúró fún $1 ná kí ẹ tó tún gbìyànjú lẹ́ẹ̀kan síi.',
 'login-abort-generic' => 'Ìwọlé yín kò yọrísírere - ó ti jẹ́ kíkáwọ́dà',
 'loginlanguagelabel' => 'Èdè: $1',
 'suspicious-userlogout' => 'Ìtọrọ tí ẹ ṣe láti bọ́sóde jẹ̀ kíkọ̀ nítorípé ó dà bí pé ó jẹ́ fífiránṣẹ́ látọ̀dọ̀ awòtakùn (browser) àìdára tàbí ẹ̀rọ-ìwọ̀fà ìmúpamọ́ onígbàdíẹ̀.',
@@ -608,7 +607,7 @@ Láti parí ìmúwọlẹ́, ẹ gbọ́dọ̀ ṣètò ọ̀rọ̀ìpamọ́ tu
 'newpassword' => 'Ọ̀rọ̀ìpamọ́ tuntun:',
 'retypenew' => 'Àtúntẹ̀ ọ̀rọ̀ìpamọ́ tuntun:',
 'resetpass_submit' => 'Ẹ ṣe àtúntò ọ̀rọ̀ìpamọ́ kí ẹ tó wọlé',
-'changepassword-success' => 'Ìyípadà ọ̀rọ̀ìpamọ́ yín ti já sí rere! Ẹ̀ ún wọlé lọ́wọ́...',
+'changepassword-success' => 'Ìyípadà ọ̀rọ̀ìpamọ́ yín ti já sí rere!',
 'resetpass_forbidden' => 'Àwọn ọ̀rọ̀ìpamọ́ kò ṣe é yípadà',
 'resetpass-no-info' => 'Ẹ gbọ́dọ̀ wọlẹ́ láti le lọ sí ojúewé yìí tààrà.',
 'resetpass-submit-loggedin' => 'Ìyípadà ọ̀rọ̀ìpamọ́',
@@ -645,7 +644,7 @@ $2
 Ọ̀rọ̀ìpamọ́ ìgbàdíẹ̀: $2',
 'passwordreset-emailsent' => 'E-mail àtúntò ọ̀rọ̀ìpamọ́ ti jẹ́ fífiránṣẹ́.',
 'passwordreset-emailsent-capture' => 'E-mail àtúntò ọ̀rọ̀ìpamọ́ kan ti jẹ́ fífiránṣẹ́. Òhun nìyí nísàlẹ̀.',
-'passwordreset-emailerror-capture' => 'E-mail ìránlétì jẹ́ dídá, òhun lóhàn nísàlẹ̀ yìí, sùgbọ́n ìfiránṣẹ́ rẹ̀ sí oníṣe náà kùnà: $1',
+'passwordreset-emailerror-capture' => 'E-mail ìyípadà ọ̀rọ̀ìpamọ́ jẹ́ dídá, òhun lóhàn nísàlẹ̀ yìí, sùgbọ́n ìfiránṣẹ́ rẹ̀ sí {{GENDER:$2|oníṣe}} náà kùnà: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Ìyípadà àdírẹ̀sì E-mail',
@@ -738,9 +737,7 @@ $1 ni ó ṣe ìdínà.
 'loginreqlink' => 'wọlé',
 'loginreqpagetext' => 'Ẹ gbọ́dọ̀ $1 láti wo àwọn ojúewé míràn.',
 'accmailtitle' => 'Ti fi ọ̀rọ̀ìpamọ́ ránṣẹ́.',
-'accmailtext' => "A ti fi ọ̀rọ̀ìpamọ́ àrìnàkò tí a pèsè fún [[User talk:$1|$1]] ránṣẹ́ sí $2.
-
-Ẹ le ṣe àyípadà ọ̀rọ̀ìpamọ́ fún àpamọ́ tuntun yìí ní ''[[Special:ChangePassword|change password]]'' lẹ́yìn tí ẹ bá ti wọlé.",
+'accmailtext' => "A ti fi ọ̀rọ̀ìpamọ́ àrìnàkò tí a pèsè fún [[User talk:$1|$1]] ránṣẹ́ sí $2. Ẹ le ṣe àyípadà ọ̀rọ̀ìpamọ́ fún àpamọ́ tuntun yìí ní ibi ''[[Special:ChangePassword|àyípadà ọ̀rọ̀ìpamọ́]]'' lẹ́yìn tí ẹ bá ti jáwọlé.",
 'newarticle' => '(Tuntun)',
 'newarticletext' => "Ẹ ti tẹ̀lé ìjápọ̀ mọ́ ojúewé tí kò sí.
 Láti dá ojúewé yí ẹ bẹ̀rẹ̀ síní tẹ́kọ sí inú àpótí ìsàlẹ̀ yí (ẹ wo [[{{MediaWiki:Helppage}}|ojúewé ìrànlọ́wọ́ ]] fun ẹ̀kúnrẹ́rẹ́ ).
@@ -1001,15 +998,15 @@ Tó bá jẹ́ pé ẹ ti wọlé, ẹ lè dẹ́kun ìkìlọ̀ yìí nínù ab
 *Ọ̀rọ̀ ẹnìẹlẹ́ni tí kò bójúmu
 *: ''àdírẹ́ẹ̀sì ilé àti nọ́mbà tẹlifóònù, àti bẹ́ẹ̀bẹ́ẹ̀ lọ.''",
 'revdelete-legend' => 'Ìtò àwọn àlà ìhàn',
-'revdelete-hide-text' => 'Ìbòmọ́lẹ̀ ìkọ̀ àtúnyẹ̀wò',
+'revdelete-hide-text' => 'Ìkọ̀rọ̀ àtúnyẹ̀wò',
 'revdelete-hide-image' => 'Ìbòmọ́lẹ̀ àkóónú fáìlì',
 'revdelete-hide-name' => 'Ìbòmọ́lẹ̀ ìgbéṣe àti wíwá',
-'revdelete-hide-comment' => 'Ã\8cbòmá»\8dÌ\81lẹÌ\80 Ã ríwí Ã túná¹£e',
-'revdelete-hide-user' => 'Ìbòmọ́lẹ̀ orúkọ oníṣe/IP olóòtú',
+'revdelete-hide-comment' => 'Ã\80túná¹£e Ã kótán',
+'revdelete-hide-user' => 'Orúkọ oníṣe/àdírẹ́ẹ̀sì IP olùtúnṣe',
 'revdelete-hide-restricted' => 'Ìbòmọ́lẹ̀ àwọn ìpèsè ti àwọn alámùójútó àti ti àwọn yìókù',
 'revdelete-radio-same' => '(láì yípadà)',
-'revdelete-radio-set' => 'Bẹ́ẹ̀ni',
-'revdelete-radio-unset' => 'Bẹ́ẹ̀kọ́',
+'revdelete-radio-set' => 'Híhàn',
+'revdelete-radio-unset' => 'Bíbòmọ́lẹ̀',
 'revdelete-suppress' => 'Ìbòmọ́lẹ̀ àwọn ìpèsè ti àwọn alámùójútó àti ti àwọn yìókù',
 'revdelete-unsuppress' => 'Ìyọkúrò àlà sí àwọn àtúnyẹ̀wò àdápadà',
 'revdelete-log' => 'Ìdíẹ̀:',
@@ -1167,7 +1164,6 @@ Ní báyìí ná ẹ le ṣàwárí lọ́dọ̀ Google.
 'mypreferences' => 'Àwọn ìfẹ́ràn',
 'prefs-edits' => 'Iye àwọn àtúnṣe:',
 'prefsnologin' => 'Ẹ kò tíì wọlé',
-'prefsnologintext' => 'Ẹ gbọ́dọ̀ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} wọlé]</span> láti to àwọn ìfẹ́ràn oníṣe.',
 'changepassword' => 'Ìyípadà ọ̀rọ̀ìpamọ́',
 'prefs-skin' => 'Skin (Àwọ̀)',
 'skin-preview' => 'Àkọ́yẹ̀wò',
@@ -1192,7 +1188,7 @@ Ní báyìí ná ẹ le ṣàwárí lọ́dọ̀ Google.
 'prefs-rendering' => 'Wíwò',
 'saveprefs' => 'Ìmúpamọ́',
 'resetprefs' => 'Ìpalẹ̀mọ́ àwọn àyípadà àìmúpamọ́',
-'restoreprefs' => 'Ìdápadà áwọn ìtò àtìbẹ̀rẹ̀',
+'restoreprefs' => 'Ìdápadà gbogbo áwọn ìtò àtìbẹ̀rẹ̀ (nínú gbogbo àwọn abala)',
 'prefs-editing' => 'Àtúnṣe ṣíṣẹ',
 'rows' => 'Àwọn ìtẹ̀lé gbọlọjọ:',
 'columns' => 'Àwọn ìtẹ̀lé gogoro:',
@@ -1249,10 +1245,10 @@ Kò ní ṣeé dápadà mọ́.',
 Ẹ yẹ àwọn àlẹ̀mọ́ HTML wò.',
 'badsiglength' => 'Ìtọwọ́bọ̀ yín ti gùnjù.
 Kò gbodọ̀ ju $1 {{PLURAL:$1|àmìlẹ́tà|àwọn àmìlẹ́tà}} lọ.',
-'yourgender' => 'Akọmbábo:',
-'gender-unknown' => 'Àláìtọ́kasí',
-'gender-male' => 'Akọ',
-'gender-female' => 'Abo',
+'yourgender' => 'Báwo lẹ ṣe fẹ́ kí á ṣe ìjúwe yín?',
+'gender-unknown' => 'Un kò fẹ́ sọ',
+'gender-male' => 'Ó ṣe àtúnṣe àwọn ojúewé wiki',
+'gender-female' => 'Ó ṣe àtúnṣe àwọn ojúewé wiki',
 'prefs-help-gender' => 'Alásàyàn: Lílò fún pípe akọtabo látọwọ́ atòlànà kọ̀mpútà.
 Èyí yíò hàn sí ìgboro.',
 'email' => 'E-mail',
@@ -2685,7 +2681,7 @@ Láti ṣàkójáde àwọn ojúewé, ẹ tẹ àkọlé wọn sínú àpótí 
 'allmessagesdefault' => 'Ìkọ ìránṣẹ́ àtìbẹ̀rẹ̀',
 'allmessagescurrent' => 'Ìkọ ìránṣẹ́ lọ́wọ́',
 'allmessagestext' => 'Èyí ni àtòjọ àwọn ìránṣẹ́ sístẹ́mù tó wà nínú orúkọàyè MediaWiki.
-Ẹ lọ sí [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] àti [//translatewiki.net translatewiki.net] tí ẹ bá fẹ́ kópa nínú ìyèdèpadà ìsiṣẹ́ MediaWiki.',
+Ẹ lọ sí [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] àti [//translatewiki.net translatewiki.net] tí ẹ bá fẹ́ kópa nínú ìyèdèpadà ìsiṣẹ́ MediaWiki.',
 'allmessagesnotsupportedDB' => "Ojúewé yìí kò ṣe é lò nítorípé '''\$wgUseDatabaseMessages''' ti jẹ́ dídálẹkun.",
 'allmessages-filter-legend' => 'Ajọ̀',
 'allmessages-filter' => 'Ajọ̀ gẹ́gẹ́bí ipò ìṣàyàn:',
@@ -3284,7 +3280,7 @@ Tóbájẹ́pé fáìlì ọ̀hún ti jẹ́ títúnṣe sí bóṣewà ní bẹ
 
 # External editor support
 'edit-externally' => "Ẹ lo ìmúlò òde láti ṣ'àtúnṣe fáìlì yìí",
-'edit-externally-help' => '(Ẹ wo [//www.mediawiki.org/wiki/Manual:External_editors ìlànà ìṣètò] fún ẹ̀kúnrẹ́rẹ́)',
+'edit-externally-help' => '(Ẹ wo [https://www.mediawiki.org/wiki/Manual:External_editors ìlànà ìṣètò] fún ẹ̀kúnrẹ́rẹ́)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'gbogbo',
@@ -3446,7 +3442,7 @@ $5
 'version-hook-name' => 'Orúkọ hook',
 'version-version' => '(Àtẹ̀jáde $1)',
 'version-license' => 'Ìwé àṣẹ',
-'version-poweredby-credits' => "Agbára ìṣiṣẹ́ wiki yìí wá látọwọ́ '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Agbára ìṣiṣẹ́ wiki yìí wá látọwọ́ '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'àwọn mìíràn',
 'version-credits-summary' => 'Ìdùnnú wa ni láti rántí àwọn ẹni wọ̀nyí fún ìdáwọ́lé wọn sí [[Special:Version|MediaWiki]].',
 'version-software' => 'Atòlànà kọ̀mpútà kíkànsínú',
@@ -3469,8 +3465,7 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'Àwọn ojúewé pàtàkì',
-'specialpages-note' => '----
-* Àwọn ojúewé pàtàkì onídéédé.
+'specialpages-note' => '* Àwọn ojúewé pàtàkì onídéédé.
 * <span class="mw-specialpagerestricted">Àwọn ojúewé pàtàkì àìgbàláyè.</span>',
 'specialpages-group-maintenance' => 'Àwọn ìjábọ̀ ìtọ́jú',
 'specialpages-group-other' => 'Àwọn ojúewé pàtàkì míràn',
index d048e58..8aa212d 100644 (file)
@@ -1156,7 +1156,6 @@ $1",
 'mypreferences' => '自訂喜好',
 'prefs-edits' => '編輯數:',
 'prefsnologin' => '重未登入',
-'prefsnologintext' => '你一定要去<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 登入]</span>設定好用戶喜好值先。',
 'changepassword' => '改密碼',
 'prefs-skin' => '畫面',
 'skin-preview' => '預覽',
@@ -2470,7 +2469,7 @@ $1',
 'allmessagesdefault' => '預設訊息文字',
 'allmessagescurrent' => '現時訊息文字',
 'allmessagestext' => '以下係 MediaWiki 空間名入邊現有系統信息嘅清單。
-如果想貢獻正宗嘅MediaWiki本地化嘅話,請參閱[//www.mediawiki.org/wiki/Localisation MediaWiki本地化]同埋[//translatewiki.net translatewiki.net]。',
+如果想貢獻正宗嘅MediaWiki本地化嘅話,請參閱[https://www.mediawiki.org/wiki/Localisation MediaWiki本地化]同埋[//translatewiki.net translatewiki.net]。',
 'allmessagesnotsupportedDB' => "呢一版唔可以用,因為'''\$wgUseDatabaseMessages'''已經閂咗。",
 'allmessages-filter-legend' => '過濾',
 'allmessages-filter' => '以自定狀況過濾:',
@@ -3039,7 +3038,7 @@ Variants for Chinese language
 
 # External editor support
 'edit-externally' => '用外面程式來改呢個檔案',
-'edit-externally-help' => '(去[//www.mediawiki.org/wiki/Manual:External_editors setup instructions] 睇多啲資料)',
+'edit-externally-help' => '(去[https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] 睇多啲資料)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => '全部',
@@ -3205,7 +3204,7 @@ $5
 'version-hook-subscribedby' => '利用於',
 'version-version' => '(版本 $1)',
 'version-license' => '牌照',
-'version-poweredby-credits' => "呢個 Wiki 係由 '''[//www.mediawiki.org/ MediaWiki]''' 驅動,版權所有 © 2001-$1 $2。",
+'version-poweredby-credits' => "呢個 Wiki 係由 '''[https://www.mediawiki.org/ MediaWiki]''' 驅動,版權所有 © 2001-$1 $2。",
 'version-poweredby-others' => '其他',
 'version-license-info' => 'MediaWiki係自由軟件;你可以根據Free Software Foundation所發表嘅GNU General Public License條款規定,就本程式再發佈同/或修改;無論你根據嘅係呢個牌照嘅第二版或(任你揀)任一日之後發行嘅版本。
 
@@ -3229,8 +3228,7 @@ MediaWiki是基於使用目的而加以發佈,但係就唔會負上任何嘅
 
 # Special:SpecialPages
 'specialpages' => '特別頁',
-'specialpages-note' => '----
-* 標準特別頁。
+'specialpages-note' => '* 標準特別頁。
 * <strong class="mw-specialpagerestricted">有限制嘅特別頁。</strong>',
 'specialpages-group-maintenance' => '維護報告',
 'specialpages-group-other' => '其它特別頁',
index c14af62..5856b2d 100644 (file)
@@ -830,7 +830,6 @@ De hehevens over {{SITENAME}} zien meuhlijk nie bie'ewerkt.",
 'mypreferences' => 'Mien vòkeuren',
 'prefs-edits' => 'Antal bewerkiengen:',
 'prefsnologin' => 'Nie anemeld',
-'prefsnologintext' => 'Je mò <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} anemeld]</span> zien om je vòkeuren te kunn\'n instell\'n.',
 'changepassword' => 'Wachtwoôrd wiezigen',
 'prefs-skin' => 'Vurmhevieng',
 'skin-preview' => 'Voevertoônienge',
@@ -1319,7 +1318,7 @@ Aorre veld'n worr'n verborr'n.
 
 # External editor support
 'edit-externally' => "Dit bestand in 'n extern programma bewark'n",
-'edit-externally-help' => '(zieë de [//www.mediawiki.org/wiki/Manual:External_editors handleidienge vò instelliengen] vò meê informaosie)',
+'edit-externally-help' => '(zieë de [https://www.mediawiki.org/wiki/Manual:External_editors handleidienge vò instelliengen] vò meê informaosie)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'aol',
index 9b557f5..acb6e77 100644 (file)
@@ -25,6 +25,7 @@
  * @author Fantasticfears
  * @author Fengchao
  * @author Franklsf95
+ * @author Gakmo
  * @author Gaoxuewei
  * @author GeneralNFS
  * @author Gzdavidwong
@@ -511,7 +512,7 @@ $messages = array(
 'mytalk' => '讨论',
 'anontalk' => '该IP地址的讨论',
 'navigation' => '导航',
-'and' => '和',
+'and' => '&#32;和',
 
 # Cologne Blue skin
 'qbfind' => '查找',
@@ -528,7 +529,7 @@ $messages = array(
 'vector-action-delete' => '删除',
 'vector-action-move' => '移动',
 'vector-action-protect' => '保护',
-'vector-action-undelete' => '恢复',
+'vector-action-undelete' => '还原',
 'vector-action-unprotect' => '更改保护',
 'vector-simplesearch-preference' => '启用简化的搜索栏(仅Vector皮肤)',
 'vector-view-create' => '创建',
@@ -562,8 +563,8 @@ $messages = array(
 'create-this-page' => '创建本页',
 'delete' => '删除',
 'deletethispage' => '删除本页',
-'undeletethispage' => '恢复本页',
-'undelete_short' => '恢复$1个编辑',
+'undeletethispage' => '还原本页',
+'undelete_short' => '还原{{PLURAL:$1|$1个编辑}}',
 'viewdeleted_short' => '查看$1个被删除的编辑',
 'protect' => '保护',
 'protect_change' => '更改',
@@ -638,8 +639,8 @@ $1',
 'newmessagesdifflink' => '最后更改',
 'youhavenewmessagesfromusers' => '你有来自{{PLURAL:$3|其他用户|$3个用户}}的$1($2)。',
 'youhavenewmessagesmanyusers' => '你有来自多个用户的$1($2)。',
-'newmessageslinkplural' => '{{PLURAL:$1|新信息}}',
-'newmessagesdifflinkplural' => '最后{{PLURAL:$1|更改}}',
+'newmessageslinkplural' => '{{PLURAL:$1|新信息|999=新消息}}',
+'newmessagesdifflinkplural' => '最后{{PLURAL:$1|更改|999=更改}}',
 'youhavenewmessagesmulti' => '你在$1有新信息',
 'editsection' => '编辑',
 'editold' => '编辑',
@@ -681,8 +682,8 @@ $1',
 # Main script and global functions
 'nosuchaction' => '无该命令',
 'nosuchactiontext' => 'URL指定的操作无效。你可能输入了错误的URL地址,或是点击了错误的链接。这也可能表明{{SITENAME}}使用的软件的存在漏洞(bug)。',
-'nosuchspecialpage' => 'æ\97 è¯¥ç\89¹æ®\8a页é\9d¢',
-'nospecialpagetext' => '<strong>请求了一个无效的特殊页面。</strong>
+'nosuchspecialpage' => 'æ­¤ç\89¹æ®\8a页é\9d¢ä¸\8då­\98å\9c¨',
+'nospecialpagetext' => '<strong>请求了一个无效的特殊页面。</strong>
 
 有效的特殊页面的列表可以在[[Special:SpecialPages|{{int:specialpages}}]]找到。',
 
@@ -763,7 +764,8 @@ $2',
 'invalidtitle-knownnamespace' => '使用名字空间“$2”和文本“$3”的无效标题',
 'invalidtitle-unknownnamespace' => '使用未知名字空间编号$1和文本“$2”的无效标题',
 'exception-nologin' => '未登录',
-'exception-nologin-text' => '该页面或操作需要你登录至本wiki。',
+'exception-nologin-text' => '该页面或操作需要你[[Special:Userlogin|登录]]至本Wiki。',
+'exception-nologin-text-manual' => '查看该页面或进行此操作需要您$1。',
 
 # Virus scanner
 'virus-badscanner' => "错误的配置:未知的病毒扫描程序:''$1''",
@@ -809,7 +811,7 @@ $2',
 'gotaccount' => '已经拥有账户?请$1。',
 'gotaccountlink' => '登录',
 'userlogin-resetlink' => '忘记你的登录信息?',
-'userlogin-resetpassword-link' => '重置你的密码',
+'userlogin-resetpassword-link' => '忘记您的密码?',
 'helplogin-url' => 'Help:登录',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|登录帮助]]',
 'userlogin-loggedin' => '你已经以{{GENDER:$1|$1}}的身份登录。使用下面的表格以其他用户的身份登录。',
@@ -867,12 +869,14 @@ $2',
 'passwordsent' => '用户"$1"的新密码已经寄往所登记的电子邮件地址。
 请在收到后再登录。',
 'blocked-mailpassword' => '你的IP地址被禁止编辑,为预防滥用,密码恢复功能也被禁止使用。',
-'eauthentsent' => '一封确认信已经发送到推荐的地址。在发送其它邮件到此账户前,您必须首先依照这封信中的指导确认这个电子邮箱真实有效。',
+'eauthentsent' => '一封确认信已经发送至您设定的邮件地址。
+在任何其他邮件发送至您的账户前,您将不得不根据邮件中的指示,确认那个账户确实是您的。',
 'throttled-mailpassword' => '密码提醒已在最近$1小时内发送。为了安全起见,在每$1小时内只能发送一个密码提醒。',
 'mailerror' => '发送邮件错误:$1',
 'acct_creation_throttle_hit' => '使用你的IP地址访问本wiki的访客在过去24小时中创建了{{PLURAL:$1|$1个账户}},达到了这段时间所允许的最大值。因此,使用该IP地址的访客现在不能再创建账户。',
-'emailauthenticated' => '您的电子邮箱地址已经于$2 $3确认有效。',
-'emailnotauthenticated' => '你的电子邮件地址未确认。你不会接收到以下任何特性的电子邮件。',
+'emailauthenticated' => '您的邮箱地址已经于$3在$2确认。',
+'emailnotauthenticated' => '您的邮件地址尚未确认。
+您将不会收到以下任何功能的邮件。',
 'noemailprefs' => '指定一个电子邮箱地址以使用此功能。',
 'emailconfirmlink' => '确认您的邮箱地址',
 'invalidemailaddress' => '邮箱地址格式不正确,请输入正确的邮箱地址或清空该输入框。',
@@ -1042,9 +1046,7 @@ $2
 'accmailtitle' => '密码已寄出',
 'accmailtext' => "为[[User talk:$1|$1]]随机生成的密码已送至$2。登录后可以在''[[Special:ChangePassword|更改密码]]''页面中修改。",
 'newarticle' => '(新页面)',
-'newarticletext' => '您进入了一个尚未创建的页面。
-要创建该页面,请在下面的编辑框中输入内容(详情参见[[{{MediaWiki:Helppage}}|帮助页]])。
-如果您误入此页,请点击浏览器中的“返回”按钮。',
+'newarticletext' => "你点击了一个尚不存在的页面的链接。要创建该页面,请在下面的编辑框中输入内容(更多信息请见[[{{MediaWiki:Helppage}}|帮助页面]])。如果你是错误地到达这里,请点击你的浏览器的'''返回'''按钮。",
 'anontalkpagetext' => "---- ''这是一个还未建立账户的匿名用户的讨论页, 因此我们只能用IP地址来与他或她联络。该IP地址可能由几名用户共享。如果您是一名匿名用户并认为此页上的评语与您无关,请[[Special:UserLogin/signup|创建新账户]]或[[Special:UserLogin|登录]]以避免在未来与其他匿名用户混淆。''",
 'noarticletext' => '本页面目前没有内容。你可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索本页标题]]、<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志]或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 编辑本页面]。</span>',
 'noarticletext-nopermission' => '本页面目前没有内容。你可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索本页标题]]或<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志],但你没有权限创建本页面。',
@@ -1156,8 +1158,8 @@ $2
 
 它应该少过$2次呼叫,现在有$1次呼叫。',
 'expensive-parserfunction-category' => '页面中有太多耗费的语法功能呼叫',
-'post-expand-template-inclusion-warning' => '警告:包含模板大小过大。
-一些模板将不会包含。',
+'post-expand-template-inclusion-warning' => "'''警告:'''包含模板大小过大。
+一些模板将不会包含。",
 'post-expand-template-inclusion-category' => '模板包含上限已经超过的页面',
 'post-expand-template-argument-warning' => "'''警告:'''本页面包含至少一个模板参数有过大扩展大小。这些参数会被略过。",
 'post-expand-template-argument-category' => '包含着略过模板参数的页面',
@@ -1235,7 +1237,7 @@ $3的理由是''$2''",
 'rev-suppressed-diff-view' => "差异对比中的一次修订已被'''监督隐藏'''。您可以对比此差异。详细信息可在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中找到。",
 'rev-delundel' => '显示/隐藏',
 'rev-showdeleted' => '显示',
-'revisiondelete' => '删除/恢复版本',
+'revisiondelete' => '删除/还原版本',
 'revdelete-nooldid-title' => '无效目标版本',
 'revdelete-nooldid-text' => '您尚未指定一个目标修订去进行这个功能、
 所指定的修订不存在,或者您尝试去隐藏现时的修订。',
@@ -1251,20 +1253,20 @@ $3的理由是''$2''",
 'revdelete-text' => "'''删除的版本仍将显示在页面历史及日志中,但公众已不能访问其文本内容。'''
 在{{SITENAME}}的其他管理员将仍能访问隐藏的内容并通过该界面恢复删除的版本,除非进行了额外限制。",
 'revdelete-confirm' => '请确认该操作,明白其后果,并确保该操作符合[[{{MediaWiki:Policy-url}}|方针]]。',
-'revdelete-suppress-text' => "阻止应该'''只'''在以下情形使用
-*潜在的诽谤信息
-*不合适的个人信息
-*:''家庭地址、电话号码和社保号码等。''",
+'revdelete-suppress-text' => "阻止应'''仅'''用于以下情况
+* 潜在的诽谤信息
+* 不合适的个人信息
+*: ''家庭地址、电话号码和社保号码等。''",
 'revdelete-legend' => '设置可见性之限制',
-'revdelete-hide-text' => '隐藏版本文字',
+'revdelete-hide-text' => '修订文字',
 'revdelete-hide-image' => '隐藏文件内容',
 'revdelete-hide-name' => '隐藏动作和目标',
-'revdelete-hide-comment' => '隐藏编辑摘要',
-'revdelete-hide-user' => '隐藏编辑者的用户名/IP地址',
+'revdelete-hide-comment' => '编辑摘要',
+'revdelete-hide-user' => '编辑者的用户名/IP地址',
 'revdelete-hide-restricted' => '同时阻止管理员与其他用户查看数据',
-'revdelete-radio-same' => '(不更改)',
-'revdelete-radio-set' => '',
-'revdelete-radio-unset' => 'å\90¦',
+'revdelete-radio-same' => '(不更改)',
+'revdelete-radio-set' => '隐藏',
+'revdelete-radio-unset' => 'å\8f¯è§\81',
 'revdelete-suppress' => '同时阻止管理员与其他用户查看数据',
 'revdelete-unsuppress' => '在已恢复的修订中移除限制',
 'revdelete-log' => '原因:',
@@ -1393,7 +1395,7 @@ $1",
 'searchall' => '所有',
 'showingresults' => "下面显示从第'''$2'''条结果开始的'''$1'''条结果。",
 'showingresultsnum' => "下面显示从第'''$2'''条结果开始的'''$3'''条结果。",
-'showingresultsheader' => "关于'''$4'''的{{PLURAL:$5|第'''$1'''条结果,共'''$3'''条结果|第'''$1-$2'''条结果,共'''$3'''条结果}}",
+'showingresultsheader' => "关于'''$4'''的{{PLURAL:$5|第'''$1'''条结果,共'''$3'''条结果|第'''$1~$2'''条结果,共'''$3'''条结果}}",
 'nonefound' => "'''注意''':只有某些名字空间被默认搜索。请尝试给你的搜索内容添加前缀“all:”以搜索全部内容(包括讨论页面、模板等)或使用期望的名字空间作为前缀。",
 'search-nonefound' => '找不到和查询相匹配的结果。',
 'powersearch' => '高级搜索',
@@ -1413,12 +1415,12 @@ $1",
 'mypreferences' => '设置',
 'prefs-edits' => '编辑数:',
 'prefsnologin' => '未登录',
-'prefsnologintext' => '您必须先<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 登录]</span>才能设置个人参数。',
+'prefsnologintext2' => '进行用户设置需要您$1。',
 'changepassword' => '更改密码',
 'prefs-skin' => '皮肤',
 'skin-preview' => '预览',
 'datedefault' => '默认格式',
-'prefs-beta' => '测试特性',
+'prefs-beta' => '测试功能',
 'prefs-datetime' => '日期时间',
 'prefs-labs' => '实验室特性',
 'prefs-user-pages' => '用户页面',
@@ -1499,12 +1501,10 @@ $1",
 'gender-unknown' => '我不愿意指明(被称为“他/她”)',
 'gender-male' => '他',
 'gender-female' => '她',
-'prefs-help-gender' => '这是选填项目。
-软件使用其以显示正确的性别称呼。
-该信息将会公开。',
+'prefs-help-gender' => '该设置为可选项目。软件根据它的值在称呼你及对他人提及你时使用适当的语法性别。该信息会被公开。',
 'email' => '电子邮件',
 'prefs-help-realname' => '真实姓名是选填项目。如果你选择提供它,它将会用于贡献署名。',
-'prefs-help-email' => '电子邮件地址是选填项目,但是当你忘记密码需要重置密码时需要该项信息。',
+'prefs-help-email' => '电子邮件是可选项,但是在您忘记密码时很有用。',
 'prefs-help-email-others' => '你也可以选择让其他用户通过你的用户或讨论页面上的链接用电子邮件联系你。其他用户联系你时你的电子邮件地址不会显示。',
 'prefs-help-email-required' => '电子邮件地址是必填项目。',
 'prefs-info' => '基本信息',
@@ -1608,7 +1608,7 @@ $1",
 'right-deletedhistory' => '查看被删除的历史条目,无其相关文字',
 'right-deletedtext' => '查看被删除的版本间的被删除的文字和更改',
 'right-browsearchive' => '搜索被删除的页面',
-'right-undelete' => '恢复页面',
+'right-undelete' => '还原页面',
 'right-suppressrevision' => '审查和恢复管理员隐藏的版本',
 'right-suppressionlog' => '查看非公开日志',
 'right-block' => '阻止其他用户编辑',
@@ -1676,7 +1676,7 @@ $1",
 'action-deleterevision' => '删除本版本',
 'action-deletedhistory' => '查看本页面被删除的历史',
 'action-browsearchive' => '搜索被删除的页面',
-'action-undelete' => '恢复本页',
+'action-undelete' => '还原本页',
 'action-suppressrevision' => '审查和恢复本隐藏版本',
 'action-suppressionlog' => '查看本非公开日志',
 'action-block' => '阻止该用户编辑',
@@ -1916,8 +1916,7 @@ $1',
 'zip-wrong-format' => '指定的文件不是一个 ZIP 文件。',
 'zip-bad' => '该文件是已损坏或以其它方式无法读取的 ZIP 文件。
 不能正确检查安全。',
-'zip-unsupported' => '该文件是 ZIP 文件,其中使用 MediaWiki 不支持的ZIP功能。
-不能正确检查安全。',
+'zip-unsupported' => '该文件是使用MediaWiki不支持的ZIP特性的ZIP文件。无法正确地检查其安全性。',
 
 # Special:UploadStash
 'uploadstash' => '上传隐藏',
@@ -1976,7 +1975,7 @@ $1',
 'listfiles_date' => '日期',
 'listfiles_name' => '名称',
 'listfiles_user' => '用户',
-'listfiles_size' => '大å°\8f',
+'listfiles_size' => '尺寸',
 'listfiles_description' => '说明',
 'listfiles_count' => '版本',
 'listfiles-show-all' => '包括图片的旧版本',
@@ -2026,11 +2025,11 @@ $1',
 # File reversion
 'filerevert' => '恢复$1',
 'filerevert-legend' => '恢复文件',
-'filerevert-intro' => "您正在将文件'''[[Media:$1|$1]]'''恢复到[$4 于$2 $3的版本]。",
+'filerevert-intro' => "你将要恢复文件'''[[Media:$1|$1]]'''至[$4 $2 $3的版本]。",
 'filerevert-comment' => '原因:',
-'filerevert-defaultcomment' => '已经恢复到于$1 $2的版本',
+'filerevert-defaultcomment' => '恢复至$1 $2的版本',
 'filerevert-submit' => '恢复',
-'filerevert-success' => "'''[[Media:$1|$1]]'''已经恢复到[$4 于$2 $3的版本]。",
+'filerevert-success' => "'''[[Media:$1|$1]]'''已经恢复至[$4 $2 $3的版本]。",
 'filerevert-badversion' => '文件并无所请求时间戳下的早期本地版本。',
 
 # File deletion
@@ -2205,7 +2204,7 @@ $1',
 'querypage-disabled' => '本特殊页面因性能问题而停用。',
 
 # Book sources
-'booksources' => '图书来源',
+'booksources' => '网络书源',
 'booksources-search-legend' => '搜索图书来源',
 'booksources-isbn' => 'ISBN:',
 'booksources-go' => '提交',
@@ -2398,7 +2397,7 @@ $PAGEINTRO$NEWPAGE
 电子邮件:$PAGEEDITOR_EMAIL
 用户页面:$PAGEEDITOR_WIKI
 
-在你访问该页面之前,我们不会发送新增更改的通知。
+在你登录并访问该页面之前,我们不会发送新增更改的通知。
 你也可以重设你的监视列表中所有监视页面的通知标志。
 
 {{SITENAME}}通知系统
@@ -2432,7 +2431,7 @@ $UNWATCHURL
 'dellogpage' => '删除日志',
 'dellogpagetext' => '下面是最近的删除的列表。',
 'deletionlog' => '删除记录',
-'reverted' => '恢复到早期版本',
+'reverted' => '恢复到较早的版本',
 'deletecomment' => '原因:',
 'deleteotherreason' => '其他/附加原因:',
 'deletereasonotherlist' => '其他原因',
@@ -2453,12 +2452,12 @@ $UNWATCHURL
 'rollbacklinkcount' => '回退$1次编辑',
 'rollbacklinkcount-morethan' => '回退超过$1次的编辑',
 'rollbackfailed' => '回退失败',
-'cantrollback' => '无法恢复编辑。最后的贡献者是本文的唯一作者。',
+'cantrollback' => '无法恢复编辑,最后贡献者是该页面的唯一作者。',
 'alreadyrolled' => '无法回退[[User:$2|$2]]([[User talk:$2|讨论]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])对[[:$1]]的编辑,其他人已经编辑或者回退了该页。
 
 本页最后的编辑者是[[User:$3|$3]]([[User talk:$3|讨论]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])。',
 'editcomment' => '编辑摘要:"<i>$1</i>"。',
-'revertpage' => '已恢复[[Special:Contributions/$2|$2]]([[User talk:$2|讨论]])的编辑至[[User:$1|$1]]的最后一个修订版本',
+'revertpage' => '恢复[[Special:Contributions/$2|$2]]([[User talk:$2|讨论]])的编辑至[[User:$1|$1]]的最后版本',
 'revertpage-nouser' => '恢复由隐藏用户的编辑到{{GENDER:$1|[[User:$1|$1]]}}的最后一个修订版本',
 'rollback-success' => '已恢复$1的编辑,更改回$2的最后版本。',
 
@@ -2518,8 +2517,8 @@ $UNWATCHURL
 'protect-expiry-options' => '1小时:1 hour,1天:1 day,1周:1 week,2周:2 weeks,1个月:1 month,3个月:3 months,6个月:6 months,1年:1 year,无限期:infinite',
 'restriction-type' => '权限:',
 'restriction-level' => '限制级别:',
-'minimum-size' => 'æ\9c\80å°\8f大å°\8f',
-'maximum-size' => 'æ\9c\80大大å°\8f:',
+'minimum-size' => 'æ\9c\80å°\8f尺寸',
+'maximum-size' => 'æ\9c\80大尺寸:',
 'pagesize' => '(字节)',
 
 # Restrictions (nouns)
@@ -2549,15 +2548,15 @@ $UNWATCHURL
 'undelete-revision' => '$1由$3(在$4 $5)所编写的已删除修订版本:',
 'undeleterevision-missing' => '无效或丢失的修订版本。您可能使用了错误的链接,或者此修订版本已经被从存档中恢复或移除。',
 'undelete-nodiff' => '找不到先前的修订版本。',
-'undeletebtn' => '恢复',
-'undeletelink' => '查看/恢复',
+'undeletebtn' => '还原',
+'undeletelink' => '查看/还原',
 'undeleteviewlink' => '查看',
 'undeletereset' => '重设',
 'undeleteinvert' => '反向选择',
 'undeletecomment' => '原因:',
-'undeletedrevisions' => '$1个版本已恢复',
-'undeletedrevisions-files' => '$1个版本和$2个文件已恢复',
-'undeletedfiles' => '$1个文件已经被恢复',
+'undeletedrevisions' => '{{PLURAL:$1|$1个版本}}被还原',
+'undeletedrevisions-files' => '{{PLURAL:$1|$1个版本}}和{{PLURAL:$2|$2个文件}}被还原',
+'undeletedfiles' => '{{PLURAL:$1|$1个文件}}被还原',
 'cannotundelete' => '恢复删除失败:
 $1',
 'undeletedpage' => "'''$1已经被恢复'''
@@ -2896,7 +2895,7 @@ $1被封禁的理由是:“$2”',
 'allmessagesdefault' => '默认信息文字',
 'allmessagescurrent' => '当前信息文字',
 'allmessagestext' => '此处列出了MediaWiki名字空间下的所有有效系统消息。
-如果想为MediaWiki的本地化贡献翻译,请访问[//www.mediawiki.org/wiki/Localisation MediaWiki本地化]和[//translatewiki.net translatewiki.net]。',
+如果想为MediaWiki的本地化贡献翻译,请访问[https://www.mediawiki.org/wiki/Localisation MediaWiki本地化]和[//translatewiki.net translatewiki.net]。',
 'allmessagesnotsupportedDB' => "此页面无法使用,因为'''\$wgUseDatabaseMessages'''已被设置关闭。",
 'allmessages-filter-legend' => '过滤',
 'allmessages-filter' => '按自定义状态过滤:',
@@ -3002,14 +3001,15 @@ $2',
 'tooltip-ca-talk' => '关于内容页面的讨论',
 'tooltip-ca-edit' => '你可以编辑本页面。请在保存前使用预览按钮',
 'tooltip-ca-addsection' => '开始新段落',
-'tooltip-ca-viewsource' => '本页面受到保护。你可以查看其源代码。',
+'tooltip-ca-viewsource' => '本页面受到保护。
+您可以查看其源代码',
 'tooltip-ca-history' => '本页面过去的版本',
 'tooltip-ca-protect' => '保护本页',
 'tooltip-ca-unprotect' => '更改本页面的保护',
 'tooltip-ca-delete' => '删除本页',
 'tooltip-ca-undelete' => '将这个页面恢复到被删除以前的状态',
 'tooltip-ca-move' => '移动本页',
-'tooltip-ca-watch' => '添加本页面至的监视列表',
+'tooltip-ca-watch' => '添加本页面至的监视列表',
 'tooltip-ca-unwatch' => '从你的监视列表删除本页面',
 'tooltip-search' => '搜索{{SITENAME}}',
 'tooltip-search-go' => '如果相同的标题存在的话便直接前往该页面',
@@ -3052,11 +3052,11 @@ $2',
 'tooltip-watchlistedit-raw-submit' => '更新监视列表',
 'tooltip-recreate' => '重建该页面,无论是否被删除。',
 'tooltip-upload' => '开始上传',
-'tooltip-rollback' => '单击“回退”恢复上一位贡献者对本页的编辑',
+'tooltip-rollback' => '单击“回退”恢复最后贡献者对该页面的编辑',
 'tooltip-undo' => '“撤销”可以恢复该编辑并在预览模式下打开编辑表单。它允许在摘要中加入原因。',
 'tooltip-preferences-save' => '保存系统设置',
 'tooltip-summary' => '请输入简短的摘要',
-'tooltip-iwiki' => '$1 – $2',
+'interlanguage-link-title' => '$1 – $2',
 
 # Stylesheets
 'common.css' => '/* 此处的 CSS 将应用于所有的皮肤 */',
@@ -3103,7 +3103,7 @@ $2',
 这可能是由于一个链往匹配黑名单的外部站点的链接引起的。',
 'spamprotectionmatch' => '以下文本触发了我们的垃圾链接过滤器:$1',
 'spambot_username' => 'MediaWiki垃圾链接清理器',
-'spam_reverting' => '恢复到不包含链接的最近修订版本$1',
+'spam_reverting' => '恢复至不包含$1的链接的最后版本',
 'spam_blanking' => '消隐所有包含链接至$1的修订',
 'spam_deleting' => '正在删除所有包含至$1的版本',
 'simpleantispam-label' => "反垃圾检查。
@@ -3121,6 +3121,7 @@ $2',
 'pageinfo-length' => '页面长度(字节)',
 'pageinfo-article-id' => '页面ID',
 'pageinfo-language' => '页面内容语言',
+'pageinfo-content-model' => '页面内容模式',
 'pageinfo-robot-policy' => '爬虫索引',
 'pageinfo-robot-index' => '允许',
 'pageinfo-robot-noindex' => '不允许',
@@ -3194,17 +3195,17 @@ $1',
 
 # Media information
 'mediawarning' => "'''警告''':该文件类型可能含有恶意代码。执行后你的系统可能受损。",
-'imagemaxsize' => '图像大小限制:<br /><u>(文件描述页)</u>',
-'thumbsize' => '缩ç\95¥å\9b¾å¤§å°\8f:',
+'imagemaxsize' => "图像尺寸限制:<br />''(文件说明页面)''",
+'thumbsize' => '缩ç\95¥å\9b¾å°ºå¯¸:',
 'widthheightpage' => '$1×$2,$3页',
 'file-info' => '文件大小:$1,MIME类型:$2',
-'file-info-size' => '$1×$2像素,文件大小:$3,MIME类型:$4',
-'file-info-size-pages' => '$1×$2像素,文件大小:$3,MIME类型:$4,$5页',
+'file-info-size' => '$1 × $2像素,文件大小:$3,MIME类型:$4',
+'file-info-size-pages' => '$1 × $2像素,文件大小:$3,MIME类型:$4,$5页',
 'file-nohires' => '没有更高的分辨率。',
 'svg-long-desc' => 'SVG文件,尺寸为$1 × $2像素,文件大小:$3',
 'svg-long-desc-animated' => '动画SVG文件,尺寸为$1 × $2像素,文件大小:$3',
 'svg-long-error' => '无效的SVG文件:$1',
-'show-big-image' => 'å®\8cæ\95´å\88\86辨ç\8e\87',
+'show-big-image' => 'å\8e\9få§\8bæ\96\87件',
 'show-big-image-preview' => '本预览的尺寸:$1。',
 'show-big-image-other' => '其他{{PLURAL:$2|分辨率}}:$1。',
 'show-big-image-size' => '$1×$2像素',
@@ -3697,7 +3698,7 @@ Variants for Chinese language
 
 # External editor support
 'edit-externally' => '用外部应用程序编辑本文件',
-'edit-externally-help' => '(更多信息请见[//www.mediawiki.org/wiki/Manual:External_editors 安装说明])',
+'edit-externally-help' => '(更多信息请见[https://www.mediawiki.org/wiki/Manual:External_editors 安装说明])',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => '所有',
@@ -3739,8 +3740,7 @@ $5
 确认码会在$4过期。',
 'confirmemail_body_changed' => '拥有IP地址$1的用户(可能是您)在{{SITENAME}}更改了账户“$2”的电子邮箱地址。
 
-请确认这个账户是属于您的,并同时重新激活在{{SITENAME}}上的电子邮件功能。请
-在浏览器中打开下面的链接:
+要确认此账户确实属于您并同时激活在{{SITENAME}}的电子邮件功能,请在浏览器中打开下面的链接:
 
 $3
 
@@ -3794,6 +3794,7 @@ $5
 'colon-separator' => ':',
 'word-separator' => '',
 'parentheses' => '($1)',
+'quotation-marks' => '“$1”',
 
 # Multipage image navigation
 'imgmultipageprev' => '← 上一页',
@@ -3880,7 +3881,7 @@ $5
 'version-hook-subscribedby' => '署名',
 'version-version' => '(版本$1)',
 'version-license' => '授权协议',
-'version-poweredby-credits' => "本Wiki由'''[//www.mediawiki.org/ MediaWiki]'''驱动,版权所有 © 2001-$1 $2。",
+'version-poweredby-credits' => "本Wiki由'''[https://www.mediawiki.org/ MediaWiki]'''驱动,版权所有 © 2001-$1 $2。",
 'version-poweredby-others' => '其他',
 'version-poweredby-translators' => 'translatewiki.net上的翻译者',
 'version-credits-summary' => '我们感谢下列人士为[[Special:Version|MediaWiki]]作出的贡献。',
@@ -3923,9 +3924,9 @@ MediaWiki发表时预期有用,但对此'''无任何保证''',亦无隐含
 
 # Special:SpecialPages
 'specialpages' => '特殊页面',
-'specialpages-note' => '----
-*普通特殊页面。
-*<span class="mw-specialpagerestricted">非公开特殊页面。</span>',
+'specialpages-note-top' => '图例',
+'specialpages-note' => '*普通特殊页面。
+*<span class="mw-specialpagerestricted">受限特殊页面。</span>',
 'specialpages-group-maintenance' => '维护报告',
 'specialpages-group-other' => '其它特殊页面',
 'specialpages-group-login' => '登录/创建账户',
@@ -4103,7 +4104,7 @@ MediaWiki发表时预期有用,但对此'''无任何保证''',亦无隐含
 'api-error-unclassified' => '出现未知错误。',
 'api-error-unknown-code' => '未知错误:$1',
 'api-error-unknown-error' => '内部错误:尝试上传文件时出错。',
-'api-error-unknown-warning' => '未知的警告:$1',
+'api-error-unknown-warning' => '未知的警告:“$1”。',
 'api-error-unknownerror' => '未知错误:$1。',
 'api-error-uploaddisabled' => '该wiki停用上传。',
 'api-error-verification-error' => '该文件可能损坏或扩展名错误。',
@@ -4135,6 +4136,6 @@ MediaWiki发表时预期有用,但对此'''无任何保证''',亦无隐含
 'limitreport-templateargumentsize' => '模板参数大小',
 'limitreport-templateargumentsize-value' => '$1/$2 字节',
 'limitreport-expansiondepth' => '最高扩展深度',
-'limitreport-expensivefunctioncount' => '高函数分析器',
+'limitreport-expensivefunctioncount' => '高开销函数分析器',
 
 );
index 0ce7c4b..70417f8 100644 (file)
@@ -54,6 +54,7 @@
  * @author Xiaomingyan
  * @author Yfdyh000
  * @author Yuyu
+ * @author 乌拉跨氪
  */
 
 $fallback = 'zh-hans';
@@ -721,7 +722,7 @@ $2',
 'gotaccount' => '已經擁有帳號?$1。',
 'gotaccountlink' => '登入',
 'userlogin-resetlink' => '忘記了您的登入細節?',
-'userlogin-resetpassword-link' => '重設密碼',
+'userlogin-resetpassword-link' => '忘記您的密碼?',
 'helplogin-url' => 'Help:登入',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|登入幫助]]',
 'userlogin-loggedin' => '您已作為{{GENDER:$1|$1}}登錄。
@@ -783,14 +784,16 @@ $2',
 'passwordsent' => '用戶「$1」的新密碼已經寄往所登記的電子郵件地址。
 請在收到後再登入。',
 'blocked-mailpassword' => '您的IP地址處於查封狀態而不允許編輯,為了安全起見,密碼恢復功能已被禁用。',
-'eauthentsent' => '一封確認信已經發送到所示的地址。在發送其它郵件到此賬戶前,您必須首先依照這封信中的指導確認這個電子郵件信箱真實有效。',
+'eauthentsent' => '一封確認信已遞送至您設定的電郵位址。
+在發送其它郵件到此賬戶前,您必須首先依照這封信中的指導確認這個電子郵件信箱真實有效。',
 'throttled-mailpassword' => '密碼提醒已經在前$1小時內發送。
 為防止濫用,限定在$1小時內僅發送一次密碼提醒。',
 'mailerror' => '發送郵件錯誤: $1',
 'acct_creation_throttle_hit' => '在這個wiki上的訪客利用您的IP地址在昨天創建了$1個賬戶,是在這段時間中的上限。
 結果利用這個IP地址的訪客在這段時間中不能創建更多的賬戶。',
-'emailauthenticated' => '您的電子郵件位址已於 $2 $3 確認有效。',
-'emailnotauthenticated' => '您的郵箱位址<strong>還沒被認証</strong>。以下功能將不會發送任何郵件。',
+'emailauthenticated' => '您的電子郵件位址已於$2在$3確認。',
+'emailnotauthenticated' => '您的電郵位址尚未確認。
+將不會發送與以下功能相關的電郵。',
 'noemailprefs' => '在您的參數設置中指定一個電子郵件地址以使用此功能。',
 'emailconfirmlink' => '確認您的電子郵件位址',
 'invalidemailaddress' => '郵箱地址格式不正確,請輸入正確的郵箱位址或清空該輸入框。',
@@ -1199,19 +1202,20 @@ $2
 'revdelete-text' => "'''刪除的修訂仍將顯示在頁面歷史中, 但它們的文字內容已不能被公眾訪問。'''
 在{{SITENAME}}的其他管理員將仍能訪問隱藏的內容並透過與此相同的介面恢復刪除,除非網站工作者進行了一些附加的限制。",
 'revdelete-confirm' => '請確認您肯定去做的話,您就要明白到後果,以及這個程序符合[[{{MediaWiki:Policy-url}}|政策]]。',
-'revdelete-suppress-text' => "壓制'''只'''應在以下的情況下進行:
-* 不合適的個人資料
+'revdelete-suppress-text' => "禁制應'''僅'''於下述情形之一時使用:
+* 潛在誹謗性資訊
+* 不合適個人資料
 *: ''住家地址、電話號碼、社群保安號碼等。''",
 'revdelete-legend' => '設定可見性之限制',
-'revdelete-hide-text' => '隱藏修訂文字',
+'revdelete-hide-text' => '修訂文字',
 'revdelete-hide-image' => '隱藏檔案內容',
 'revdelete-hide-name' => '隱藏動作和目標',
-'revdelete-hide-comment' => '隱藏編輯摘要',
-'revdelete-hide-user' => '隱藏編輯者的用戶名/IP地址',
+'revdelete-hide-comment' => '編輯摘要',
+'revdelete-hide-user' => '編輯者的用戶名/IP位址',
 'revdelete-hide-restricted' => '同時廢止由操作員以及其他用戶的資料',
-'revdelete-radio-same' => '(不更改)',
-'revdelete-radio-set' => '',
-'revdelete-radio-unset' => 'å\90¦',
+'revdelete-radio-same' => '(不更改)',
+'revdelete-radio-set' => '隱藏',
+'revdelete-radio-unset' => 'å\8f¯è¦\8b',
 'revdelete-suppress' => '同時廢止由操作員以及其他用戶的資料',
 'revdelete-unsuppress' => '在已恢復的修訂中移除限制',
 'revdelete-log' => '理由:',
@@ -1361,7 +1365,6 @@ $1",
 'mypreferences' => '偏好設定',
 'prefs-edits' => '編輯次數:',
 'prefsnologin' => '還未登入',
-'prefsnologintext' => '您必須先<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 登入]</span>才能設置個人參數。',
 'changepassword' => '變更密碼',
 'prefs-skin' => '外觀',
 'skin-preview' => '預覽',
@@ -1453,7 +1456,7 @@ $1",
 'email' => '電子郵件',
 'prefs-help-realname' => '真實姓名是可選的。
 如果您選擇提供它,它會用於貢獻署名。',
-'prefs-help-email' => 'é\9b»å­\90é\83µä»¶æ\98¯å\8f¯é\81¸ç\9a\84ï¼\8cä½\86ç\95¶æ\82¨å¿\98è¨\98æ\82¨ç\9a\84å¯\86碼æ\99\82é\9c\80è¦\81å°\87æ\96°å¯\86碼é\87\8d設ï¼\8cå°±æ\9c\83ç\94¨é\9b»é\83µå¯\84å\9b\9e給æ\82¨ã\80\82',
+'prefs-help-email' => 'ç\94µå­\90é\82®ä»¶æ\98¯å\8f¯é\80\89项ï¼\8cä½\86æ\98¯å\9c¨æ\82¨å¿\98è®°å¯\86ç \81æ\97¶å¾\88æ\9c\89ç\94¨ã\80\82',
 'prefs-help-email-others' => '您亦可以在您沒有公開自己的用戶身分時透過您的用戶頁或用戶討論頁與您聯繫。',
 'prefs-help-email-required' => '電子郵件地址是必填項目。',
 'prefs-info' => '基本資料',
@@ -2877,7 +2880,7 @@ $1被封禁的理由是“$2”',
 'allmessagesdefault' => '預設的訊息文字',
 'allmessagescurrent' => '現時的訊息文字',
 'allmessagestext' => '這裡列出所有可定製的系統界面。
-如果想貢獻正宗的MediaWiki本地化的話,請參閱[//www.mediawiki.org/wiki/Localisation MediaWiki本地化]以及[//translatewiki.net translatewiki.net]。',
+如果想貢獻正宗的MediaWiki本地化的話,請參閱[https://www.mediawiki.org/wiki/Localisation MediaWiki本地化]以及[//translatewiki.net translatewiki.net]。',
 'allmessagesnotsupportedDB' => "這個頁面無法使用,因為'''\$wgUseDatabaseMessages'''已被設定關閉。",
 'allmessages-filter-legend' => '搜尋',
 'allmessages-filter' => '以自定狀況過濾:',
@@ -3039,7 +3042,7 @@ $2',
 'tooltip-undo' => '「復原」可以在編輯模式上開啟編輯表格以便恢復。它容許在摘要中加入原因。',
 'tooltip-preferences-save' => '儲存使用偏好',
 'tooltip-summary' => '輸入一個簡短的摘要',
-'tooltip-iwiki' => '$1 – $2',
+'interlanguage-link-title' => '$1 – $2',
 
 # Stylesheets
 'common.css' => '/* 此處的 CSS 將應用於所有的面板 */',
@@ -3085,7 +3088,7 @@ $2',
 'spam_reverting' => '恢復到不包含連結至$1的最近修訂版本',
 'spam_blanking' => '所有包含連結至$1的修訂,清空',
 'spam_deleting' => '所有包含連結至$1的修訂,刪除中',
-'simpleantispam-label' => "反垃圾檢查。
+'simpleantispam-label' => "反濫發電郵檢查。
 '''不要'''加入這個!",
 
 # Info page
@@ -3100,6 +3103,7 @@ $2',
 'pageinfo-length' => '頁面長度 (以位元組為單位)',
 'pageinfo-article-id' => '頁面編號',
 'pageinfo-language' => '頁面內容語言',
+'pageinfo-content-model' => '頁面內容模型',
 'pageinfo-robot-policy' => '機械人索引',
 'pageinfo-robot-index' => '容許',
 'pageinfo-robot-noindex' => '阻止',
@@ -3184,7 +3188,7 @@ $1',
 'svg-long-desc' => 'SVG 檔案,表面大小:$1 × $2 像素,檔案大小:$3',
 'svg-long-desc-animated' => 'SVG 動畫檔案,表面大小:$1 × $2 像素,檔案大小:$3',
 'svg-long-error' => '無效的SVG檔案:$1',
-'show-big-image' => 'å®\8cæ\95´è§£å\83\8f度',
+'show-big-image' => 'å\8e\9få§\8bæª\94æ¡\88',
 'show-big-image-preview' => '此預覽的大小:$1.',
 'show-big-image-other' => '其他{{PLURAL:$2||}}解析度:$1。',
 'show-big-image-size' => '$1 × $2 像素',
@@ -3672,7 +3676,7 @@ Variants for Chinese language
 
 # External editor support
 'edit-externally' => '用外部程式編輯此檔案',
-'edit-externally-help' => '(請參見[//www.mediawiki.org/wiki/Manual:External_editors 設定步驟]了解詳細資訊)',
+'edit-externally-help' => '(請參見[https://www.mediawiki.org/wiki/Manual:External_editors 設定步驟]了解詳細資訊)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => '全部',
@@ -3770,6 +3774,7 @@ $5
 'colon-separator' => ':',
 'word-separator' => '',
 'parentheses' => '($1)',
+'quotation-marks' => '“$1”',
 
 # Multipage image navigation
 'imgmultipageprev' => '← 上一頁',
@@ -3856,7 +3861,7 @@ $5
 'version-hook-subscribedby' => '利用於',
 'version-version' => '(版本 $1)',
 'version-license' => '授權',
-'version-poweredby-credits' => "此維基由'''[//www.mediawiki.org/ MediaWiki]'''驅動,版權所有 © 2001-$1 $2。",
+'version-poweredby-credits' => "此維基由'''[https://www.mediawiki.org/ MediaWiki]'''驅動,版權所有 © 2001-$1 $2。",
 'version-poweredby-others' => '其他',
 'version-poweredby-translators' => 'translatewiki.net 上的翻譯者',
 'version-credits-summary' => '我們感謝以下人士為[[Special:Version|MediaWiki]]作出的貢獻。',
@@ -3876,7 +3881,7 @@ MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任
 # Special:Redirect
 'redirect' => '重定向檔案、用戶ID或頁面修訂ID',
 'redirect-legend' => '重定向到檔案或頁面',
-'redirect-summary' => '此特殊頁面重定向到檔案(指定的檔案名稱)、頁面 (指定的頁面修訂ID) 或用戶頁面(指定的用戶ID數值)。',
+'redirect-summary' => '此特殊頁面重定向到檔案(指定的檔案名稱)、頁面 (指定的頁面修訂ID) 或用戶頁面(指定的用戶ID數值)。用法:[[{{#Special:Redirect}}/file/Example.jpg]]、[[{{#Special:Redirect}}/revision/328429]]或[[{{#Special:Redirect}}/user/101]]。',
 'redirect-submit' => '提交',
 'redirect-lookup' => '尋找:',
 'redirect-value' => '值:',
@@ -3898,8 +3903,7 @@ MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任
 
 # Special:SpecialPages
 'specialpages' => '特殊頁面',
-'specialpages-note' => '----
-* 標準特殊頁面。
+'specialpages-note' => '* 標準特殊頁面。
 * <strong class="mw-specialpagerestricted">有限制的特殊頁面。</strong>
 * <span class="mw-specialpagecached">用於重新整理的特殊頁面(可能過時)。</span>',
 'specialpages-group-maintenance' => '維護報告',
index d3a863b..68ac48c 100644 (file)
@@ -29,7 +29,6 @@
  * @file
  * @since 1.20
  */
-
 class CLDRPluralRuleEvaluator {
        /**
         * Evaluate a number against a set of plural rules. If a rule passes,
@@ -48,8 +47,8 @@ class CLDRPluralRuleEvaluator {
         * Convert a set of rules to a compiled form which is optimised for
         * fast evaluation. The result will be an array of strings, and may be cached.
         *
-        * @param $rules The rules to compile
-        * @return An array of compile rules.
+        * @param array $rules The rules to compile
+        * @return array An array of compile rules.
         */
        public static function compile( array $rules ) {
                // We can't use array_map() for this because it generates a warning if
@@ -63,6 +62,10 @@ class CLDRPluralRuleEvaluator {
        /**
         * Evaluate a compiled set of rules returned by compile(). Do not allow
         * the user to edit the compiled form, or else PHP errors may result.
+        *
+        * @param int The number to be evaluated against the rules
+        * @param array The associative array of plural rules in pluralform => rule format.
+        * @return int The index of the plural form which passed the evaluation
         */
        public static function evaluateCompiled( $number, array $rules ) {
                // The compiled form is RPN, with tokens strictly delimited by
@@ -96,11 +99,11 @@ class CLDRPluralRuleEvaluator {
        /**
         * Do a single operation
         *
-        * @param $token string The token string
-        * @param $left The left operand. If it is an object, its state may be destroyed.
-        * @param $right The right operand
+        * @param string $token The token string
+        * @param mixed $left The left operand. If it is an object, its state may be destroyed.
+        * @param mixed $right The right operand
         * @throws CLDRPluralRuleError
-        * @return mixed
+        * @return mixed The operation result
         */
        private static function doOperation( $token, $left, $right ) {
                if ( in_array( $token, array( 'in', 'not-in', 'within', 'not-within' ) ) ) {
@@ -150,8 +153,19 @@ class CLDRPluralRuleEvaluator {
  * Evaluator helper class representing a range list.
  */
 class CLDRPluralRuleEvaluator_Range {
+       /**
+        * The parts
+        *
+        * @var array
+        */
        public $parts = array();
 
+       /**
+        * Initialize a new instance of CLDRPluralRuleEvaluator_Range
+        *
+        * @param int $start The start of the range
+        * @param int|bool $end The end of the range, or false if the range is not bounded.
+        */
        function __construct( $start, $end = false ) {
                if ( $end === false ) {
                        $this->parts[] = $start;
@@ -161,9 +175,11 @@ class CLDRPluralRuleEvaluator_Range {
        }
 
        /**
-        * Determine if the given number is inside the range. If $integerConstraint
-        * is true, the number must additionally be an integer if it is to match
-        * any interval part.
+        * Determine if the given number is inside the range.
+        *
+        * @param int $number The number to check
+        * @param bool $integerConstraint If true, also asserts the number is an integer; otherwise, number simply has to be inside the range.
+        * @return bool True if the number is inside the range; otherwise, false.
         */
        function isNumberIn( $number, $integerConstraint = true ) {
                foreach ( $this->parts as $part ) {
@@ -185,14 +201,18 @@ class CLDRPluralRuleEvaluator_Range {
        /**
         * Readable alias for isNumberIn( $number, false ), and the implementation
         * of the "within" operator.
+        *
+        * @param int $number The number to check
+        * @return bool True if the number is inside the range; otherwise, false.
         */
        function isNumberWithin( $number ) {
                return $this->isNumberIn( $number, false );
        }
 
        /**
-        * Add another part to this range. The supplied new part may either be a
-        * range object itself, or a single number.
+        * Add another part to this range.
+        *
+        * @param mixed The part to add, either a range object itself or a single number.
         */
        function add( $other ) {
                if ( $other instanceof self ) {
@@ -203,7 +223,10 @@ class CLDRPluralRuleEvaluator_Range {
        }
 
        /**
-        * For debugging
+        * Returns the string representation of the rule evaluator range.
+        * The purpose of this method is to help debugging.
+        *
+        * @return string The string representation of the rule evaluator range
         */
        function __toString() {
                $s = 'Range(';
@@ -227,8 +250,39 @@ class CLDRPluralRuleEvaluator_Range {
  * Helper class for converting rules to reverse polish notation (RPN).
  */
 class CLDRPluralRuleConverter {
-       public $rule, $pos, $end;
+       /**
+        * The rule
+        *
+        * @var string
+        */
+       public $rule;
+
+       /**
+        * The position
+        *
+        * @var int
+        */
+       public $pos;
+
+       /**
+        * The last position possible
+        *
+        * @var int
+        */
+       public $end;
+
+       /**
+        * The operators
+        *
+        * @var array
+        */
        public $operators = array();
+
+       /**
+        * The operands
+        *
+        * @var array
+        */
        public $operands = array();
 
        /**
@@ -268,6 +322,9 @@ class CLDRPluralRuleConverter {
 
        /**
         * Convert a rule to RPN. This is the only public entry point.
+        *
+        * @param $rule The rule to convert
+        * @return string The RPN representation of the rule
         */
        public static function convert( $rule ) {
                $parser = new self( $rule );
@@ -285,6 +342,8 @@ class CLDRPluralRuleConverter {
 
        /**
         * Do the operation.
+        *
+        * @return string The RPN representation of the rule (e.g. "5 3 mod n is")
         */
        protected function doConvert() {
                $expectOperator = true;
@@ -341,8 +400,9 @@ class CLDRPluralRuleConverter {
        }
 
        /**
-        * Fetch the next token from the input string. Return it as a
-        * CLDRPluralRuleConverter_Fragment object.
+        * Fetch the next token from the input string.
+        *
+        * @return CLDRPluralRuleConverter_Fragment The next token
         */
        protected function nextToken() {
                if ( $this->pos >= $this->end ) {
@@ -441,6 +501,8 @@ class CLDRPluralRuleConverter {
 
        /**
         * Create a numerical expression object
+        *
+        * @return CLDRPluralRuleConverter_Expression The numerical expression
         */
        protected function newNumber( $text, $pos ) {
                return new CLDRPluralRuleConverter_Expression( $this, 'number', $text, $pos, strlen( $text ) );
@@ -448,6 +510,8 @@ class CLDRPluralRuleConverter {
 
        /**
         * Create a binary operator
+        *
+        * @return CLDRPluralRuleConverter_Operator The operator
         */
        protected function newOperator( $type, $pos, $length ) {
                return new CLDRPluralRuleConverter_Operator( $this, $type, $pos, $length );
@@ -517,6 +581,11 @@ class CLDRPluralRuleConverter_Expression extends CLDRPluralRuleConverter_Fragmen
  * messages), and the binary operator at that location.
  */
 class CLDRPluralRuleConverter_Operator extends CLDRPluralRuleConverter_Fragment {
+       /**
+        * The name
+        *
+        * @var string
+        */
        public $name;
 
        /**
@@ -527,6 +596,8 @@ class CLDRPluralRuleConverter_Operator extends CLDRPluralRuleConverter_Fragment
         *   r = range
         *
         * A number is a kind of range.
+        *
+        * @var array
         */
        static $opTypes = array(
                'or' => 'bbb',
@@ -544,6 +615,8 @@ class CLDRPluralRuleConverter_Operator extends CLDRPluralRuleConverter_Fragment
 
        /**
         * Map converting from the abbrevation to the full form.
+        *
+        * @var array
         */
        static $typeSpecMap = array(
                'b' => 'boolean',
@@ -551,11 +624,26 @@ class CLDRPluralRuleConverter_Operator extends CLDRPluralRuleConverter_Fragment
                'r' => 'range',
        );
 
+       /**
+        * Initialize a new instance of a CLDRPluralRuleConverter_Operator object
+        *
+        * @param CLDRPluralRuleConverter $parser The parser
+        * @param string $name The operator name
+        * @param int $pos The position
+        * @param int $pos The length
+        */
        function __construct( $parser, $name, $pos, $length ) {
                parent::__construct( $parser, $pos, $length );
                $this->name = $name;
        }
 
+       /**
+        * Compute the operation
+        *
+        * @param CLDRPluralRuleConverter_Expression $left The left part of the expression
+        * @param CLDRPluralRuleConverter_Expression $right The right part of the expression
+        * @return CLDRPluralRuleConverter_Expression The result of the operation
+        */
        public function operate( $left, $right ) {
                $typeSpec = self::$opTypes[$this->name];
 
index 30e93c9..91a027e 100644 (file)
@@ -787,7 +787,6 @@ abstract class Maintenance {
                        $this->output( "\n" );
                }
 
-
                // Script specific parameters not defined on construction by
                // Maintenance::addDefaultParams()
                $scriptSpecificParams = array_diff_key(
diff --git a/maintenance/archives/patch-val_ip.sql b/maintenance/archives/patch-val_ip.sql
deleted file mode 100644 (file)
index 9214218..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
--- Column added 2005-05-24
-
-ALTER TABLE /*$wgDBprefix*/validate
-  ADD COLUMN val_ip varchar(20) NOT NULL default '';
diff --git a/maintenance/archives/patch-validate.sql b/maintenance/archives/patch-validate.sql
deleted file mode 100644 (file)
index 9701083..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
--- For article validation
-
-DROP TABLE IF EXISTS /*$wgDBprefix*/validate;
-CREATE TABLE /*$wgDBprefix*/validate (
-  `val_user` int(11) NOT NULL default '0',
-  `val_page` int(11) unsigned NOT NULL default '0',
-  `val_revision` int(11) unsigned NOT NULL default '0',
-  `val_type` int(11) unsigned NOT NULL default '0',
-  `val_value` int(11) default '0',
-  `val_comment` varchar(255) NOT NULL default '',
-  `val_ip` varchar(20) NOT NULL default '',
-  KEY `val_user` (`val_user`,`val_revision`)
-) /*$wgDBTableOptions*/;
index 3dc94c8..64078b4 100644 (file)
@@ -276,7 +276,7 @@ class BackupDumper {
                }
 
                $this->lb = wfGetLBFactory()->newMainLB();
-               $db = $this->lb->getConnection( DB_SLAVE, 'backup' );
+               $db = $this->lb->getConnection( DB_SLAVE, 'dump' );
 
                // Discourage the server from disconnecting us if it takes a long time
                // to read out the big ol' batch query.
index c515c6f..a51e6ee 100644 (file)
@@ -82,7 +82,6 @@ class TextPassDumper extends BackupDumper {
         */
        protected $db;
 
-
        /**
         * Drop the database connection $this->db and try to get a new one.
         *
@@ -123,16 +122,14 @@ class TextPassDumper extends BackupDumper {
                        throw new MWException( __METHOD__ . " rotating DB failed to obtain new load balancer (" . $e->getMessage() . ")" );
                }
 
-
                // 2. The Connection, through the load balancer.
                try {
-                       $this->db = $this->lb->getConnection( DB_SLAVE, 'backup' );
+                       $this->db = $this->lb->getConnection( DB_SLAVE, 'dump' );
                } catch ( Exception $e ) {
                        throw new MWException( __METHOD__ . " rotating DB failed to obtain new database (" . $e->getMessage() . ")" );
                }
        }
 
-
        function initProgress( $history = WikiExporter::FULL ) {
                parent::initProgress();
                $this->timeOfCheckpoint = $this->startTime;
@@ -556,7 +553,6 @@ class TextPassDumper extends BackupDumper {
                return "";
        }
 
-
        /**
         * May throw a database error if, say, the server dies during query.
         * @param $id
index 1cd2016..76cea2c 100644 (file)
@@ -47,7 +47,7 @@ class bench_wfIsWindows extends Benchmarker {
        }
 
        static function is_win() {
-               return substr( php_uname(), 0, 7 ) == 'Windows' ;
+               return substr( php_uname(), 0, 7 ) == 'Windows';
        }
 
        // bench function 1
index d42f9f7..bda64f3 100644 (file)
@@ -75,7 +75,10 @@ do {
                        }
                        $file = $args[0];
                        print "Loading cdb file $file...";
-                       $fileHandle = CdbReader::open( $file );
+                       try {
+                               $fileHandle = CdbReader::open( $file );
+                       } catch( CdbException $e ) {}
+
                        if ( !$fileHandle ) {
                                print "not a cdb file or unable to read it\n";
                        } else {
@@ -91,7 +94,11 @@ do {
                                print "Need to specify a key, Luke\n";
                                break;
                        }
-                       $res = $fileHandle->get( $args[0] );
+                       try {
+                               $res = $fileHandle->get( $args[0] );
+                       } catch ( CdbException $e ) {
+                               print "Unable to read key from file\n";
+                       }
                        if ( $res === false ) {
                                print "No such key/value pair\n";
                        } elseif ( is_string( $res ) ) {
index 2300694..24b63a8 100644 (file)
@@ -38,6 +38,7 @@ class UploadStashCleanup extends Maintenance {
        public function __construct() {
                parent::__construct();
                $this->mDescription = "Clean up abandoned files in temporary uploaded file stash";
+               $this->setBatchSize( 50 );
        }
 
        public function execute() {
@@ -97,17 +98,22 @@ class UploadStashCleanup extends Maintenance {
                $iterator = $tempRepo->getBackend()->getFileList( array( 'dir' => $dir, 'adviseStat' => 1 ) );
                $this->output( "Deleting old thumbnails...\n" );
                $i = 0;
+               $batch = array(); // operation batch
                foreach ( $iterator as $file ) {
                        if ( wfTimestamp( TS_UNIX, $tempRepo->getFileTimestamp( "$dir/$file" ) ) < $cutoff ) {
-                               $status = $tempRepo->quickPurge( "$dir/$file" );
-                               if ( !$status->isOK() ) {
-                                       $this->error( print_r( $status->getErrorsArray(), true ) );
-                               }
-                               if ( ( ++$i % 100 ) == 0 ) {
+                               $batch[] = array( 'op' => 'delete', 'src' => "$dir/$file" );
+                               if ( count( $batch ) >= $this->mBatchSize ) {
+                                       $this->doOperations( $tempRepo, $batch );
+                                       $i += count( $batch );
+                                       $batch = array();
                                        $this->output( "$i\n" );
                                }
                        }
                }
+               if ( count( $batch ) ) {
+                       $this->doOperations( $tempRepo, $batch );
+                       $i += count( $batch );
+               }
                $this->output( "$i done\n" );
 
                // Apparently lots of stash files are not registered in the DB...
@@ -118,26 +124,31 @@ class UploadStashCleanup extends Maintenance {
                        $this->error( "Temp repo is not using the temp container.", 1 ); // die
                }
                $i = 0;
+               $batch = array(); // operation batch
                foreach ( $iterator as $file ) {
-                       // Absolute sanity check for stashed files and file segments
-                       $base = basename( $file );
-                       // @TODO: why are there thumbnails stored in here?
-                       if ( !preg_match( '#(^\d{14}!|\.\d+\.\w+\.\d+$|-\w{12}\.\w{6}\.\d+\.)#', $base ) ) {
-                               $this->output( "Skipped non-stash $file\n" );
-                               continue;
-                       }
                        if ( wfTimestamp( TS_UNIX, $tempRepo->getFileTimestamp( "$dir/$file" ) ) < $cutoff ) {
-                               $status = $tempRepo->quickPurge( "$dir/$file" );
-                               if ( !$status->isOK() ) {
-                                       $this->error( print_r( $status->getErrorsArray(), true ) );
-                               }
-                               if ( ( ++$i % 100 ) == 0 ) {
+                               $batch[] = array( 'op' => 'delete', 'src' => "$dir/$file" );
+                               if ( count( $batch ) >= $this->mBatchSize ) {
+                                       $this->doOperations( $tempRepo, $batch );
+                                       $i += count( $batch );
+                                       $batch = array();
                                        $this->output( "$i\n" );
                                }
                        }
                }
+               if ( count( $batch ) ) {
+                       $this->doOperations( $tempRepo, $batch );
+                       $i += count( $batch );
+               }
                $this->output( "$i done\n" );
        }
+
+       protected function doOperations( FileRepo $tempRepo, array $ops ) {
+               $status = $tempRepo->getBackend()->doQuickOperations( $ops );
+               if ( !$status->isOK() ) {
+                       $this->error( print_r( $status->getErrorsArray(), true ) );
+               }
+       }
 }
 
 $maintClass = "UploadStashCleanup";
index 21ef4ff..49af0b8 100644 (file)
@@ -35,7 +35,8 @@ require_once __DIR__ . '/Maintenance.php';
  * @ingroup Maintenance
  */
 class CopyFileBackend extends Maintenance {
-       protected $statCache = array();
+       /** @var Array|null (path sha1 => stat) Pre-computed dst stat entries from listings */
+       protected $statCache = null;
 
        public function __construct() {
                parent::__construct();
@@ -98,7 +99,7 @@ class CopyFileBackend extends Maintenance {
                                if ( $dstPathsRel === null ) {
                                        $this->error( "Could not list files in $container.", 1 ); // die
                                }
-                               $this->statCache = array(); // clear
+                               $this->statCache = array();
                                foreach ( $dstPathsRel as $dstPathRel ) {
                                        $path = $dst->getRootStoragePath() . "/$backendRel/$dstPathRel";
                                        $this->statCache[sha1( $path )] = $dst->getFileStat( array( 'src' => $path ) );
@@ -338,9 +339,14 @@ class CopyFileBackend extends Maintenance {
                $skipHash = $this->hasOption( 'skiphash' );
                $srcStat = $src->getFileStat( array( 'src' => $sPath ) );
                $dPathSha1 = sha1( $dPath );
-               $dstStat = isset( $this->statCache[$dPathSha1] )
-                       ? $this->statCache[$dPathSha1]
-                       : $dst->getFileStat( array( 'src' => $dPath ) );
+               if ( $this->statCache !== null ) {
+                       // All dst files are already in stat cache
+                       $dstStat = isset( $this->statCache[$dPathSha1] )
+                               ? $this->statCache[$dPathSha1]
+                               : false;
+               } else {
+                       $dstStat = $dst->getFileStat( array( 'src' => $dPath ) );
+               }
                return (
                        is_array( $srcStat ) // sanity check that source exists
                        && is_array( $dstStat ) // dest exists
index 3665cbf..d35efae 100644 (file)
@@ -2530,9 +2530,7 @@ newheader
 newid
 newimages
 newlen
-newmessagesdifflink
 newmessagesdifflinkplural
-newmessageslink
 newmessageslinkplural
 newname
 newnames
index 3bd508c..3157318 100644 (file)
@@ -98,7 +98,7 @@ if ( $maintenance->getDbType() === Maintenance::DB_ADMIN &&
 
 if ( $maintenance->getDbType() === Maintenance::DB_NONE ) {
        if ( $wgLocalisationCacheConf['storeClass'] === false && ( $wgLocalisationCacheConf['store'] == 'db' || ( $wgLocalisationCacheConf['store'] == 'detect' && !$wgCacheDirectory ) ) ) {
-               $wgLocalisationCacheConf['storeClass'] = 'LCStore_Null';
+               $wgLocalisationCacheConf['storeClass'] = 'LCStoreNull';
        }
 }
 $maintenance->finalSetup();
index dd468a9..73296b7 100644 (file)
@@ -97,7 +97,7 @@ abstract class DumpIterator extends Maintenance {
                if ( $this->getDbType() == Maintenance::DB_NONE ) {
                        global $wgUseDatabaseMessages, $wgLocalisationCacheConf, $wgHooks;
                        $wgUseDatabaseMessages = false;
-                       $wgLocalisationCacheConf['storeClass'] = 'LCStore_Null';
+                       $wgLocalisationCacheConf['storeClass'] = 'LCStoreNull';
                        $wgHooks['InterwikiLoadPrefix'][] = 'DumpIterator::disableInterwikis';
                }
        }
index 5d783cb..37c2a31 100644 (file)
@@ -29,7 +29,6 @@ $originalDir = getcwd();
 require_once __DIR__ . '/commandLine.inc';
 require_once __DIR__ . '/backupTextPass.inc';
 
-
 $dumper = new TextPassDumper( $argv );
 
 if ( !isset( $options['help'] ) ) {
index 1a9293c..0ec1955 100644 (file)
@@ -64,7 +64,7 @@ By default, outputs relative paths against the parent directory of \$wgUploadDir
                                $this->mSharedSupplement = true;
                        }
                }
-               $this-> { $this->mAction } ( $this->mShared );
+               $this->{ $this->mAction } ( $this->mShared );
                if ( $this->mSharedSupplement ) {
                        $this->fetchUsed( true );
                }
diff --git a/maintenance/fuzz-tester.php b/maintenance/fuzz-tester.php
deleted file mode 100644 (file)
index 548bb2f..0000000
+++ /dev/null
@@ -1,2692 +0,0 @@
-<?php
-/**
- * Performs fuzz-style testing of MediaWiki's parser and forms.
- *
- * Copyright © 2006 Nick Jenkins
- *
- * 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 Maintenance
- * @author Nick Jenkins ( http://nickj.org/ ).
-
-
-Started: 18 May 2006.
-
-Description:
-  Performs fuzz-style testing of MediaWiki's parser and forms.
-
-How:
-  - Generate lots of nasty wiki text.
-  - Ask the Parser to render that wiki text to HTML, or ask MediaWiki's forms
-       to deal with that wiki text.
-  - Check MediaWiki's output for problems.
-  - Repeat.
-
-Why:
-  - To help find bugs.
-  - To help find security issues, or potential security issues.
-
-What type of problems are being checked for:
-  - Unclosed tags.
-  - Errors or interesting warnings from Tidy.
-  - PHP errors / warnings / notices.
-  - MediaWiki internal errors.
-  - Very slow responses.
-  - No response from apache.
-  - Optionally checking for malformed HTML using the W3C validator.
-
-Background:
-  Many of the wikiFuzz class methods are a modified PHP port,
-  of a "shameless" Python port, of LCAMTUF'S MANGELME:
-  - http://www.securiteam.com/tools/6Z00N1PBFK.html
-  - http://www.securityfocus.com/archive/1/378632/2004-10-15/2004-10-21/0
-
-Video:
-  There's an XviD video discussing this fuzz tester. You can get it from:
-  http://files.nickj.org/MediaWiki/Fuzz-Testing-MediaWiki-xvid.avi
-
-Requirements:
-  To run this, you will need:
-  - Command-line PHP5, with PHP-curl enabled (not all installations have this
-       enabled - try "apt-get install php5-curl" if you're on Debian to install).
-  - the Tidy standalone executable. ("apt-get install tidy").
-
-Optional:
-  - If you want to run the curl scripts, you'll need standalone curl installed
-       ("apt-get install curl")
-  - For viewing the W3C validator output on a command line, the "html2text"
-       program may be useful ("apt-get install html2text")
-
-Saving tests and test results:
-  Any of the fuzz tests which find problems are saved for later review.
-  In order to help track down problems, tests are saved in a number of
-  different formats. The default filename extensions and their meanings are:
-  - ".test.php" : PHP script that reproduces just that one problem using PHP-Curl.
-  - ".curl.sh"  : Shell script that reproduces that problem using standalone curl.
-  - ".data.bin" : The serialized PHP data so that this script can re-run the test.
-  - ".info.txt" : A human-readable text file with details of the field contents.
-
-Wiki configuration for testing:
-  You should make some additions to LocalSettings.php in order to catch the most
-  errors. Note this configuration is for **TESTING PURPOSES ONLY**, and is IN NO
-  WAY, SHAPE, OR FORM suitable for deployment on a hostile network. That said,
-  personally I find these additions to be the most helpful for testing purposes:
-
-  // --------- Start ---------
-  // Everyone can do everything. Very useful for testing, yet useless for deployment.
-  $wgGroupPermissions['*']['autoconfirmed']   = true;
-  $wgGroupPermissions['*']['block']           = true;
-  $wgGroupPermissions['*']['bot']             = true;
-  $wgGroupPermissions['*']['delete']          = true;
-  $wgGroupPermissions['*']['deletedhistory']  = true;
-  $wgGroupPermissions['*']['deleterevision']  = true;
-  $wgGroupPermissions['*']['editinterface']   = true;
-  $wgGroupPermissions['*']['hiderevision']    = true;
-  $wgGroupPermissions['*']['import']          = true;
-  $wgGroupPermissions['*']['importupload']    = true;
-  $wgGroupPermissions['*']['minoredit']       = true;
-  $wgGroupPermissions['*']['move']            = true;
-  $wgGroupPermissions['*']['patrol']          = true;
-  $wgGroupPermissions['*']['protect']         = true;
-  $wgGroupPermissions['*']['proxyunbannable'] = true;
-  $wgGroupPermissions['*']['renameuser']      = true;
-  $wgGroupPermissions['*']['reupload']        = true;
-  $wgGroupPermissions['*']['reupload-shared'] = true;
-  $wgGroupPermissions['*']['rollback']        = true;
-  $wgGroupPermissions['*']['siteadmin']       = true;
-  $wgGroupPermissions['*']['unwatchedpages']  = true;
-  $wgGroupPermissions['*']['upload']          = true;
-  $wgGroupPermissions['*']['userrights']      = true;
-  $wgGroupPermissions['*']['renameuser']      = true;
-  $wgGroupPermissions['*']['makebot']         = true;
-  $wgGroupPermissions['*']['makesysop']       = true;
-
-  // Enable weird and wonderful options:
-                                                         // Increase default error reporting level.
-  error_reporting (E_ALL);    // At a later date could be increased to E_ALL | E_STRICT
-  $wgEnableUploads = true;    // enable uploads.
-  $wgDBerrorLog = "/root/mediawiki-db-error-log.txt";  // log DB errors, replace with suitable path.
-  $wgShowSQLErrors = true;    // Show SQL errors (instead of saying the query was hidden).
-  $wgShowExceptionDetails = true;  // want backtraces.
-  $wgEnableAPI = true;        // enable API.
-  $wgEnableWriteAPI = true;   // enable API.
-
-  // Install & enable Parser Hook extensions to increase code coverage. E.g.:
-  require_once "extensions/ParserFunctions/ParserFunctions.php";
-  require_once "extensions/Cite/Cite.php";
-  require_once "extensions/inputbox/inputbox.php";
-  require_once "extensions/Sort/Sort.php";
-  require_once "extensions/wikihiero/wikihiero.php";
-  require_once "extensions/CharInsert/CharInsert.php";
-  require_once "extensions/FixedImage/FixedImage.php";
-
-  // Install & enable Special Page extensions to increase code coverage. E.g.:
-  require_once "extensions/Cite/SpecialCite.php";
-  require_once "extensions/Renameuser/SpecialRenameuser.php";
-  // --------- End ---------
-
-  If you want to try E_STRICT error logging, add this to the above:
-  // --------- Start ---------
-  error_reporting (E_ALL | E_STRICT);
-  set_error_handler( 'error_handler' );
-  function error_handler ($type, $message, $file=__FILE__, $line=__LINE__) {
-        if ($message == "var: Deprecated. Please use the public/private/protected modifiers") return;
-        print "<br />\n<b>Strict Standards:</b> Type: <b>$type</b>:  $message in <b>$file</b> on line <b>$line</b><br />\n";
-  }
-  // --------- End ---------
-
-  Also add/change this in LocalSettings.php:
-  // --------- Start ---------
-  $wgEnableProfileInfo = true;
-  $wgDBserver = "localhost"; // replace with DB server hostname
-  // --------- End ---------
-
-Usage:
-  Run with "php fuzz-tester.php".
-  To see the various command-line options, run "php fuzz-tester.php --help".
-  To stop the script, press Ctrl-C.
-
-Console output:
-  - If requested, first any previously failed tests will be rerun.
-  - Then new tests will be generated and run. Any tests that fail will be saved,
-       and a brief message about why they failed will be printed on the console.
-  - The console will show the number of tests run, time run, number of tests
-       failed, number of tests being done per minute, and the name of the current test.
-
-TODO:
-  Some known things that could improve this script:
-  - Logging in with cookie jar storage needed for some tests (as there are some
-       pages that cannot be tested without being logged in, and which are currently
-       untested - e.g. Special:Emailuser, Special:Preferences, adding to Watchist).
-  - Testing of Timeline extension (I cannot test as ploticus has/had issues on
-       my architecture).
-
-*/
-
-// ///////////////////////// COMMAND LINE HELP ////////////////////////////////////
-
-// This is a command line script, load MediaWiki env (gives command line options);
-require_once __DIR__ . '/commandLine.inc';
-
-// if the user asked for an explanation of command line options.
-if ( isset( $options["help"] ) ) {
-       print <<<ENDS
-MediaWiki $wgVersion fuzz tester
-Usage: php {$_SERVER["SCRIPT_NAME"]} [--quiet] [--base-url=<url-to-test-wiki>]
-                                                  [--directory=<failed-test-path>] [--include-binary]
-                                                  [--w3c-validate] [--delete-passed-retests] [--help]
-                                                  [--user=<username>] [--password=<password>]
-                                                  [--rerun-failed-tests] [--max-errors=<int>]
-                                                  [--max-runtime=<num-minutes>]
-                                                  [--specific-test=<test-name>]
-
-Options:
-  --quiet                 : Hides passed tests, shows only failed tests.
-  --base-url              : URL to a wiki on which to run the tests.
-                                                       The "http://" is optional and can be omitted.
-  --directory             : Full path to directory for storing failed tests.
-                                                       Will be created if it does not exist.
-  --include-binary        : Includes non-alphanumeric characters in the tests.
-  --w3c-validate          : Validates pages using the W3C's web validator.
-                                                       Slow. Currently many pages fail validation.
-  --user                  : Login name of a valid user on your test wiki.
-  --password              : Password for the valid user on your test wiki.
-  --delete-passed-retests : Will delete retests that now pass.
-                                                       Requires --rerun-failed-tests to be meaningful.
-  --rerun-failed-tests    : Whether to rerun any previously failed tests.
-  --max-errors            : Maximum number of errors to report before exiting.
-                                                       Does not include errors from --rerun-failed-tests
-  --max-runtime           : Maximum runtime, in minutes, to run before exiting.
-                                                       Only applies to new tests, not --rerun-failed-tests
-  --specific-test         : Runs only the specified fuzz test.
-                                                       Only applies to new tests, not --rerun-failed-tests
-  --keep-passed-tests     : Saves all test files, even those that pass.
-  --help                  : Show this help message.
-
-Example:
-  If you wanted to fuzz test a nightly MediaWiki checkout using cron for 1 hour,
-  and only wanted to be informed of errors, and did not want to redo previously
-  failed tests, and wanted a maximum of 100 errors, then you could do:
-  php {$_SERVER["SCRIPT_NAME"]} --quiet --max-errors=100 --max-runtime=60
-
-
-ENDS;
-
-       exit( 0 );
-}
-
-
-// if we got command line options, check they look valid.
-$validOptions = array ( "quiet", "base-url", "directory", "include-binary",
-               "w3c-validate", "user", "password", "delete-passed-retests",
-               "rerun-failed-tests", "max-errors",
-               "max-runtime", "specific-test", "keep-passed-tests", "help" );
-if ( !empty( $options ) ) {
-       $unknownArgs = array_diff ( array_keys( $options ), $validOptions );
-       foreach ( $unknownArgs as $invalidArg ) {
-               print "Ignoring invalid command-line option: --$invalidArg\n";
-       }
-}
-
-
-// /////////////////////////// CONFIGURATION ////////////////////////////////////
-
-// URL to some wiki on which we can run our tests.
-if ( !empty( $options["base-url"] ) ) {
-       define( "WIKI_BASE_URL", $options["base-url"] );
-} else {
-       define( "WIKI_BASE_URL", $wgServer . $wgScriptPath . '/' );
-}
-
-// The directory name where we store the output.
-// Example for Windows: "c:\\temp\\wiki-fuzz"
-if ( !empty( $options["directory"] ) ) {
-       define( "DIRECTORY", $options["directory"] );
-} else {
-       define( "DIRECTORY", "{$wgUploadDirectory}/fuzz-tests" );
-}
-
-// Should our test fuzz data include binary strings?
-define( "INCLUDE_BINARY",  isset( $options["include-binary"] ) );
-
-// Whether we want to validate HTML output on the web.
-// At the moment very few generated pages will validate, so not recommended.
-define( "VALIDATE_ON_WEB", isset( $options["w3c-validate"] ) );
-// URL to use to validate our output:
-define( "VALIDATOR_URL",  "http://validator.w3.org/check" );
-
-// Location of Tidy standalone executable.
-define( "PATH_TO_TIDY",  "/usr/bin/tidy" );
-
-// The name of a user who has edited on your wiki. Used
-// when testing the Special:Contributions and Special:Userlogin page.
-if ( !empty( $options["user"] ) ) {
-       define( "USER_ON_WIKI", $options["user"] );
-} else {
-       define( "USER_ON_WIKI", "nickj" );
-}
-
-// The password of the above user. Used when testing the login page,
-// and to do this we sometimes need to login successfully.
-if ( !empty( $options["password"] ) ) {
-       define( "USER_PASSWORD", $options["password"] );
-} else {
-       // And no, this is not a valid password on any public wiki.
-       define( "USER_PASSWORD", "nickj" );
-}
-
-// If we have a test that failed, and then we run it again, and it passes,
-// do you want to delete it or keep it?
-define( "DELETE_PASSED_RETESTS", isset( $options["delete-passed-retests"] ) );
-
-// Do we want to rerun old saved tests at script startup?
-// Set to true to help catch regressions, or false if you only want new stuff.
-define( "RERUN_OLD_TESTS", isset( $options["rerun-failed-tests"] ) );
-
-// File where the database errors are logged. Should be defined in LocalSettings.php.
-define( "DB_ERROR_LOG_FILE", $wgDBerrorLog );
-
-// Run in chatty mode (all output, default), or run in quiet mode (only prints out details of failed tests)?
-define( "QUIET", isset( $options["quiet"] ) );
-
-// Keep all test files, even those that pass. Potentially useful to tracking input that causes something
-// unusual to happen, if you don't know what "unusual" is until later.
-define( "KEEP_PASSED_TESTS", isset( $options["keep-passed-tests"] ) );
-
-// The maximum runtime, if specified.
-if ( !empty( $options["max-runtime"] ) && intval( $options["max-runtime"] ) > 0 ) {
-       define( "MAX_RUNTIME", intval( $options["max-runtime"] ) );
-}
-
-// The maximum number of problems to find, if specified. Excludes retest errors.
-if ( !empty( $options["max-errors"] ) && intval( $options["max-errors"] ) > 0 ) {
-       define( "MAX_ERRORS", intval( $options["max-errors"] ) );
-}
-
-// if the user has requested a specific test (instead of all tests), and the test they asked for looks valid.
-if ( !empty( $options["specific-test"] ) ) {
-       if ( class_exists( $options["specific-test"] ) && get_parent_class( $options["specific-test"] ) == "pageTest" ) {
-               define( "SPECIFIC_TEST", $options["specific-test"] );
-       }
-       else {
-               print "Ignoring invalid --specific-test\n";
-       }
-}
-
-// Define the file extensions we'll use:
-define( "PHP_TEST" , ".test.php" );
-define( "CURL_TEST", ".curl.sh" );
-define( "DATA_FILE", ".data.bin" );
-define( "INFO_FILE", ".info.txt" );
-define( "HTML_FILE", ".wiki_preview.html" );
-
-// If it goes wrong, we want to know about it.
-error_reporting( E_ALL | E_STRICT );
-
-// //////////////  A CLASS THAT GENERATES RANDOM NASTY WIKI & HTML STRINGS  //////////////////////
-
-class wikiFuzz {
-
-       // Only some HTML tags are understood with params by MediaWiki, the rest are ignored.
-       // List the tags that accept params below, as well as what those params are.
-       public static $data = array(
-                       "B"          => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "CAPTION"    => array( "CLASS", "ID", "STYLE", "align", "lang", "dir", "title" ),
-                       "CENTER"     => array( "CLASS", "STYLE", "ID", "lang", "dir", "title" ),
-                       "DIV"        => array( "CLASS", "STYLE", "ID", "align", "lang", "dir", "title" ),
-                       "FONT"       => array( "CLASS", "STYLE", "ID", "lang", "dir", "title", "face", "size", "color" ),
-                       "H1"         => array( "STYLE", "CLASS", "ID", "align", "lang", "dir", "title" ),
-                       "H2"         => array( "STYLE", "CLASS", "ID", "align", "lang", "dir", "title" ),
-                       "HR"         => array( "STYLE", "CLASS", "ID", "WIDTH", "lang", "dir", "title", "size", "noshade" ),
-                       "LI"         => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", "type", "value" ),
-                       "TABLE"      => array( "STYLE", "CLASS", "ID", "BGCOLOR", "WIDTH", "ALIGN", "BORDER", "CELLPADDING",
-                                                                  "CELLSPACING", "lang", "dir", "title", "summary", "frame", "rules" ),
-                       "TD"         => array( "STYLE", "CLASS", "ID", "BGCOLOR", "WIDTH", "ALIGN", "COLSPAN", "ROWSPAN",
-                                                                 "VALIGN", "abbr", "axis", "headers", "scope", "nowrap", "height", "lang",
-                                                                 "dir", "title", "char", "charoff" ),
-                       "TH"         => array( "STYLE", "CLASS", "ID", "BGCOLOR", "WIDTH", "ALIGN", "COLSPAN", "ROWSPAN",
-                                                                 "VALIGN", "abbr", "axis", "headers", "scope", "nowrap", "height", "lang",
-                                                                 "dir", "title", "char", "charoff" ),
-                       "TR"         => array( "CLASS", "STYLE", "ID", "BGCOLOR", "ALIGN", "VALIGN", "lang", "dir", "title", "char", "charoff" ),
-                       "UL"         => array( "CLASS", "STYLE", "ID", "lang", "dir", "title", "type" ),
-                       "P"          => array( "style", "class", "id", "align", "lang", "dir", "title" ),
-                       "blockquote" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", "cite" ),
-                       "span"       => array( "CLASS", "ID", "STYLE", "align", "lang", "dir", "title" ),
-                       "code"       => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "tt"         => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "small"      => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "big"        => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "s"          => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "u"          => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "del"        => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", "datetime", "cite" ),
-                       "ins"        => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", "datetime", "cite" ),
-                       "sub"        => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "sup"        => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "ol"         => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", "type", "start" ),
-                       "br"         => array( "CLASS", "ID", "STYLE", "title", "clear" ),
-                       "cite"       => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "var"        => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "ruby"       => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "rt"         => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "rp"         => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "dt"         => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "dl"         => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "em"         => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "strong"     => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "i"          => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "thead"      => array( "CLASS", "ID", "STYLE", "lang", "dir", "title",  'align', 'char', 'charoff', 'valign' ),
-                       "tfoot"      => array( "CLASS", "ID", "STYLE", "lang", "dir", "title",  'align', 'char', 'charoff', 'valign' ),
-                       "tbody"      => array( "CLASS", "ID", "STYLE", "lang", "dir", "title",  'align', 'char', 'charoff', 'valign' ),
-                       "colgroup"   => array( "CLASS", "ID", "STYLE", "lang", "dir", "title",  'align', 'char', 'charoff', 'valign', 'span', 'width' ),
-                       "col"        => array( "CLASS", "ID", "STYLE", "lang", "dir", "title",  'align', 'char', 'charoff', 'valign', 'span', 'width' ),
-                       "pre"        => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", "width" ),
-
-                       // extension tags that accept parameters:
-                       "sort"         => array( "order", "class" ),
-                       "ref"          => array( "name" ),
-                       "categorytree" => array( "hideroot", "mode", "style" ),
-                       "chemform"     => array( "link", "wikilink", "query" ),
-                       "section"      => array( "begin", "new" ),
-
-                       // older MW transclusion.
-                       "transclude"   => array( "page" ),
-                               );
-
-       // The types of the HTML that we will be testing were defined above
-       // Note: this needs to be initialized later to be equal to: array_keys(wikiFuzz::$data);
-       // as such, it also needs to also be publicly modifiable.
-       public static $types;
-
-
-       // Some attribute values.
-       static private $other = array( "&", "=", ":", "?", "\"", "\n", "%n%n%n%n%n%n%n%n%n%n%n%n", "\\" );
-       static private $ints  = array(
-                       // various numbers
-                       "0", "-1", "127", "-7897", "89000", "808080", "90928345",
-                       "0xfffffff", "ffff",
-
-                       // Different ways of saying: '
-                       "&#0000039;", // Long UTF-8 Unicode encoding
-                       "&#39;",  // dec version.
-                       "&#x27;", // hex version.
-                       "&#xA7;", // malformed hex variant, MSB not zero.
-
-                       // Different ways of saying: "
-                       "&#0000034;", // Long UTF-8 Unicode encoding
-                       "&#34;",
-                       "&#x22;", // hex version.
-                       "&#xA2;", // malformed hex variant, MSB not zero.
-
-                       // Different ways of saying: <
-                       "<",
-                       "&#0000060",  // Long UTF-8 Unicode encoding without semicolon (Mediawiki wants the colon)
-                       "&#0000060;", // Long UTF-8 Unicode encoding with semicolon
-                       "&#60;",
-                       "&#x3C;",     // hex version.
-                       "&#xBC;",     // malformed hex variant, MSB not zero.
-                       "&#x0003C;",  // mid-length hex version
-                       "&#X00003C;", // slightly longer hex version, with capital "X"
-
-                       // Different ways of saying: >
-                       ">",
-                       "&#0000062;", // Long UTF-8 Unicode encoding
-                       "&#62;",
-                       "&#x3E;",     // hex version.
-                       "&#xBE;",     // malformed variant, MSB not zero.
-
-                       // Different ways of saying: [
-                       "&#0000091;", // Long UTF-8 Unicode encoding
-                       "&#91;",
-                       "&#x5B;",     // hex version.
-
-                       // Different ways of saying: {{
-                       "&#0000123;&#0000123;", // Long UTF-8 Unicode encoding
-                       "&#123;&#123;",
-                       "&#x7B;&#x7B;",         // hex version.
-
-                       // Different ways of saying: |
-                       "&#0000124;", // Long UTF-8 Unicode encoding
-                       "&#124;",
-                       "&#x7C;",     // hex version.
-                       "&#xFC;",     // malformed hex variant, MSB not zero.
-
-                       // a "lignature" - http://www.robinlionheart.com/stds/html4/spchars#ligature
-                       // &#8204; == &zwnj;
-                       "&#8204;"
-                               );
-
-       // Defines various wiki-related bits of syntax, that can potentially cause
-       // MediaWiki to do something other than just print that literal text.
-       static private $ext = array(
-                       // links, templates, parameters.
-                       "[[", "]]", "{{", "}}", "|", "[", "]", "{{{", "}}}", "|]]",
-
-                       // wiki tables.
-                       "\n{|", "\n|}",
-                       "!",
-                       "\n!",
-                       "!!",
-                       "||",
-                       "\n|-", "| ", "\n|",
-
-                       // section headings.
-                       "=", "==", "===", "====", "=====", "======",
-
-                       // lists (ordered and unordered) and indentation.
-                       "\n*", "*", "\n:", ":",
-                       "\n#", "#",
-
-                       // definition lists (dl, dt, dd), newline, and newline with pre, and a tab.
-                       "\n;", ";", "\n ",
-
-                       // Whitespace: newline, tab, space.
-                       "\n", "\t", " ",
-
-                       // Some XSS attack vectors from http://ha.ckers.org/xss.html
-                       "&#x09;", // tab
-                       "&#x0A;", // newline
-                       "&#x0D;", // carriage return
-                       "\0",     // null character
-                       " &#14; ", // spaces and meta characters
-                       "'';!--\"<XSS>=&{()}", // compact injection of XSS & SQL tester
-
-                       // various NULL fields
-                       "%00",
-                       "&#00;",
-                       "\0",
-
-                       // horizontal rule.
-                       "-----", "\n-----",
-
-                       // signature, redirect, bold, italics.
-                       "~~~~", "#REDIRECT [[", "'''", "''",
-
-                       // comments.
-                       "<!--", "-->",
-
-                       // quotes.
-                       "\"", "'",
-
-                       // tag start and tag end.
-                       "<", ">",
-
-                       // implicit link creation on URIs.
-                       "http://",
-                       "https://",
-                       "ftp://",
-                       "irc://",
-                       "news:",
-                       'gopher://',
-                       'telnet://',
-                       'nntp://',
-                       'worldwind://',
-                       'mailto:',
-
-                       // images.
-                       "[[image:",
-                       ".gif",
-                       ".png",
-                       ".jpg",
-                       ".jpeg",
-                       'thumbnail=',
-                       'thumbnail',
-                       'thumb=',
-                       'thumb',
-                       'right',
-                       'none',
-                       'left',
-                       'framed',
-                       'frame',
-                       'enframed',
-                       'centre',
-                       'center',
-                       "Image:",
-                       "[[:Image",
-                       'px',
-                       'upright=',
-                       'border',
-
-                       // misc stuff to throw at the Parser.
-                       '%08X',
-                       '/',
-                       ":x{|",
-                       "\n|+",
-                       "<noinclude>",
-                       "</noinclude>",
-                       " \302\273",
-                       " :",
-                       " !",
-                       " ;",
-                       "\302\253",
-                       "[[category:",
-                       "?=",
-                       "(",
-                       ")",
-                       "]]]",
-                       "../",
-                       "{{{{",
-                       "}}}}",
-                       "[[Special:",
-                       "<includeonly>",
-                       "</includeonly>",
-                       "<!--MWTEMPLATESECTION=",
-                       '<!--MWTOC-->',
-
-                       // implicit link creation on booknum, RFC, and PubMed ID usage (both with and without IDs)
-                       "ISBN 2",
-                       "RFC 000",
-                       "PMID 000",
-                       "ISBN ",
-                       "RFC ",
-                       "PMID ",
-
-                       // magic words:
-                       '__NOTOC__',
-                       '__FORCETOC__',
-                       '__NOEDITSECTION__',
-                       '__START__',
-                       '__NOTITLECONVERT__',
-                       '__NOCONTENTCONVERT__',
-                       '__END__',
-                       '__TOC__',
-                       '__NOTC__',
-                       '__NOCC__',
-                       "__FORCETOC__",
-                       "__NEWSECTIONLINK__",
-                       "__NOGALLERY__",
-
-                       // more magic words / internal templates.
-                       '{{PAGENAME}}',
-                       '{{PAGENAMEE}}',
-                       '{{NAMESPACE}}',
-                       "{{MSG:",
-                       "}}",
-                       "{{MSGNW:",
-                       "}}",
-                       "{{INT:",
-                       "}}",
-                       '{{SITENAME}}',
-                       "{{NS:",
-                       "}}",
-                       "{{LOCALURL:",
-                       "}}",
-                       "{{LOCALURLE:",
-                       "}}",
-                       "{{SCRIPTPATH}}",
-                       "{{GRAMMAR:gentiv|",
-                       "}}",
-                       "{{REVISIONID}}",
-                       "{{SUBPAGENAME}}",
-                       "{{SUBPAGENAMEE}}",
-                       "{{ns:0}}",
-                       "{{fullurle:",
-                       "}}",
-                       "{{subst::",
-                       "}}",
-                       "{{UCFIRST:",
-                       "}}",
-                       "{{UC:",
-                       '{{SERVERNAME}}',
-                       '{{SERVER}}',
-                       "{{RAW:",
-                       "}}",
-                       "{{PLURAL:",
-                       "}}",
-                       "{{LCFIRST:",
-                       "}}",
-                       "{{LC:",
-                       "}}",
-                       '{{CURRENTWEEK}}',
-                       '{{CURRENTDOW}}',
-                       "{{INT:{{LC:contribs-showhideminor}}|",
-                       "}}",
-                       "{{INT:googlesearch|",
-                       "}}",
-                        "{{ROOTPAGENAME}}",
-                       "{{BASEPAGENAME}}",
-                       "{{CONTENTLANGUAGE}}",
-                       "{{PAGESINNAMESPACE:}}",
-                       "{{#language:",
-                       "}}",
-                       "{{#special:",
-                       "}}",
-                       "{{#special:emailuser",
-                       "}}",
-
-                       // Some raw link for magic words.
-                       "{{NUMBEROFPAGES:R",
-                       "}}",
-                       "{{NUMBEROFUSERS:R",
-                       "}}",
-                       "{{NUMBEROFARTICLES:R",
-                       "}}",
-                       "{{NUMBEROFFILES:R",
-                       "}}",
-                       "{{NUMBEROFADMINS:R",
-                       "}}",
-                       "{{padleft:",
-                       "}}",
-                       "{{padright:",
-                       "}}",
-                       "{{DEFAULTSORT:",
-                       "}}",
-
-                       // internal Math "extension":
-                       "<math>",
-                       "</math>",
-
-                       // Parser extension functions:
-                       "{{#expr:",
-                       "{{#if:",
-                       "{{#ifeq:",
-                       "{{#ifexist:",
-                       "{{#ifexpr:",
-                       "{{#switch:",
-                       "{{#time:",
-                       "}}",
-
-                       // references table for the Cite extension.
-                       "<references/>",
-
-                       // Internal Parser tokens - try inserting some of these.
-                       "UNIQ25f46b0524f13e67NOPARSE",
-                       "UNIQ17197916557e7cd6-HTMLCommentStrip46238afc3bb0cf5f00000002",
-                       "\x07UNIQ17197916557e7cd6-HTMLCommentStrip46238afc3bb0cf5f00000002-QINU",
-
-                       // Inputbox extension:
-                       "<inputbox>\ntype=search\nsearchbuttonlabel=\n",
-                       "</inputbox>",
-
-                       // charInsert extension:
-                       "<charInsert>",
-                       "</charInsert>",
-
-                       // wikiHiero extension:
-                       "<hiero>",
-                       "</hiero>",
-
-                       // Image gallery:
-                       "<gallery>",
-                       "</gallery>",
-
-                       // FixedImage extension.
-                       "<fundraising/>",
-
-                       // Timeline extension: currently untested.
-
-                       // Nowiki:
-                       "<nOwIkI>",
-                       "</nowiki>",
-
-                       // an external image to test the external image displaying code
-                       "http://debian.org/Pics/debian.png",
-
-                       // LabeledSectionTransclusion extension.
-                       "{{#lstx:",
-                       "}}",
-                       "{{#lst:",
-                       "}}",
-                       "{{#lst:Main Page|",
-                       "}}"
-                       );
-
-       /**
-        ** Randomly returns one element of the input array.
-        */
-       public static function chooseInput( array $input ) {
-               $randindex = wikiFuzz::randnum( count( $input ) - 1 );
-               return $input[$randindex];
-       }
-
-       // Max number of parameters for HTML attributes.
-       static private $maxparams = 10;
-
-       /**
-        * Returns random number between finish and start.
-        * @param $finish
-        * @param $start int
-        * @return int
-        */
-       public static function randnum( $finish, $start = 0 ) {
-               return mt_rand( $start, $finish );
-       }
-
-       /**
-        * Returns a mix of random text and random wiki syntax.
-        * @return string
-        */
-       private static function randstring() {
-               $thestring = "";
-
-               for ( $i = 0; $i < 40; $i++ ) {
-                       $what = wikiFuzz::randnum( 1 );
-
-                       if ( $what == 0 ) { // include some random wiki syntax
-                               $which = wikiFuzz::randnum( count( wikiFuzz::$ext ) - 1 );
-                               $thestring .= wikiFuzz::$ext[$which];
-                       }
-                       else { // include some random text
-                               $char = INCLUDE_BINARY
-                                       // Decimal version:
-                                       // "&#" . wikiFuzz::randnum(255) . ";"
-                                       // Hex version:
-                                       ? "&#x" . str_pad( dechex( wikiFuzz::randnum( 255 ) ), wikiFuzz::randnum( 2, 7 ), "0", STR_PAD_LEFT ) . ";"
-                                       // A truly binary version:
-                                       // ? chr(wikiFuzz::randnum(0,255))
-                                       : chr( wikiFuzz::randnum( 126, 32 ) );
-
-                               $length = wikiFuzz::randnum( 8 );
-                               $thestring .= str_repeat ( $char, $length );
-                       }
-               }
-               return $thestring;
-       }
-
-       /**
-        * Returns either random text, or random wiki syntax, or random data from "ints",
-        *        or random data from "other".
-        * @return string
-        */
-       private static function makestring() {
-               $what = wikiFuzz::randnum( 2 );
-               if ( $what == 0 ) {
-                       return wikiFuzz::randstring();
-               } elseif ( $what == 1 ) {
-                       return wikiFuzz::$ints[wikiFuzz::randnum( count( wikiFuzz::$ints ) - 1 )];
-               } else {
-                       return wikiFuzz::$other[wikiFuzz::randnum( count( wikiFuzz::$other ) - 1 )];
-               }
-       }
-
-       /**
-        * Returns the matched character slash-escaped as in a C string
-        * Helper for makeTitleSafe callback
-        * @param $matches
-        * @return string
-        */
-       private static function stringEscape( $matches ) {
-               return sprintf( "\\x%02x", ord( $matches[1] ) );
-       }
-
-       /**
-        ** Strips out the stuff that Mediawiki balks at in a page's title.
-        **        Implementation copied/pasted from cleanupTable.inc & cleanupImages.php
-        * @param $str string
-        * @return string
-        */
-       public static function makeTitleSafe( $str ) {
-               $legalTitleChars = " %!\"$&'()*,\\-.\\/0-9:;=?@A-Z\\\\^_`a-z~\\x80-\\xFF";
-               return preg_replace_callback(
-                               "/([^$legalTitleChars])/", 'wikiFuzz::stringEscape',
-                               $str );
-       }
-
-       /**
-        ** Returns a string of fuzz text.
-        * @return string
-        */
-       private static function loop() {
-               switch ( wikiFuzz::randnum( 3 ) ) {
-                       case 1: // an opening tag, with parameters.
-                               $string = "";
-                               $i = wikiFuzz::randnum( count( wikiFuzz::$types ) - 1 );
-                               $t = wikiFuzz::$types[$i];
-                               $arr = wikiFuzz::$data[$t];
-                               $string .= "<" . $t . " ";
-                               $num_params = min( wikiFuzz::$maxparams, count( $arr ) );
-                               for ( $z = 0; $z < $num_params; $z++ ) {
-                                       $badparam = $arr[wikiFuzz::randnum( count( $arr ) - 1 )];
-                                       $badstring = wikiFuzz::makestring();
-                                       $string .= $badparam . "=" . wikiFuzz::getRandQuote() . $badstring . wikiFuzz::getRandQuote() . " ";
-                               }
-                               $string .= ">\n";
-                               return $string;
-                       case 2: // a closing tag.
-                               $i = wikiFuzz::randnum( count( wikiFuzz::$types ) - 1 );
-                               return "</" . wikiFuzz::$types[$i] . ">";
-                       case 3: // a random string, between tags.
-                               return wikiFuzz::makeString();
-               }
-               return "";    // catch-all, should never be called.
-       }
-
-       /**
-        * Returns one of the three styles of random quote: ', ", and nothing.
-        * @return string
-        */
-       private static function getRandQuote() {
-               switch ( wikiFuzz::randnum( 3 ) ) {
-                       case 1 : return "'";
-                       case 2 : return "\"";
-                       default: return "";
-               }
-       }
-
-       /**
-        ** Returns fuzz text, with the parameter indicating approximately how many lines of text you want.
-        * @param $maxtypes int
-        * @return string
-        */
-       public static function makeFuzz( $maxtypes = 2 ) {
-               $page = "";
-               for ( $k = 0; $k < $maxtypes; $k++ ) {
-                       $page .= wikiFuzz::loop();
-               }
-               return $page;
-       }
-}
-
-
-// //////   MEDIAWIKI PAGES TO TEST, AND HOW TO TEST THEM  ///////
-
-/**
- ** A page test has just these things:
- **        1) Form parameters.
- **        2) the URL we are going to test those parameters on.
- **        3) Any cookies required for the test.
- **        4) Whether Tidy should validate the page. Defaults to true, but can be turned off.
- **        Declared abstract because it should be extended by a class
- **        that supplies these parameters.
- */
-abstract class pageTest {
-       protected $params;
-       protected $pagePath;
-       protected $cookie = "";
-       protected $tidyValidate = true;
-
-       public function getParams() {
-               return $this->params;
-       }
-
-       public function getPagePath() {
-               return $this->pagePath;
-       }
-
-       public function getCookie() {
-               return $this->cookie;
-       }
-
-       public function tidyValidate() {
-               return $this->tidyValidate;
-       }
-}
-
-
-/**
- ** a page test for the "Edit" page. Tests Parser.php and Sanitizer.php.
- */
-class editPageTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=WIKIFUZZ";
-
-               $this->params = array (
-                               "action"        => "submit",
-                               "wpMinoredit"   => wikiFuzz::makeFuzz( 2 ),
-                               "wpPreview"     => wikiFuzz::makeFuzz( 2 ),
-                               "wpSection"     => wikiFuzz::makeFuzz( 2 ),
-                               "wpEdittime"    => wikiFuzz::makeFuzz( 2 ),
-                               "wpSummary"     => wikiFuzz::makeFuzz( 2 ),
-                               "wpScrolltop"   => wikiFuzz::makeFuzz( 2 ),
-                               "wpStarttime"   => wikiFuzz::makeFuzz( 2 ),
-                               "wpAutoSummary" => wikiFuzz::makeFuzz( 2 ),
-                               "wpTextbox1"    => wikiFuzz::makeFuzz( 40 )  // the main wiki text, need lots of this.
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpSection"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpEdittime"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpSummary"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpScrolltop"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpStarttime"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpAutoSummary"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpTextbox1"] );
-       }
-}
-
-
-/**
- ** a page test for "Special:Listusers".
- */
-class listusersTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Listusers";
-
-               $this->params = array (
-                               "title"        => wikiFuzz::makeFuzz( 2 ),
-                               "group"        => wikiFuzz::makeFuzz( 2 ),
-                               "username"     => wikiFuzz::makeFuzz( 2 ),
-                               "Go"           => wikiFuzz::makeFuzz( 2 ),
-                               "limit"        => wikiFuzz::chooseInput( array( "0", "-1", "---'----------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "offset"       => wikiFuzz::chooseInput( array( "0", "-1", "--------'-----0", "+1", "81343242346234234", wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-       }
-}
-
-
-/**
- ** a page test for "Special:Search".
- */
-class searchTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Search";
-
-               $this->params = array (
-                               "action"        => "index.php?title=Special:Search",
-                               "ns0"           => wikiFuzz::makeFuzz( 2 ),
-                               "ns1"           => wikiFuzz::makeFuzz( 2 ),
-                               "ns2"           => wikiFuzz::makeFuzz( 2 ),
-                               "ns3"           => wikiFuzz::makeFuzz( 2 ),
-                               "ns4"           => wikiFuzz::makeFuzz( 2 ),
-                               "ns5"           => wikiFuzz::makeFuzz( 2 ),
-                               "ns6"           => wikiFuzz::makeFuzz( 2 ),
-                               "ns7"           => wikiFuzz::makeFuzz( 2 ),
-                               "ns8"           => wikiFuzz::makeFuzz( 2 ),
-                               "ns9"           => wikiFuzz::makeFuzz( 2 ),
-                               "ns10"          => wikiFuzz::makeFuzz( 2 ),
-                               "ns11"          => wikiFuzz::makeFuzz( 2 ),
-                               "ns12"          => wikiFuzz::makeFuzz( 2 ),
-                               "ns13"          => wikiFuzz::makeFuzz( 2 ),
-                               "ns14"          => wikiFuzz::makeFuzz( 2 ),
-                               "ns15"          => wikiFuzz::makeFuzz( 2 ),
-                               "redirs"        => wikiFuzz::makeFuzz( 2 ),
-                               "search"        => wikiFuzz::makeFuzz( 2 ),
-                               "offset"        => wikiFuzz::chooseInput( array( "", "0", "-1", "--------'-----0", "+1", "81343242346234234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "fulltext"      => wikiFuzz::chooseInput( array( "", "0", "1", "--------'-----0", "+1", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "searchx"       => wikiFuzz::chooseInput( array( "", "0", "1", "--------'-----0", "+1", wikiFuzz::makeFuzz( 2 ) ) )
-                                       );
-       }
-}
-
-
-/**
- ** a page test for "Special:Recentchanges".
- */
-class recentchangesTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Recentchanges";
-
-               $this->params = array (
-                               "action"        => wikiFuzz::makeFuzz( 2 ),
-                               "title"         => wikiFuzz::makeFuzz( 2 ),
-                               "namespace"     => wikiFuzz::chooseInput( range( -1, 15 ) ),
-                               "Go"            => wikiFuzz::makeFuzz( 2 ),
-                               "invert"        => wikiFuzz::chooseInput( array( "-1", "---'----------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "hideanons"     => wikiFuzz::chooseInput( array( "-1", "------'-------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'limit'         => wikiFuzz::chooseInput( array( "0", "-1", "---------'----0", "+1", "81340909772349234",  wikiFuzz::makeFuzz( 2 ) ) ),
-                               "days"          => wikiFuzz::chooseInput( array( "-1", "----------'---0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "hideminor"     => wikiFuzz::chooseInput( array( "-1", "-----------'--0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "hidebots"      => wikiFuzz::chooseInput( array( "-1", "---------'----0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "hideliu"       => wikiFuzz::chooseInput( array( "-1", "-------'------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "hidepatrolled" => wikiFuzz::chooseInput( array( "-1", "-----'--------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "hidemyself"    => wikiFuzz::chooseInput( array( "-1", "--'-----------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'categories_any' => wikiFuzz::chooseInput( array( "-1", "--'-----------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'categories'    => wikiFuzz::chooseInput( array( "-1", "--'-----------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'feed'          => wikiFuzz::chooseInput( array( "-1", "--'-----------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-       }
-}
-
-
-/**
- ** a page test for "Special:Prefixindex".
- */
-class prefixindexTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Prefixindex";
-
-               $this->params = array (
-                               "title"         => "Special:Prefixindex",
-                               "namespace"     => wikiFuzz::randnum( 101, -10 ),
-                               "Go"            => wikiFuzz::makeFuzz( 2 )
-                               );
-
-               // sometimes we want 'prefix', sometimes we want 'from', and sometimes we want nothing.
-               if ( wikiFuzz::randnum( 3 ) == 0 ) {
-                       $this->params["prefix"] = wikiFuzz::chooseInput( array( "-1", "-----'--------0", "+++--+1",
-                                                                                                wikiFuzz::randnum( 8134, -10 ), wikiFuzz::makeFuzz( 2 ) ) );
-               }
-               if ( wikiFuzz::randnum( 3 ) == 0 ) {
-                       $this->params["from"]   = wikiFuzz::chooseInput( array( "-1", "-----'--------0", "+++--+1",
-                                                                                               wikiFuzz::randnum( 8134, -10 ), wikiFuzz::makeFuzz( 2 ) ) );
-               }
-       }
-}
-
-
-/**
- ** a page test for "Special:MIMEsearch".
- */
-class mimeSearchTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:MIMEsearch";
-
-               $this->params = array (
-                               "action"        => "index.php?title=Special:MIMEsearch",
-                               "mime"          => wikiFuzz::makeFuzz( 3 ),
-                               'limit'         => wikiFuzz::chooseInput( array( "0", "-1", "-------'------0", "+1", "81342321351235325",  wikiFuzz::makeFuzz( 2 ) ) ),
-                               'offset'        => wikiFuzz::chooseInput( array( "0", "-1", "-----'--------0", "+1", "81341231235365252234324",  wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-       }
-}
-
-
-/**
- ** a page test for "Special:Log".
- */
-class specialLogTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Log";
-
-               $this->params = array (
-                               "type"        => wikiFuzz::chooseInput( array( "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "par"         => wikiFuzz::makeFuzz( 2 ),
-                               "user"        => wikiFuzz::makeFuzz( 2 ),
-                               "page"        => wikiFuzz::makeFuzz( 2 ),
-                               "from"        => wikiFuzz::makeFuzz( 2 ),
-                               "until"       => wikiFuzz::makeFuzz( 2 ),
-                               "title"       => wikiFuzz::makeFuzz( 2 )
-                               );
-       }
-}
-
-
-/**
- ** a page test for "Special:Userlogin", with a successful login.
- */
-class successfulUserLoginTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Userlogin&action=submitlogin&type=login&returnto=" . wikiFuzz::makeFuzz( 2 );
-
-               $this->params = array (
-                               "wpName"          => USER_ON_WIKI,
-                               // sometimes real password, sometimes not:
-                               'wpPassword'      => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ), USER_PASSWORD ) ),
-                               'wpRemember'      => wikiFuzz::makeFuzz( 2 )
-                               );
-
-               $this->cookie = "wikidb_session=" .  wikiFuzz::chooseInput( array( "1" , wikiFuzz::makeFuzz( 2 ) ) );
-       }
-}
-
-
-/**
- ** a page test for "Special:Userlogin".
- */
-class userLoginTest extends pageTest {
-       function __construct() {
-
-               $this->pagePath = "index.php?title=Special:Userlogin";
-
-               $this->params = array (
-                               'wpRetype'        => wikiFuzz::makeFuzz( 2 ),
-                               'wpRemember'      => wikiFuzz::makeFuzz( 2 ),
-                               'wpRealName'      => wikiFuzz::makeFuzz( 2 ),
-                               'wpPassword'      => wikiFuzz::makeFuzz( 2 ),
-                               'wpName'          => wikiFuzz::makeFuzz( 2 ),
-                               'wpMailmypassword' => wikiFuzz::makeFuzz( 2 ),
-                               'wpLoginattempt'  => wikiFuzz::makeFuzz( 2 ),
-                               'wpEmail'         => wikiFuzz::makeFuzz( 2 ),
-                               'wpDomain'        => wikiFuzz::chooseInput( array( "", "local", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpCreateaccountMail' => wikiFuzz::chooseInput( array( "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpCreateaccount' => wikiFuzz::chooseInput( array( "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpCookieCheck'   => wikiFuzz::chooseInput( array( "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'type'            => wikiFuzz::chooseInput( array( "signup", "login", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'returnto'        => wikiFuzz::makeFuzz( 2 ),
-                               'action'          => wikiFuzz::chooseInput( array( "", "submitlogin", wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-
-               $this->cookie = "wikidb_session=" . wikiFuzz::chooseInput( array( "1" , wikiFuzz::makeFuzz( 2 ) ) );
-       }
-}
-
-
-/**
- ** a page test for "Special:Ipblocklist" (also includes unblocking)
- */
-class ipblocklistTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Ipblocklist";
-
-               $this->params = array (
-                               'wpUnblockAddress' => wikiFuzz::makeFuzz( 2 ),
-                               'ip'              => wikiFuzz::chooseInput( array( "20398702394", "", "Nickj2", wikiFuzz::makeFuzz( 2 ),
-                                                                        // something like an IP address, sometimes invalid:
-                                                                        ( wikiFuzz::randnum( 300, -20 ) . "." . wikiFuzz::randnum( 300, -20 ) . "."
-                                                                          . wikiFuzz::randnum( 300, -20 ) . "." . wikiFuzz::randnum( 300, -20 ) ) ) ),
-                               'id'              => wikiFuzz::makeFuzz( 2 ),
-                               'wpUnblockReason' => wikiFuzz::makeFuzz( 2 ),
-                               'action'          => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ), "success", "submit", "unblock" ) ),
-                               'wpEditToken'     => wikiFuzz::makeFuzz( 2 ),
-                               'wpBlock'         => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ), "" ) ),
-                               'limit'           => wikiFuzz::chooseInput( array( "0", "-1", "--------'-----0", "+1",
-                                                                                                "09700982312351132098234",  wikiFuzz::makeFuzz( 2 ) ) ),
-                               'offset'          => wikiFuzz::chooseInput( array( "0", "-1", "------'-------0", "+1",
-                                                                                                "09700980982341535324234234", wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["action"] );
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["ip"] );
-               if ( wikiFuzz::randnum( 2 ) == 0 ) unset( $this->params["id"] );
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["wpUnblockAddress"] );
-       }
-}
-
-
-/**
- ** a page test for "Special:Newimages".
- */
-class newImagesTest extends  pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Newimages";
-
-               $this->params = array (
-                               'hidebots'  => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ), "1", "", "-1" ) ),
-                               'wpIlMatch' => wikiFuzz::makeFuzz( 2 ),
-                               'until'     => wikiFuzz::makeFuzz( 2 ),
-                               'from'      => wikiFuzz::makeFuzz( 2 )
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["until"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["from"] );
-       }
-}
-
-
-/**
- ** a page test for the "Special:Imagelist" page.
- */
-class imagelistTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Imagelist";
-
-               $this->params = array (
-                               'sort'      => wikiFuzz::chooseInput( array( "bysize", "byname" , "bydate", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'limit'     => wikiFuzz::chooseInput( array( "0", "-1", "--------'-----0", "+1", "09700982312351132098234",  wikiFuzz::makeFuzz( 2 ) ) ),
-                               'offset'    => wikiFuzz::chooseInput( array( "0", "-1", "------'-------0", "+1", "09700980982341535324234234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpIlMatch' => wikiFuzz::makeFuzz( 2 )
-                               );
-       }
-}
-
-
-/**
- ** a page test for "Special:Export".
- */
-class specialExportTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Export";
-
-               $this->params = array (
-                               'action'      => wikiFuzz::chooseInput( array( "submit", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'pages'       => wikiFuzz::makeFuzz( 2 ),
-                               'curonly'     => wikiFuzz::chooseInput( array( "", "0", "-1", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'listauthors' => wikiFuzz::chooseInput( array( "", "0", "-1", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'history'     => wikiFuzz::chooseInput( array( "0", "-1", "------'-------0", "+1", "09700980982341535324234234", wikiFuzz::makeFuzz( 2 ) ) ),
-
-                               );
-
-               // For the time being, need to disable "submit" action as Tidy barfs on MediaWiki's XML export.
-               if ( $this->params['action'] == 'submit' ) $this->params['action'] = '';
-
-               // Sometimes remove the history field.
-               if ( wikiFuzz::randnum( 2 ) == 0 ) unset( $this->params["history"] );
-
-               // page does not produce HTML.
-               $this->tidyValidate = false;
-       }
-}
-
-
-/**
- ** a page test for "Special:Booksources".
- */
-class specialBooksourcesTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Booksources";
-
-               $this->params = array (
-                               'go'    => wikiFuzz::makeFuzz( 2 ),
-                               // ISBN codes have to contain some semi-numeric stuff or will be ignored:
-                               'isbn'  => "0X0" . wikiFuzz::makeFuzz( 2 )
-                               );
-       }
-}
-
-
-/**
- ** a page test for "Special:Allpages".
- */
-class specialAllpagesTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special%3AAllpages";
-
-               $this->params = array (
-                               'from'      => wikiFuzz::makeFuzz( 2 ),
-                               'namespace' => wikiFuzz::chooseInput( range( -1, 15 ) ),
-                               'go'        => wikiFuzz::makeFuzz( 2 )
-                               );
-       }
-}
-
-
-/**
- ** a page test for the page History.
- */
-class pageHistoryTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Main_Page&action=history";
-
-               $this->params = array (
-                               'limit'     => wikiFuzz::chooseInput( array( "-1", "0", "-------'------0", "+1", "8134",  wikiFuzz::makeFuzz( 2 ) ) ),
-                               'offset'    => wikiFuzz::chooseInput( array( "-1", "0", "------'-------0", "+1", "9823412312312412435", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "go"        => wikiFuzz::chooseInput( array( "first", "last", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "dir"       => wikiFuzz::chooseInput( array( "prev", "next", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "diff"      => wikiFuzz::chooseInput( array( "-1", "--------'-----0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "oldid"     => wikiFuzz::chooseInput( array( "prev", "-1", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "feed"      => wikiFuzz::makeFuzz( 2 )
-                               );
-       }
-}
-
-
-/**
- ** a page test for the Special:Contributions".
- */
-class contributionsTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Contributions/" . USER_ON_WIKI;
-
-               $this->params = array (
-                               'target'    => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ), "newbies", USER_ON_WIKI ) ),
-                               'namespace' => wikiFuzz::chooseInput( array( -1, 15, 1, wikiFuzz::makeFuzz( 2 ) ) ),
-                               'offset'    => wikiFuzz::chooseInput( array( "0", "-1", "------'-------0", "+1", "982342131232131231241", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'bot'       => wikiFuzz::chooseInput( array( "", "-1", "0", "1", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'go'        => wikiFuzz::chooseInput( array( "-1", 'prev', 'next', wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-       }
-}
-
-
-/**
- ** a page test for viewing a normal page, whilst posting various params.
- */
-class viewPageTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Main_Page";
-
-               $this->params = array (
-                               "useskin"        => wikiFuzz::chooseInput( array( "chick", "cologneblue", "myskin",
-                                                                               "nostalgia", "simple", "standard", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "uselang"        => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ),
-                                               "ab", "af", "an", "ar", "arc", "as", "ast", "av", "ay", "az", "ba",
-                                               "bat-smg", "be", "bg", "bm", "bn", "bo", "bpy", "br", "bs", "ca",
-                                               "ce", "cs", "csb", "cv", "cy", "da", "de", "dv", "dz", "el", "en",
-                                               "eo", "es", "et", "eu", "fa", "fi", "fo", "fr", "fur", "fy", "ga",
-                                               "gn", "gsw", "gu", "he", "hi", "hr", "hu", "ia", "id", "ii", "is",
-                                               "it", "ja", "jv", "ka", "km", "kn", "ko", "ks", "ku", "kv", "la",
-                                               "li", "lo", "lt", "lv", "mk", "ml", "ms", "nah", "nap", "nds",
-                                               "nds-nl", "nl", "nn", "no", "non", "nv", "oc", "or", "os", "pa",
-                                               "pl", "pms", "ps", "pt", "pt-br", "qu", "rmy", "ro", "ru", "sc",
-                                               "sd", "sk", "sl", "sq", "sr", "sr-ec", "sr-el",
-                                               "su", "sv", "ta", "te", "th", "tr", "tt", "ty", "tyv", "udm",
-                                               "ug", "uk", "ur", "utf8", "vec", "vi", "wa", "xal", "yi", "za",
-                                               "zh", "zh-cn", "zh-hk", "zh-sg", "zh-tw", "zh-tw" ) ),
-                               "returnto"       => wikiFuzz::makeFuzz( 2 ),
-                               "feed"           => wikiFuzz::chooseInput( array( "atom", "rss", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "rcid"           => wikiFuzz::makeFuzz( 2 ),
-                               "action"         => wikiFuzz::chooseInput( array( "view", "raw", "render", wikiFuzz::makeFuzz( 2 ), "markpatrolled" ) ),
-                               "printable"      => wikiFuzz::makeFuzz( 2 ),
-                               "oldid"          => wikiFuzz::makeFuzz( 2 ),
-                               "redirect"       => wikiFuzz::makeFuzz( 2 ),
-                               "diff"           => wikiFuzz::makeFuzz( 2 ),
-                               "search"         => wikiFuzz::makeFuzz( 2 ),
-                               "rdfrom"         => wikiFuzz::makeFuzz( 2 ),  // things from Article.php from here on:
-                               "token"          => wikiFuzz::makeFuzz( 2 ),
-                               "tbid"           => wikiFuzz::makeFuzz( 2 ),
-                               // @todo FIXME: Duplicate array key.
-                               "action"         => wikiFuzz::chooseInput( array( "purge", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "wpReason"       => wikiFuzz::makeFuzz( 2 ),
-                               "wpEditToken"    => wikiFuzz::makeFuzz( 2 ),
-                               "from"           => wikiFuzz::makeFuzz( 2 ),
-                               "bot"            => wikiFuzz::makeFuzz( 2 ),
-                               "summary"        => wikiFuzz::makeFuzz( 2 ),
-                               "direction"      => wikiFuzz::chooseInput( array( "next", "prev", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "section"        => wikiFuzz::makeFuzz( 2 ),
-                               "preload"        => wikiFuzz::makeFuzz( 2 ),
-
-                               );
-
-               // Tidy does not know how to valid atom or rss, so exclude from testing for the time being.
-               if ( $this->params["feed"] == "atom" )     { unset( $this->params["feed"] ); }
-               elseif ( $this->params["feed"] == "rss" ) { unset( $this->params["feed"] ); }
-
-               // Raw pages cannot really be validated
-               if ( $this->params["action"] == "raw" ) unset( $this->params["action"] );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["rcid"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["diff"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["rdfrom"] );
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["oldid"] );
-
-               // usually don't want action == purge.
-               if ( wikiFuzz::randnum( 6 ) > 1 ) unset( $this->params["action"] );
-       }
-}
-
-
-/**
- ** a page test for "Special:Allmessages".
- */
-class specialAllmessagesTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Allmessages";
-
-               // only really has one parameter
-               $this->params = array (
-                               "ot"     => wikiFuzz::chooseInput( array( "php", "html", wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-       }
-}
-
-/**
- ** a page test for "Special:Newpages".
- */
-class specialNewpagesPageTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Newpages";
-
-               $this->params = array (
-                               "namespace" => wikiFuzz::chooseInput( range( -1, 15 ) ),
-                               "feed"      => wikiFuzz::chooseInput( array( "atom", "rss", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'limit'     => wikiFuzz::chooseInput( array( "-1", "0", "-------'------0", "+1", "8134",  wikiFuzz::makeFuzz( 2 ) ) ),
-                               'offset'    => wikiFuzz::chooseInput( array( "-1", "0", "------'-------0", "+1", "9823412312312412435", wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-
-               // Tidy does not know how to valid atom or rss, so exclude from testing for the time being.
-               if ( $this->params["feed"] == "atom" )     { unset( $this->params["feed"] ); }
-               elseif ( $this->params["feed"] == "rss" ) { unset( $this->params["feed"] ); }
-       }
-}
-
-/**
- ** a page test for "redirect.php"
- */
-class redirectTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "redirect.php";
-
-               $this->params = array (
-                               "wpDropdown" => wikiFuzz::makeFuzz( 2 )
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpDropdown"] );
-       }
-}
-
-
-/**
- ** a page test for "Special:Confirmemail"
- */
-class confirmEmail extends pageTest {
-       function __construct() {
-               // sometimes we send a bogus confirmation code, and sometimes we don't.
-               $this->pagePath = "index.php?title=Special:Confirmemail" . wikiFuzz::chooseInput( array( "", "/" . wikiFuzz::makeTitleSafe( wikiFuzz::makeFuzz( 1 ) ) ) );
-
-               $this->params = array (
-                               "token" => wikiFuzz::makeFuzz( 2 )
-                               );
-       }
-}
-
-
-/**
- ** a page test for "Special:Watchlist"
- **        Note: this test would be better if we were logged in.
- */
-class watchlistTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Watchlist";
-
-               $this->params = array (
-                               "remove"   => wikiFuzz::chooseInput( array( "Remove checked items from watchlist", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'days'     => wikiFuzz::chooseInput( array( 0, -1, -230, "--", 3, 9, wikiFuzz::makeFuzz( 2 ) ) ),
-                               'hideOwn'  => wikiFuzz::chooseInput( array( "", "0", "1", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'hideBots' => wikiFuzz::chooseInput( array( "", "0", "1", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'namespace' => wikiFuzz::chooseInput( array( "", "0", "1", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'action'   => wikiFuzz::chooseInput( array( "submit", "clear", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'id[]'     => wikiFuzz::makeFuzz( 2 ),
-                               'edit'     => wikiFuzz::makeFuzz( 2 ),
-                               'token'    => wikiFuzz::chooseInput( array( "", "1243213", wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-
-               // sometimes we specifiy "reset", and sometimes we don't.
-               if ( wikiFuzz::randnum( 3 ) == 0 ) $this->params["reset"] = wikiFuzz::chooseInput( array( "", "0", "1", wikiFuzz::makeFuzz( 2 ) ) );
-       }
-}
-
-/**
- ** a page test for "Special:Movepage"
- */
-class specialMovePage extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Movepage";
-
-               $this->params = array (
-                               "action"      => wikiFuzz::chooseInput( array( "success", "submit", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpEditToken' => wikiFuzz::chooseInput( array( '', 0, 34987987, wikiFuzz::makeFuzz( 2 ) ) ),
-                               'target'      => wikiFuzz::chooseInput( array( "x", wikiFuzz::makeTitleSafe( wikiFuzz::makeFuzz( 2 ) ) ) ),
-                               'wpOldTitle'  => wikiFuzz::chooseInput( array( "z", wikiFuzz::makeTitleSafe( wikiFuzz::makeFuzz( 2 ) ), wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpNewTitle'  => wikiFuzz::chooseInput( array( "y", wikiFuzz::makeTitleSafe( wikiFuzz::makeFuzz( 2 ) ), wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpReason'    => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpMovetalk'  => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpDeleteAndMove'  => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpConfirm'   => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'talkmoved'   => wikiFuzz::chooseInput( array( "1", wikiFuzz::makeFuzz( 2 ), "articleexists", 'notalkpage' ) ),
-                               'oldtitle'    => wikiFuzz::makeFuzz( 2 ),
-                               'newtitle'    => wikiFuzz::makeFuzz( 2 ),
-                               'wpMovetalk'  => wikiFuzz::chooseInput( array( "1", "0", wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 2 ) == 0 ) unset( $this->params["wpEditToken"] );
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["target"] );
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["wpNewTitle"] );
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpReason"] );
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpOldTitle"] );
-       }
-}
-
-
-/**
- ** a page test for "Special:Undelete"
- */
-class specialUndeletePageTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Undelete";
-
-               $this->params = array (
-                               "action"      => wikiFuzz::chooseInput( array( "submit", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpEditToken' => wikiFuzz::chooseInput( array( '', 0, 34987987, wikiFuzz::makeFuzz( 2 ) ) ),
-                               'target'      => wikiFuzz::chooseInput( array( "x", wikiFuzz::makeTitleSafe( wikiFuzz::makeFuzz( 2 ) ) ) ),
-                               'timestamp'   => wikiFuzz::chooseInput( array( "125223", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'file'        => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'restore'     => wikiFuzz::chooseInput( array( "0", "1", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'preview'     => wikiFuzz::chooseInput( array( "0", "1", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpComment'   => wikiFuzz::makeFuzz( 2 )
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 2 ) == 0 ) unset( $this->params["wpEditToken"] );
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["target"] );
-               if ( wikiFuzz::randnum( 1 ) == 0 ) unset( $this->params["restore"] );
-               if ( wikiFuzz::randnum( 1 ) == 0 ) unset( $this->params["preview"] );
-       }
-}
-
-
-/**
- ** a page test for "Special:Unlockdb"
- */
-class specialUnlockdbPageTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Unlockdb";
-
-               $this->params = array (
-                               "action"        => wikiFuzz::chooseInput( array( "submit", "success", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpEditToken'   => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpLockConfirm' => wikiFuzz::chooseInput( array( "0", "1", wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpEditToken"] );
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["action"] );
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpLockConfirm"] );
-       }
-}
-
-
-/**
- ** a page test for "Special:Lockdb"
- */
-class specialLockdbPageTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Lockdb";
-
-               $this->params = array (
-                               "action"       => wikiFuzz::chooseInput( array( "submit", "success", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpEditToken'  => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpLockReason' => wikiFuzz::makeFuzz( 2 ),
-                               'wpLockConfirm' => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpEditToken"] );
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["action"] );
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpLockConfirm"] );
-       }
-}
-
-
-/**
- ** a page test for "Special:Userrights"
- */
-class specialUserrights extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Userrights";
-
-               $this->params = array (
-                               'wpEditToken'   => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'user-editname' => wikiFuzz::chooseInput( array( "Nickj2", "Nickj2\n<xyz>", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'ssearchuser'   => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'saveusergroups' => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ), "Save User Groups" ),
-                               'member[]'      => wikiFuzz::chooseInput( array( "0", "bot", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "available[]"   => wikiFuzz::chooseInput( array( "0", "sysop", "bureaucrat", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params['ssearchuser'] );
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params['saveusergroups'] );
-       }
-}
-
-
-/**
- ** a test for page protection and unprotection.
- */
-class pageProtectionForm extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Main_Page";
-
-               $this->params = array (
-                               "action"               => "protect",
-                               'wpEditToken'          => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "mwProtect-level-edit" => wikiFuzz::chooseInput( array( '', 'autoconfirmed', 'sysop', wikiFuzz::makeFuzz( 2 ) ) ),
-                               "mwProtect-level-move" => wikiFuzz::chooseInput( array( '', 'autoconfirmed', 'sysop', wikiFuzz::makeFuzz( 2 ) ) ),
-                               "mwProtectUnchained"   => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'mwProtect-reason'     => wikiFuzz::chooseInput( array( "because it was there", wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["mwProtectUnchained"] );
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params['mwProtect-reason'] );
-       }
-}
-
-
-/**
- ** a page test for "Special:Blockip".
- */
-class specialBlockip extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Blockip";
-
-               $this->params = array (
-                               "action"          => wikiFuzz::chooseInput( array( "submit", "",  wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpEditToken'     => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "wpBlockAddress"  => wikiFuzz::chooseInput( array( "20398702394", "", "Nickj2", wikiFuzz::makeFuzz( 2 ),
-                                                                         // something like an IP address, sometimes invalid:
-                                                                        ( wikiFuzz::randnum( 300, -20 ) . "." . wikiFuzz::randnum( 300, -20 ) . "."
-                                                                         . wikiFuzz::randnum( 300, -20 ) . "." . wikiFuzz::randnum( 300, -20 ) ) ) ),
-                               "ip"              => wikiFuzz::chooseInput( array( "20398702394", "", "Nickj2", wikiFuzz::makeFuzz( 2 ),
-                                                                         // something like an IP address, sometimes invalid:
-                                                                        ( wikiFuzz::randnum( 300, -20 ) . "." . wikiFuzz::randnum( 300, -20 ) . "."
-                                                                         . wikiFuzz::randnum( 300, -20 ) . "." . wikiFuzz::randnum( 300, -20 ) ) ) ),
-                               "wpBlockOther"    => wikiFuzz::chooseInput( array( '', 'Nickj2', wikiFuzz::makeFuzz( 2 ) ) ),
-                               "wpBlockExpiry"   => wikiFuzz::chooseInput( array( "other", "2 hours", "1 day", "3 days", "1 week", "2 weeks",
-                                                                                 "1 month", "3 months", "6 months", "1 year", "infinite", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "wpBlockReason"   => wikiFuzz::chooseInput( array( "because it was there", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "wpAnonOnly"      => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "wpCreateAccount" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "wpBlock"         => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpBlockOther"] );
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpBlockExpiry"] );
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpBlockReason"] );
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpAnonOnly"] );
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpCreateAccount"] );
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpBlockAddress"] );
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["ip"] );
-       }
-}
-
-
-/**
- ** a test for the imagepage.
- */
-class imagepageTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Image:Small-email.png";
-
-               $this->params = array (
-                               "image"         => wikiFuzz::chooseInput( array( "Small-email.png", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "wpReason"      => wikiFuzz::makeFuzz( 2 ),
-                               "oldimage"      => wikiFuzz::chooseInput( array( "Small-email.png", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "wpEditToken"   => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["image"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpReason"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["oldimage"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpEditToken"] );
-       }
-}
-
-
-/**
- ** a test for page deletion form.
- */
-class pageDeletion extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Main_Page&action=delete";
-
-               $this->params = array (
-                               "wpEditToken" => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "wpReason"    => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "wpConfirm"   => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 5 ) == 0 ) unset( $this->params["wpReason"] );
-               if ( wikiFuzz::randnum( 5 ) == 0 ) unset( $this->params["wpEditToken"] );
-               if ( wikiFuzz::randnum( 5 ) == 0 ) unset( $this->params["wpConfirm"] );
-       }
-}
-
-
-
-/**
- ** a test for Revision Deletion.
- */
-class specialRevisionDeletePageTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Revisiondelete";
-
-               $this->params = array (
-                               "target"               => wikiFuzz::chooseInput( array( "Main Page", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "oldid"                => wikiFuzz::makeFuzz( 2 ),
-                               "oldid[]"              => wikiFuzz::makeFuzz( 2 ),
-                               "wpReason"             => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "revdelete-hide-text"  => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "revdelete-hide-comment" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "revdelete-hide-user"  => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "revdelete-hide-restricted" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["target"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["oldid"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["oldid[]"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpReason"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["revdelete-hide-text"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["revdelete-hide-comment"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["revdelete-hide-user"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["revdelete-hide-restricted"] );
-       }
-}
-
-
-/**
- ** a test for Special:Import.
- */
-class specialImportPageTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Import";
-
-               $this->params = array (
-                               "action"         => "submit",
-                               "source"         => wikiFuzz::chooseInput( array( "upload", "interwiki", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "MAX_FILE_SIZE"  => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "xmlimport"      => wikiFuzz::chooseInput( array( "/var/www/hosts/mediawiki/wiki/AdminSettings.php", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "namespace"      => wikiFuzz::chooseInput( array( wikiFuzz::randnum( 30, -6 ), wikiFuzz::makeFuzz( 2 ) ) ),
-                               "interwiki"      => wikiFuzz::makeFuzz( 2 ),
-                               "interwikiHistory" => wikiFuzz::makeFuzz( 2 ),
-                               "frompage"       => wikiFuzz::makeFuzz( 2 ),
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["action"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["source"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["MAX_FILE_SIZE"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["xmlimport"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["interwiki"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["interwikiHistory"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["frompage"] );
-
-               // Note: Need to do a file upload to fully test this Special page.
-       }
-}
-
-
-/**
- ** a test for thumb.php
- */
-class thumbTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "thumb.php";
-
-               $this->params = array (
-                               "f"  => wikiFuzz::chooseInput( array( "..", "\\", "small-email.png", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "w"  => wikiFuzz::chooseInput( array( "80", wikiFuzz::randnum( 6000, -200 ), wikiFuzz::makeFuzz( 2 ) ) ),
-                               "r"  => wikiFuzz::chooseInput( array( "0", wikiFuzz::makeFuzz( 2 ) ) ),
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["f"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["w"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["r"] );
-       }
-}
-
-/**
- ** a test for profileinfo.php
- */
-class profileInfo extends pageTest {
-       function __construct() {
-               $this->pagePath = "profileinfo.php";
-
-               $this->params = array (
-                               "expand"  => wikiFuzz::makeFuzz( 2 ),
-                               "sort"    => wikiFuzz::chooseInput( array( "time", "count", "name", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "filter"  => wikiFuzz::chooseInput( array( "Main Page", wikiFuzz::makeFuzz( 2 ) ) ),
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["sort"] );
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["filter"] );
-       }
-}
-
-
-/**
- ** a test for Special:Cite (extension Special page).
- */
-class specialCitePageTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Cite";
-
-               $this->params = array (
-                               "page"    => wikiFuzz::chooseInput( array( "\" onmouseover=\"alert(1);\"", "Main Page", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "id"      => wikiFuzz::chooseInput( array( "-1", "0", "------'-------0", "+1", "-9823412312312412435", wikiFuzz::makeFuzz( 2 ) ) ),
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["page"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["id"] );
-       }
-}
-
-
-/**
- ** a test for Special:Filepath (extension Special page).
- */
-class specialFilepathPageTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Filepath";
-
-               $this->params = array (
-                               "file"    => wikiFuzz::chooseInput( array( "Small-email.png", "Small-email.png" . wikiFuzz::makeFuzz( 1 ), wikiFuzz::makeFuzz( 2 ) ) ),
-                               );
-       }
-}
-
-
-/**
- ** a test for Special:Renameuser (extension Special page).
- */
-class specialRenameuserPageTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Renameuser";
-
-               $this->params = array (
-                               "oldusername"   => wikiFuzz::chooseInput( array( "Nickj2", "192.168.0.2", wikiFuzz::makeFuzz( 1 ) ) ),
-                               "newusername"   => wikiFuzz::chooseInput( array( "Nickj2", "192.168.0.2", wikiFuzz::makeFuzz( 1 ) ) ),
-                               "token"         => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               );
-       }
-}
-
-
-/**
- ** a test for Special:Linksearch (extension Special page).
- */
-class specialLinksearch extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special%3ALinksearch";
-
-               $this->params = array (
-                               "target" => wikiFuzz::makeFuzz( 2 ),
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 10 ) == 0 ) unset( $this->params["target"] );
-       }
-}
-
-
-/**
- ** a test for Special:CategoryTree (extension Special page).
- */
-class specialCategoryTree extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:CategoryTree";
-
-               $this->params = array (
-                               "target" => wikiFuzz::makeFuzz( 2 ),
-                               "from"   => wikiFuzz::makeFuzz( 2 ),
-                               "until"  => wikiFuzz::makeFuzz( 2 ),
-                               "showas" => wikiFuzz::makeFuzz( 2 ),
-                               "mode"   => wikiFuzz::chooseInput( array( "pages", "categories", "all", wikiFuzz::makeFuzz( 2 ) ) ),
-                               );
-
-               // sometimes we do want to specify certain parameters.
-               if ( wikiFuzz::randnum( 5 ) == 0 ) $this->params["notree"] = wikiFuzz::chooseInput( array( "1", 0, "", wikiFuzz::makeFuzz( 2 ) ) );
-       }
-}
-
-
-/**
- ** a test for "Special:Chemicalsources" (extension Special page).
- */
-class specialChemicalsourcesTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Chemicalsources";
-
-               // choose an input format to use.
-               $format =  wikiFuzz::chooseInput(
-                                       array(  'go',
-                                                       'CAS',
-                                                       'EINECS',
-                                                       'CHEBI',
-                                                       'PubChem',
-                                                       'SMILES',
-                                                       'InChI',
-                                                       'ATCCode',
-                                                       'KEGG',
-                                                       'RTECS',
-                                                       'ECNumber',
-                                                       'DrugBank',
-                                                       'Formula',
-                                                       'Name'
-                                                )
-                                       );
-
-               // values for different formats usually start with either letters or numbers.
-               switch ( $format ) {
-                       case 'Name'   : $value = "A"; break;
-                       case 'InChI'  :
-                       case 'SMILES' :
-                       case 'Formula': $value = "C"; break;
-                       default       : $value = "0"; break;
-               }
-
-               // and then we append the fuzz input.
-               $this->params = array ( $format => $value . wikiFuzz::makeFuzz( 2 ) );
-       }
-}
-
-
-/**
- ** A test for api.php (programmatic interface to MediaWiki in XML/JSON/RSS/etc formats).
- ** Quite involved to test because there are lots of options/parameters, and because
- ** for a lot of the functionality if all the parameters don't make sense then it just
- ** returns the help screen - so currently a lot of the tests aren't actually doing much
- ** because something wasn't right in the query.
- **
- ** @todo Incomplete / unfinished; Runs too fast (suggests not much testing going on).
- */
-class api extends pageTest {
-
-       // API login mode.
-       private static function loginMode() {
-               $arr =  array ( "lgname"        => wikiFuzz::makeFuzz( 2 ),
-                                               "lgpassword"    => wikiFuzz::makeFuzz( 2 ),
-                                          );
-               // sometimes we want to specify the extra "lgdomain" parameter.
-               if ( wikiFuzz::randnum( 3 ) == 0 ) {
-                       $arr["lgdomain"] = wikiFuzz::chooseInput( array( "1", 0, "", wikiFuzz::makeFuzz( 2 ) ) );
-               }
-
-               return $arr;
-       }
-
-       // API OpenSearch mode.
-       private static function opensearchMode() {
-               return array ( "search"        => wikiFuzz::makeFuzz( 2 ) );
-       }
-
-       // API watchlist feed mode.
-       private static function feedwatchlistMode() {
-               // @todo FIXME: Add "wikiFuzz::makeFuzz(2)" as possible value below?
-               return array ( "feedformat"    => wikiFuzz::chooseInput( array( "rss", "atom" ) ) );
-       }
-
-       // API query mode.
-       private static function queryMode() {
-               // @todo FIXME: Add "wikiFuzz::makeFuzz(2)" as possible params for the elements below?
-               //        Suspect this will stuff up the tests more, but need to check.
-               $params = array (
-                                        // @todo FIXME: More titles.
-                                        "titles"        => wikiFuzz::chooseInput( array( "Main Page" ) ),
-                                        // @todo FIXME: More pageids.
-                                        "pageids"       => 1,
-                                        "prop"          => wikiFuzz::chooseInput( array( "info", "revisions", "watchlist" ) ),
-                                        "list"          => wikiFuzz::chooseInput( array( "allpages", "logevents", "watchlist", "usercontribs", "recentchanges", "backlinks", "embeddedin", "imagelinks" ) ),
-                                        "meta"          => wikiFuzz::chooseInput( array( "siteinfo" ) ),
-                                        "generator"     => wikiFuzz::chooseInput( array( "allpages", "logevents", "watchlist", "info", "revisions" ) ),
-                                        "siprop"        => wikiFuzz::chooseInput( array( "general", "namespaces", "general|namespaces" ) ),
-                                  );
-
-                // Add extra parameters based on what list choice we got.
-                switch ( $params["list"] ) {
-                       case "usercontribs" : self::addListParams ( $params, "uc", array( "limit", "start", "end", "user", "dir" ) ); break;
-                       case "allpages"     : self::addListParams ( $params, "ap", array( "from", "prefix", "namespace", "filterredir", "limit" ) ); break;
-                       case "watchlist"    : self::addListParams ( $params, "wl", array( "allrev", "start", "end", "namespace", "dir", "limit", "prop" ) ); break;
-                       case "logevents"    : self::addListParams ( $params, "le", array( "limit", "type", "start", "end", "user", "dir" ) ); break;
-                       case "recentchanges": self::addListParams ( $params, "rc", array( "limit", "prop", "show", "namespace", "start", "end", "dir" ) ); break;
-                       case "backlinks"    : self::addListParams ( $params, "bl", array( "continue", "namespace", "redirect", "limit" ) ); break;
-                       case "embeddedin"   : self::addListParams ( $params, "ei", array( "continue", "namespace", "redirect", "limit" ) ); break;
-                       case "imagelinks"   : self::addListParams ( $params, "il", array( "continue", "namespace", "redirect", "limit" ) ); break;
-                }
-
-                if ( $params["prop"] == "revisions" ) {
-                       self::addListParams ( $params, "rv", array( "prop", "limit", "startid", "endid", "end", "dir" ) );
-                }
-
-                // Sometimes we want redirects, sometimes we don't.
-                if ( wikiFuzz::randnum( 3 ) == 0 ) {
-                       $params["redirects"] = wikiFuzz::chooseInput( array( "1", 0, "", wikiFuzz::makeFuzz( 2 ) ) );
-                }
-
-                return $params;
-       }
-
-       // Adds all the elements to the array, using the specified prefix.
-       private static function addListParams( &$array, $prefix, $elements ) {
-               foreach ( $elements as $element ) {
-                       $array[$prefix . $element] = self::getParamDetails( $element );
-               }
-       }
-
-       // For a given element name, returns the data for that element.
-       private static function getParamDetails( $element ) {
-               switch ( $element ) {
-                       case 'startid'    :
-                       case 'endid'      :
-                       case 'start'      :
-                       case 'end'        :
-                       case 'limit'      : return wikiFuzz::chooseInput( array( "0", "-1", "---'----------0", "+1", "8134", "320742734234235", "20060230121212", wikiFuzz::randnum( 9000, -100 ), wikiFuzz::makeFuzz( 2 ) ) );
-                       case 'dir'        : return wikiFuzz::chooseInput( array( "newer", "older", wikiFuzz::makeFuzz( 2 ) ) );
-                       case 'user'       : return wikiFuzz::chooseInput( array( USER_ON_WIKI, wikiFuzz::makeFuzz( 2 ) ) );
-                       case 'namespace'  : return wikiFuzz::chooseInput( array( -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 200000, wikiFuzz::makeFuzz( 2 ) ) );
-                       case 'filterredir': return wikiFuzz::chooseInput( array( "all", "redirects", "nonredirectsallpages", wikiFuzz::makeFuzz( 2 ) ) );
-                       case 'allrev'     : return wikiFuzz::chooseInput( array( "1", 0, "", wikiFuzz::makeFuzz( 2 ) ) );
-                       case 'prop'       : return wikiFuzz::chooseInput( array( "user", "comment", "timestamp", "patrol", "flags", "user|user|comment|flags", wikiFuzz::makeFuzz( 2 ) ) );
-                       case 'type'       : return wikiFuzz::chooseInput( array( "block", "protect", "rights", "delete", "upload", "move", "import", "renameuser", "newusers", "makebot", wikiFuzz::makeFuzz( 2 ) ) );
-                       case 'hide'       : return wikiFuzz::chooseInput( array( "minor", "bots", "anons", "liu", "liu|bots|", wikiFuzz::makeFuzz( 2 ) ) );
-                       case 'show'       : return wikiFuzz::chooseInput( array( 'minor', '!minor', 'bot', '!bot', 'anon', '!anon', wikiFuzz::makeFuzz( 2 ) ) );
-                       default           : return wikiFuzz::makeFuzz( 2 );
-               }
-       }
-
-       // Entry point.
-       function __construct() {
-               $this->pagePath = "api.php";
-
-               $modes = array ( "help",
-                                               "login",
-                                               "opensearch",
-                                               "feedwatchlist",
-                                               "query" );
-               $action = wikiFuzz::chooseInput( array_merge ( $modes, array( wikiFuzz::makeFuzz( 2 ) ) ) );
-
-               switch ( $action ) {
-                       case "login"         : $this->params = self::loginMode();
-                                                                  break;
-                       case "opensearch"    : $this->params = self::opensearchMode();
-                                                                  break;
-                       case "feedwatchlist" : $this->params = self::feedwatchlistMode();
-                                                                  break;
-                       case "query"         : $this->params = self::queryMode();
-                                                                  break;
-                       case "help"         :
-                       default             :  // Do something random - "Crazy Ivan" mode.
-                                                                  $random_mode = wikiFuzz::chooseInput( $modes ) . "Mode";
-                                                                  // There is no "helpMode".
-                                                                  if ( $random_mode == "helpMode" ) $random_mode = "queryMode";
-                                                                  $this->params = self::$random_mode();
-                                                                  break;
-               }
-
-               // Save the selected action.
-               $this->params["action"] = $action;
-
-               // Set the cookie:
-               // @todo FIXME: Need to get this cookie dynamically set, rather than hard-coded.
-               $this->cookie = "wikidbUserID=10001; wikidbUserName=Test; wikidb_session=178df0fe68c75834643af65dec9ec98a; wikidbToken=1adc6753d62c44aec950c024d7ae0540";
-
-               // Output format
-               $this->params["format"] = wikiFuzz::chooseInput( array( "json", "jsonfm", "php", "phpfm",
-                                                                                                                          "wddx", "wddxfm", "xml", "xmlfm",
-                                                                                                                          "yaml", "yamlfm", "raw", "rawfm",
-                                                                                                                          wikiFuzz::makeFuzz( 2 ) ) );
-
-               // Page does not produce HTML (sometimes).
-               $this->tidyValidate = false;
-       }
-}
-
-
-/**
- ** a page test for the GeSHi extension.
- */
-class GeSHi_Test extends pageTest {
-
-       private function getGeSHiContent() {
-               return "<source lang=\"" . $this->getLang() . "\" "
-                          . ( wikiFuzz::randnum( 2 ) == 0 ? "line " : "" )
-                          . ( wikiFuzz::randnum( 2 ) == 0 ? "strict " : "" )
-                          . "start=" . wikiFuzz::chooseInput( array( wikiFuzz::randnum( 6000, -6000 ), wikiFuzz::makeFuzz( 2 ) ) )
-                          . ">"
-                          . wikiFuzz::makeFuzz( 2 )
-                          . "</source>";
-       }
-
-       private function getLang() {
-       return wikiFuzz::chooseInput( array( "actionscript", "ada", "apache", "applescript", "asm", "asp", "autoit", "bash", "blitzbasic", "bnf", "c", "c_mac", "caddcl", "cadlisp",
-                               "cfdg", "cfm", "cpp", "cpp-qt", "csharp", "css", "d", "delphi", "diff", "div", "dos", "eiffel", "fortran", "freebasic", "gml", "groovy", "html4strict", "idl",
-                               "ini", "inno", "io", "java", "java5", "javascript", "latex", "lisp", "lua", "matlab", "mirc", "mpasm", "mysql", "nsis", "objc", "ocaml", "ocaml-brief", "oobas",
-                               "oracle8", "pascal", "perl", "php", "php-brief", "plsql", "python", "qbasic", "rails", "reg", "robots", "ruby", "sas", "scheme", "sdlbasic", "smalltalk", "smarty",
-                               "sql", "tcl", "text", "thinbasic", "tsql", "vb", "vbnet", "vhdl", "visualfoxpro", "winbatch", "xml", "xpp", "z80", wikiFuzz::makeFuzz( 1 ) ) );
-       }
-
-       function __construct() {
-               $this->pagePath = "index.php?title=WIKIFUZZ";
-
-               $this->params = array (
-                               "action"        => "submit",
-                               "wpMinoredit"   => "test",
-                               "wpPreview"     => "test",
-                               "wpSection"     => "test",
-                               "wpEdittime"    => "test",
-                               "wpSummary"     => "test",
-                               "wpScrolltop"   => "test",
-                               "wpStarttime"   => "test",
-                               "wpAutoSummary" => "test",
-                               "wpTextbox1"    => $this->getGeSHiContent() // the main wiki text, contains fake GeSHi content.
-                               );
-       }
-}
-
-/**
- ** selects a page test to run.
- * @param $count
- * @return \api|\confirmEmail|\contributionsTest|\editPageTest|\imagelistTest|\imagepageTest|\ipblocklistTest|\listusersTest|\mimeSearchTest|\newImagesTest|\pageDeletion|\pageHistoryTest|\pageProtectionForm|\prefixindexTest|\profileInfo|\recentchangesTest|\redirectTest|\searchTest|\specialAllmessagesTest|\specialAllpagesTest|\specialBlockip|\specialBooksourcesTest|\specialCategoryTree|\specialChemicalsourcesTest|\specialCitePageTest|\specialExportTest|\specialFilepathPageTest|\specialImportPageTest|\specialLinksearch|\specialLockdbPageTest|\specialLogTest|\specialMovePage|\specialNewpagesPageTest|\specialRenameuserPageTest|\specialRevisionDeletePageTest|\specialUndeletePageTest|\specialUnlockdbPageTest|\specialUserrights|\successfulUserLoginTest|\thumbTest|\userLoginTest|\viewPageTest|\watchlistTest
- */
-function selectPageTest( $count ) {
-
-       // if the user only wants a specific test, then only ever give them that.
-       if ( defined( "SPECIFIC_TEST" ) ) {
-               $testType = SPECIFIC_TEST;
-               return new $testType ();
-       }
-
-       // Some of the time we test Special pages, the remaining
-       // time we test using the standard edit page.
-       switch ( $count % 100 ) {
-               case 0 : return new successfulUserLoginTest();
-               case 1 : return new listusersTest();
-               case 2 : return new searchTest();
-               case 3 : return new recentchangesTest();
-               case 4 : return new prefixindexTest();
-               case 5 : return new mimeSearchTest();
-               case 6 : return new specialLogTest();
-               case 7 : return new userLoginTest();
-               case 8 : return new ipblocklistTest();
-               case 9 : return new newImagesTest();
-               case 10: return new imagelistTest();
-               case 11: return new specialExportTest();
-               case 12: return new specialBooksourcesTest();
-               case 13: return new specialAllpagesTest();
-               case 14: return new pageHistoryTest();
-               case 15: return new contributionsTest();
-               case 16: return new viewPageTest();
-               case 17: return new specialAllmessagesTest();
-               case 18: return new specialNewpagesPageTest();
-               case 19: return new searchTest();
-               case 20: return new redirectTest();
-               case 21: return new confirmEmail();
-               case 22: return new watchlistTest();
-               case 24: return new specialUndeletePageTest();
-               case 25: return new specialMovePage();
-               case 26: return new specialUnlockdbPageTest();
-               case 27: return new specialLockdbPageTest();
-               case 28: return new specialUserrights();
-               case 29: return new pageProtectionForm();
-               case 30: return new specialBlockip();
-               case 31: return new imagepageTest();
-               case 32: return new pageDeletion();
-               case 33: return new specialRevisionDeletePageTest();
-               case 34: return new specialImportPageTest();
-               case 35: return new thumbTest();
-               case 37: return new profileInfo();
-               case 38: return new specialCitePageTest();
-               case 39: return new specialFilepathPageTest();
-               case 40: return new specialRenameuserPageTest();
-               case 41: return new specialLinksearch();
-               case 42: return new specialCategoryTree();
-               case 43: return new api();
-               case 44: return new specialChemicalsourcesTest();
-               default: return new editPageTest();
-       }
-}
-
-
-// /////////////////////  SAVING OUTPUT  /////////////////////////
-
-/**
- ** Utility function for saving a file. Currently has no error checking.
- */
-function saveFile( $data, $name ) {
-       file_put_contents( $name, $data );
-}
-
-/**
- ** Returns a test as an experimental GET-to-POST URL.
- **        This doesn't seem to always work though, and sometimes the output is too long
- **        to be a valid GET URL, so we also save in other formats.
- * @param $test pageTest
- * @return string
- */
-function getAsURL( pageTest $test ) {
-       $used_question_mark = ( strpos( $test->getPagePath(), "?" ) !== false );
-       $retval = "http://get-to-post.nickj.org/?" . WIKI_BASE_URL . $test->getPagePath();
-       foreach ( $test->getParams() as $param => $value ) {
-               if ( !$used_question_mark ) {
-                       $retval .= "?";
-                       $used_question_mark = true;
-               }
-               else {
-                       $retval .= "&";
-               }
-               $retval .= $param . "=" . urlencode( $value );
-       }
-       return $retval;
-}
-
-
-/**
- ** Saves a plain-text human-readable version of a test.
- */
-function saveTestAsText( pageTest $test, $filename ) {
-       $str = "Test: " . $test->getPagePath();
-       foreach ( $test->getParams() as $param => $value ) {
-               $str .= "\n$param: $value";
-       }
-       $str .= "\nGet-to-post URL: " . getAsURL( $test ) . "\n";
-       saveFile( $str, $filename );
-}
-
-
-/**
- ** Saves a test as a standalone basic PHP script that shows this one problem.
- **        Resulting script requires PHP-Curl be installed in order to work.
- */
-function saveTestAsPHP( pageTest $test, $filename ) {
-       $str = "<?php\n"
-               . "\$params = " . var_export( escapeForCurl( $test->getParams() ), true ) . ";\n"
-               . "\$ch = curl_init();\n"
-               . "curl_setopt(\$ch, CURLOPT_POST, 1);\n"
-               . "curl_setopt(\$ch, CURLOPT_POSTFIELDS, \$params );\n"
-               . "curl_setopt(\$ch, CURLOPT_URL, " . var_export( WIKI_BASE_URL . $test->getPagePath(), true ) . ");\n"
-               . "curl_setopt(\$ch, CURLOPT_RETURNTRANSFER,1);\n"
-               .  ( $test->getCookie() ? "curl_setopt(\$ch, CURLOPT_COOKIE, " . var_export( $test->getCookie(), true ) . ");\n" : "" )
-               . "\$result=curl_exec(\$ch);\n"
-               . "curl_close (\$ch);\n"
-               . "print \$result;\n"
-               . "\n";
-       saveFile( $str, $filename );
-}
-
-/**
- * Escapes a value so that it can be used on the command line by Curl.
- *        Specifically, "<" and "@" need to be escaped if they are the first character,
- *        otherwise  curl interprets these as meaning that we want to insert a file.
- * @param $input_params array
- * @return array
- */
-function escapeForCurl( array $input_params ) {
-       $output_params = array();
-       foreach ( $input_params as $param => $value ) {
-               if ( strlen( $value ) > 0 && ( $value[0] == "@" || $value[0] == "<" ) ) {
-                       $value = "\\" . $value;
-               }
-               $output_params[$param] = $value;
-       }
-       return $output_params;
-}
-
-
-/**
- ** Saves a test as a standalone CURL shell script that shows this one problem.
- **        Resulting script requires standalone Curl be installed in order to work.
- */
-function saveTestAsCurl( pageTest $test, $filename ) {
-       $str = "#!/bin/bash\n"
-               . "curl --silent --include --globoff \\\n"
-               . ( $test->getCookie() ? " --cookie " . escapeshellarg( $test->getCookie() ) . " \\\n" : "" );
-       foreach ( escapeForCurl( $test->getParams() ) as $param => $value ) {
-               $str .= " -F " . escapeshellarg( $param ) . "=" . escapeshellarg( $value ) . " \\\n";
-       }
-       $str .= " " . escapeshellarg( WIKI_BASE_URL . $test->getPagePath() ); // beginning space matters.
-       $str .= "\n";
-       saveFile( $str, $filename );
-       chmod( $filename, 0755 ); // make executable
-}
-
-
-/**
- ** Saves the internal data structure to file.
- */
-function saveTestData ( pageTest $test, $filename ) {
-       saveFile( serialize( $test ),  $filename );
-}
-
-
-/**
- ** saves a test in the various formats.
- */
-function saveTest( pageTest $test, $testname ) {
-       $base_name = DIRECTORY . "/" . $testname;
-       saveTestAsText( $test, $base_name . INFO_FILE );
-       saveTestAsPHP ( $test, $base_name . PHP_TEST );
-       saveTestAsCurl( $test, $base_name . CURL_TEST );
-       saveTestData  ( $test, $base_name . DATA_FILE );
-}
-
-// ////////////////// MEDIAWIKI OUTPUT /////////////////////////
-
-/**
- * Asks MediaWiki for the HTML output of a test.
- * @param $test pageTest
- * @return string
- */
-function wikiTestOutput( pageTest $test ) {
-
-       $ch = curl_init();
-
-       // specify the cookie, if required.
-       if ( $test->getCookie() ) {
-               curl_setopt( $ch, CURLOPT_COOKIE, $test->getCookie() );
-       }
-       curl_setopt( $ch, CURLOPT_POST, 1 );                          // save form using a POST
-
-       $params = escapeForCurl( $test->getParams() );
-       curl_setopt( $ch, CURLOPT_POSTFIELDS, $params );             // load the POST variables
-
-       curl_setopt( $ch, CURLOPT_URL, WIKI_BASE_URL . $test->getPagePath() );  // set url to post to
-       curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );                 // return into a variable
-
-       $result = curl_exec ( $ch );
-
-       // if we encountered an error, then say so, and return an empty string.
-       if ( curl_error( $ch ) ) {
-               print "\nCurl error #: " . curl_errno( $ch ) . " - " . curl_error ( $ch );
-               $result = "";
-       }
-
-       curl_close ( $ch );
-
-       return $result;
-}
-
-
-// ////////////////// HTML VALIDATION /////////////////////////
-
-/**
- * Asks the validator whether this is valid HTML, or not.
- * @param $text string
- * @return array
- */
-function validateHTML( $text ) {
-
-       $params = array ( "fragment"   => $text );
-
-       $ch = curl_init();
-
-       curl_setopt( $ch, CURLOPT_POST, 1 );                    // save form using a POST
-       curl_setopt( $ch, CURLOPT_POSTFIELDS, $params );        // load the POST variables
-       curl_setopt( $ch, CURLOPT_URL, VALIDATOR_URL );         // set url to post to
-       curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );           // return into a variable
-
-       $result = curl_exec ( $ch );
-
-       // if we encountered an error, then log it, and exit.
-       if ( curl_error( $ch ) ) {
-               trigger_error( "Curl error #: " . curl_errno( $ch ) . " - " . curl_error ( $ch ) );
-               print "Curl error #: " . curl_errno( $ch ) . " - " . curl_error ( $ch ) . " - exiting.\n";
-               exit( 1 );
-       }
-
-       curl_close ( $ch );
-
-       $valid = ( strpos( $result, "Failed validation" ) === false );
-
-       return array( $valid, $result );
-}
-
-/**
- * Get tidy to check for no HTML errors in the output file (e.g. unescaped strings).
- * @param $name
- * @return bool
- */
-function tidyCheckFile( $name ) {
-       $file = DIRECTORY . "/" . $name;
-       $command = PATH_TO_TIDY . " -output /tmp/out.html -quiet $file 2>&1";
-       $x = `$command`;
-
-       // Look for the most interesting Tidy errors and warnings.
-       if (   strpos( $x, "end of file while parsing attributes" ) !== false
-                       || strpos( $x, "attribute with missing trailing quote mark" ) !== false
-                       || strpos( $x, "missing '>' for end of tag" ) !== false
-                       || strpos( $x, "Error:" ) !== false ) {
-               print "\nTidy found something - view details with: $command";
-               return false;
-       } else {
-               return true;
-       }
-}
-
-/**
- ** Returns whether or not an database error log file has changed in size since
- **        the last time this was run. This is used to tell if a test caused a DB error.
- * @return bool
- */
-function dbErrorLogged() {
-       static $filesize;
-
-       // first time running this function
-       if ( !isset( $filesize ) ) {
-               // create log if it does not exist
-               if ( DB_ERROR_LOG_FILE && !file_exists( DB_ERROR_LOG_FILE ) ) {
-                       saveFile( '', DB_ERROR_LOG_FILE );
-               }
-               $filesize = filesize( DB_ERROR_LOG_FILE );
-               return false;
-       }
-
-       $newsize = filesize( DB_ERROR_LOG_FILE );
-       // if the log has grown, then assume the current test caused it.
-       if ( $newsize != $filesize ) {
-               $filesize = $newsize;
-               return true;
-       }
-
-       return false;
-}
-
-// //////////////// TOP-LEVEL PROBLEM-FINDING FUNCTION ////////////////////////
-
-/**
- * takes a page test, and runs it and tests it for problems in the output.
- *        Returns: False on finding a problem, or True on no problems being found.
- * @param $test pageTest
- * @param $testname
- * @param $can_overwrite bool
- * @return bool
- */
-function runWikiTest( pageTest $test, &$testname, $can_overwrite = false ) {
-
-       // by default don't overwrite a previous test of the same name.
-       while ( ! $can_overwrite && file_exists( DIRECTORY . "/" . $testname . DATA_FILE ) ) {
-               $testname .= "-" . mt_rand( 0, 9 );
-       }
-
-       $filename = DIRECTORY . "/" . $testname . DATA_FILE;
-
-       // Store the time before and after, to find slow pages.
-       $before = microtime( true );
-
-       // Get MediaWiki to give us the output of this test.
-       $wiki_preview = wikiTestOutput( $test );
-
-       $after = microtime( true );
-
-       // if we received no response, then that's interesting.
-       if ( $wiki_preview == "" ) {
-               print "\nNo response received for: $filename";
-               return false;
-       }
-
-       // save output HTML to file.
-       $html_file = DIRECTORY . "/" . $testname . HTML_FILE;
-       saveFile( $wiki_preview,  $html_file );
-
-       // if there were PHP errors in the output, then that's interesting too.
-       if (       strpos( $wiki_preview, "<b>Warning</b>: "        ) !== false
-                       || strpos( $wiki_preview, "<b>Fatal error</b>: "    ) !== false
-                       || strpos( $wiki_preview, "<b>Notice</b>: "         ) !== false
-                       || strpos( $wiki_preview, "<b>Error</b>: "          ) !== false
-                       || strpos( $wiki_preview, "<b>Strict Standards:</b>" ) !== false
-                       ) {
-               $error = substr( $wiki_preview, strpos( $wiki_preview, "</b>:" ) + 7, 50 );
-               // Avoid probable PHP bug with bad session ids; http://bugs.php.net/bug.php?id=38224
-               if ( $error != "Unknown: The session id contains illegal character" ) {
-                       print "\nPHP error/warning/notice in HTML output: $html_file ; $error";
-                       return false;
-               }
-       }
-
-       // if there was a MediaWiki Backtrace message in the output, then that's also interesting.
-       if ( strpos( $wiki_preview, "Backtrace:" ) !== false ) {
-               print "\nInternal MediaWiki error in HTML output: $html_file";
-               return false;
-       }
-
-       // if there was a Parser error comment in the output, then that's potentially interesting.
-       if ( strpos( $wiki_preview, "!-- ERR" ) !== false ) {
-               print "\nParser Error comment in HTML output: $html_file";
-               return false;
-       }
-
-       // if a database error was logged, then that's definitely interesting.
-       if ( dbErrorLogged() ) {
-               print "\nDatabase Error logged for: $filename";
-               return false;
-       }
-
-       // validate result
-       $valid = true;
-       if ( VALIDATE_ON_WEB ) {
-               list ( $valid, $validator_output ) = validateHTML( $wiki_preview );
-               if ( !$valid ) print "\nW3C web validation failed - view details with: html2text " . DIRECTORY . "/" . $testname . ".validator_output.html";
-       }
-
-       // Get tidy to check the page, unless we already know it produces non-(X)HTML output.
-       if ( $test->tidyValidate() ) {
-               $valid = tidyCheckFile( $testname . HTML_FILE ) && $valid;
-       }
-
-       // if it took more than 2 seconds to render, then it may be interesting too. (Possible DoS attack?)
-       if ( ( $after - $before ) >= 2 ) {
-               print "\nParticularly slow to render (" . round( $after - $before, 2 ) . " seconds): $filename";
-               return false;
-       }
-
-       if ( $valid ) {
-               // Remove temp HTML file if test was valid:
-               unlink( $html_file );
-       } elseif ( VALIDATE_ON_WEB ) {
-               saveFile( $validator_output,   DIRECTORY . "/" . $testname . ".validator_output.html" );
-       }
-
-       return $valid;
-}
-
-
-// ///////////////// RERUNNING OLD TESTS ///////////////////
-
-/**
- ** We keep our failed tests so that they can be rerun.
- **        This function does that retesting.
- */
-function rerunPreviousTests() {
-       print "Retesting previously found problems.\n";
-
-       $dir_contents = scandir ( DIRECTORY );
-
-       // sort file into the order a normal person would use.
-       natsort ( $dir_contents );
-
-       foreach ( $dir_contents as $file ) {
-
-               // if file is not a test, then skip it.
-               // Note we need to escape any periods or will be treated as "any character".
-               $matches = array();
-               if ( !preg_match( "/(.*)" . str_replace( ".", "\.", DATA_FILE ) . "$/", $file, $matches ) ) continue;
-
-               // reload the test.
-               $full_path = DIRECTORY . "/" . $file;
-               $test = unserialize( file_get_contents( $full_path ) );
-
-               // if this is not a valid test, then skip it.
-               if ( ! $test instanceof pageTest ) {
-                       print "\nSkipping invalid test - $full_path";
-                       continue;
-               }
-
-               // The date format is in Apache log format, which makes it easier to locate
-               // which retest caused which error in the Apache logs (only happens usually if
-               // apache segfaults).
-               if ( !QUIET ) print "[" . date ( "D M d H:i:s Y" ) . "] Retesting $file (" . get_class( $test ) . ")";
-
-               // run test
-               $testname = $matches[1];
-               $valid = runWikiTest( $test, $testname, true );
-
-               if ( !$valid ) {
-                       saveTest( $test, $testname );
-                       if ( QUIET ) {
-                               print "\nTest: " . get_class( $test ) . " ; Testname: $testname\n------";
-                       } else {
-                               print "\n";
-                       }
-               }
-               else {
-                       if ( !QUIET ) print "\r";
-                       if ( DELETE_PASSED_RETESTS ) {
-                               $prefix = DIRECTORY . "/" . $testname;
-                               if ( is_file( $prefix . DATA_FILE ) ) unlink( $prefix . DATA_FILE );
-                               if ( is_file( $prefix . PHP_TEST ) ) unlink( $prefix . PHP_TEST );
-                               if ( is_file( $prefix . CURL_TEST ) ) unlink( $prefix . CURL_TEST );
-                               if ( is_file( $prefix . INFO_FILE ) ) unlink( $prefix . INFO_FILE );
-                       }
-               }
-       }
-
-       print "\nDone retesting.\n";
-}
-
-
-// ////////////////////  MAIN LOOP  ////////////////////////
-
-
-// first check whether CURL is installed, because sometimes it's not.
-if ( ! function_exists( 'curl_init' ) ) {
-       die( "Could not find 'curl_init' function. Is the curl extension compiled into PHP?\n" );
-}
-
-// Initialization of types. wikiFuzz doesn't have a constructor because we want to
-// access it staticly and not have any globals.
-wikiFuzz::$types = array_keys( wikiFuzz::$data );
-
-// Make directory if doesn't exist
-if ( !is_dir( DIRECTORY ) ) {
-       mkdir ( DIRECTORY, 0700 );
-}
-// otherwise, we first retest the things that we have found in previous runs
-elseif ( RERUN_OLD_TESTS ) {
-       rerunPreviousTests();
-}
-
-// main loop.
-$start_time = date( "U" );
-$num_errors = 0;
-if ( !QUIET ) {
-       print "Beginning main loop. Results are stored in the " . DIRECTORY . " directory.\n";
-       print "Press CTRL+C to stop testing.\n";
-}
-
-for ( $count = 0; true; $count++ ) {
-       if ( !QUIET ) {
-               // spinning progress indicator.
-               switch( $count % 4 ) {
-                       case '0': print "\r/";  break;
-                       case '1': print "\r-";  break;
-                       case '2': print "\r\\"; break;
-                       case '3': print "\r|";  break;
-               }
-               print " $count";
-       }
-
-       // generate a page test to run.
-       $test = selectPageTest( $count );
-
-       $mins = ( date( "U" ) - $start_time ) / 60;
-       if ( !QUIET && $mins > 0 ) {
-               print ".  $num_errors poss errors. "
-                       . floor( $mins ) . " mins. "
-                       . round ( $count / $mins, 0 ) . " tests/min. "
-                       . get_class( $test ); // includes the current test name.
-       }
-
-       // run this test against MediaWiki, and see if the output was valid.
-       $testname = $count;
-       $valid = runWikiTest( $test, $testname, false );
-
-       // save the failed test
-       if ( ! $valid ) {
-               if ( QUIET ) {
-                       print "\nTest: " . get_class( $test ) . " ; Testname: $testname\n------";
-               } else {
-                       print "\n";
-               }
-               saveTest( $test, $testname );
-               $num_errors += 1;
-       } elseif ( KEEP_PASSED_TESTS ) {
-               // print current time, with microseconds (matches "strace" format), and the test name.
-               print " " . date( "H:i:s." ) . substr( current( explode( " ", microtime() ) ), 2 ) . " " . $testname;
-               saveTest( $test, $testname );
-       }
-
-       // stop if we have reached max number of errors.
-       if ( defined( "MAX_ERRORS" ) && $num_errors >= MAX_ERRORS ) {
-               break;
-       }
-
-       // stop if we have reached max number of mins runtime.
-       if ( defined( "MAX_RUNTIME" ) && $mins >= MAX_RUNTIME ) {
-               break;
-       }
-}
index 0b21a1f..ab28c8b 100644 (file)
@@ -125,7 +125,6 @@ class GenerateSitemap extends Maintenance {
         */
        public $findex;
 
-
        /**
         * A resource pointing to a sitemap file
         *
index e9d8c86..f9390f6 100644 (file)
@@ -1,7 +1,4 @@
 <?php
-if ( !defined( 'MEDIAWIKI' ) ) {
-       die();
-}
 /**
  * Statistic output classes.
  *
@@ -27,57 +24,77 @@ if ( !defined( 'MEDIAWIKI' ) ) {
  */
 
 /** A general output object. Need to be overriden */
-class statsOutput {
+class StatsOutput {
        function formatPercent( $subset, $total, $revert = false, $accuracy = 2 ) {
-               return @sprintf( '%.' . $accuracy . 'f%%', 100 * $subset / $total );
+               wfSuppressWarnings();
+               $return = sprintf( '%.' . $accuracy . 'f%%', 100 * $subset / $total );
+               wfRestoreWarnings();
+               return $return;
        }
 
        # Override the following methods
        function heading() {
        }
+
        function footer() {
        }
+
        function blockstart() {
        }
+
        function blockend() {
        }
+
        function element( $in, $heading = false ) {
        }
 }
 
 /** Outputs WikiText */
-class wikiStatsOutput extends statsOutput {
+class WikiStatsOutput extends StatsOutput {
        function heading() {
                global $wgDummyLanguageCodes;
                $version = SpecialVersion::getVersion( 'nodb' );
                echo "'''Statistics are based on:''' <code>" . $version . "</code>\n\n";
-               echo "'''Note:''' These statistics can be generated by running <code>php maintenance/language/transstat.php</code>.\n\n";
-               echo "For additional information on specific languages (the message names, the actual problems, etc.), run <code>php maintenance/language/checkLanguage.php --lang=foo</code>.\n\n";
+               echo "'''Note:''' These statistics can be generated by running " .
+                       "<code>php maintenance/language/transstat.php</code>.\n\n";
+               echo "For additional information on specific languages (the message names, the actual " .
+                       "problems, etc.), run <code>php maintenance/language/checkLanguage.php --lang=foo</code>.\n\n";
                echo 'English (en) is excluded because it is the default localization';
                if ( is_array( $wgDummyLanguageCodes ) ) {
                        $dummyCodes = array();
                        foreach ( $wgDummyLanguageCodes as $dummyCode => $correctCode ) {
                                $dummyCodes[] = Language::fetchLanguageName( $dummyCode ) . ' (' . $dummyCode . ')';
                        }
-                       echo ', as well as the following languages that are not intended for system message translations, usually because they redirect to other language codes: ' . implode( ', ', $dummyCodes );
+                       echo ', as well as the following languages that are not intended for ' .
+                               'system message translations, usually because they redirect to other ' .
+                               'language codes: ' . implode( ', ', $dummyCodes );
                }
                echo ".\n\n"; # dot to end sentence
-               echo '{| class="sortable wikitable" border="2" style="background-color: #F9F9F9; border: 1px #AAAAAA solid; border-collapse: collapse; clear:both; width:100%;"' . "\n";
+               echo '{| class="sortable wikitable" border="2" style="background-color: #F9F9F9; ' .
+                       'border: 1px #AAAAAA solid; border-collapse: collapse; clear:both; width:100%;"' . "\n";
        }
+
        function footer() {
                echo "|}\n";
        }
+
        function blockstart() {
                echo "|-\n";
        }
+
        function blockend() {
                echo '';
        }
+
        function element( $in, $heading = false ) {
                echo ( $heading ? '!' : '|' ) . "$in\n";
        }
+
        function formatPercent( $subset, $total, $revert = false, $accuracy = 2 ) {
-               $v = @round( 255 * $subset / $total );
+               wfSuppressWarnings();
+               $v = round( 255 * $subset / $total );
+               wfRestoreWarnings();
+
                if ( $revert ) {
                        # Weigh reverse with factor 20 so coloring takes effect more quickly as
                        # this option is used solely for reporting 'bad' percentages.
@@ -100,25 +117,28 @@ class wikiStatsOutput extends statsOutput {
                $color = $red . $green . $blue;
 
                $percent = parent::formatPercent( $subset, $total, $revert, $accuracy );
+
                return 'style="background-color:#' . $color . ';"|' . $percent;
        }
 }
 
 /** Output text. To be used on a terminal for example. */
-class textStatsOutput extends statsOutput {
+class TextStatsOutput extends StatsOutput {
        function element( $in, $heading = false ) {
                echo $in . "\t";
        }
+
        function blockend() {
                echo "\n";
        }
 }
 
 /** csv output. Some people love excel */
-class csvStatsOutput extends statsOutput {
+class CsvStatsOutput extends StatsOutput {
        function element( $in, $heading = false ) {
                echo $in . ";";
        }
+
        function blockend() {
                echo "\n";
        }
index 381ddae..5d48244 100644 (file)
@@ -67,8 +67,7 @@ if ( $runTest ) {
        $messagesFileC = $messagesDir . 'Messages' . $langCodeFC . '.php';
        if ( file_exists( $messagesFile ) && file_exists( $messagesFileC ) ) {
                $run = true;
-       }
-       else {
+       } else {
                echo "Messages file(s) could not be found.\nMake sure both files are exists.\n";
        }
 }
index 4b49ada..ac70ead 100644 (file)
@@ -89,7 +89,7 @@ class CheckLanguageCLI {
                        $this->output = $options['output'];
                }
 
-               $this->L = new languages( $this->includeExif );
+               $this->L = new Languages( $this->includeExif );
        }
 
        /**
@@ -182,21 +182,25 @@ class CheckLanguageCLI {
                return array(
                        'untranslated' => '$1 message(s) of $2 are not translated to $3, but exist in en:',
                        'duplicate' => '$1 message(s) of $2 are translated the same in en and $3:',
-                       'obsolete' => '$1 message(s) of $2 do not exist in en or are in the ignore list, but exist in $3:',
+                       'obsolete' =>
+                               '$1 message(s) of $2 do not exist in en or are in the ignore list, but exist in $3:',
                        'variables' => '$1 message(s) of $2 in $3 don\'t match the variables used in en:',
                        'plural' => '$1 message(s) of $2 in $3 don\'t use {{plural}} while en uses:',
                        'empty' => '$1 message(s) of $2 in $3 are empty or -:',
                        'whitespace' => '$1 message(s) of $2 in $3 have trailing whitespace:',
                        'xhtml' => '$1 message(s) of $2 in $3 contain illegal XHTML:',
-                       'chars' => '$1 message(s) of $2 in $3 include hidden chars which should not be used in the messages:',
+                       'chars' =>
+                               '$1 message(s) of $2 in $3 include hidden chars which should not be used in the messages:',
                        'links' => '$1 message(s) of $2 in $3 have problematic link(s):',
                        'unbalanced' => '$1 message(s) of $2 in $3 have unbalanced {[]}:',
                        'namespace' => '$1 namespace name(s) of $2 are not translated to $3, but exist in en:',
-                       'projecttalk' => '$1 namespace name(s) and alias(es) in $3 are project talk namespaces without the parameter:',
+                       'projecttalk' =>
+                               '$1 namespace name(s) and alias(es) in $3 are project talk namespaces without the parameter:',
                        'magic' => '$1 magic word(s) of $2 are not translated to $3, but exist in en:',
                        'magic-old' => '$1 magic word(s) of $2 do not exist in en, but exist in $3:',
                        'magic-over' => '$1 magic word(s) of $2 in $3 do not contain the original en word(s):',
-                       'magic-case' => '$1 magic word(s) of $2 in $3 change the case-sensitivity of the original en word:',
+                       'magic-case' =>
+                               '$1 magic word(s) of $2 in $3 change the case-sensitivity of the original en word:',
                        'special' => '$1 special page alias(es) of $2 are not translated to $3, but exist in en:',
                        'special-old' => '$1 special page alias(es) of $2 do not exist in en, but exist in $3:',
                );
@@ -216,35 +220,49 @@ Parameters:
        --all: Check all customized languages.
        --level: Show the following display level (default: 2):
                * 0: Skip the checks (useful for checking syntax).
-               * 1: Show only the stub headers and number of wrong messages, without list of messages.
-               * 2: Show only the headers and the message keys, without the message values.
-               * 3: Show both the headers and the complete messages, with both keys and values.
+               * 1: Show only the stub headers and number of wrong messages, without
+                    list of messages.
+               * 2: Show only the headers and the message keys, without the message
+                    values.
+               * 3: Show both the headers and the complete messages, with both keys and
+                    values.
        --links: Link the message values (default off).
        --prefix: prefix to add to links.
-       --wikilang: For the links, what is the content language of the wiki to display the output in (default en).
-       --noexif: Do not check for Exif messages (a bit hard and boring to translate), if you know
-               that they are currently not translated and want to focus on other problems (default off).
+       --wikilang: For the links, what is the content language of the wiki to
+           display the output in (default en).
+       --noexif: Do not check for Exif messages (a bit hard and boring to
+           translate), if you know what they are currently not translated and want
+           to focus on other problems (default off).
        --whitelist: Do only the following checks (form: code,code).
        --blacklist: Do not do the following checks (form: code,code).
-       --easy: Do only the easy checks, which can be treated by non-speakers of the language.
-
-Check codes (ideally, all of them should result 0; all the checks are executed by default (except language-specific check blacklists in checkLanguage.inc):
-       * untranslated: Messages which are required to translate, but are not translated.
-       * duplicate: Messages which translation equal to fallback
-       * obsolete: Messages which are untranslatable or do not exist, but are translated.
-       * variables: Messages without variables which should be used, or with variables which should not be used.
+       --easy: Do only the easy checks, which can be treated by non-speakers of
+           the language.
+
+Check codes (ideally, all of them should result 0; all the checks are executed
+by default (except language-specific check blacklists in checkLanguage.inc):
+       * untranslated: Messages which are required to translate, but are not
+         translated.
+       * duplicate: Messages which translation equal to fallback.
+       * obsolete: Messages which are untranslatable or do not exist, but are
+         translated.
+       * variables: Messages without variables which should be used, or with
+         variables which should not be used.
        * empty: Empty messages and messages that contain only -.
        * whitespace: Messages which have trailing whitespace.
-       * xhtml: Messages which are not well-formed XHTML (checks only few common errors).
+       * xhtml: Messages which are not well-formed XHTML (checks only few common
+         errors).
        * chars: Messages with hidden characters.
        * links: Messages which contains broken links to pages (does not find all).
-       * unbalanced: Messages which contains unequal numbers of opening {[ and closing ]}.
+       * unbalanced: Messages which contains unequal numbers of opening {[ and
+         closing ]}.
        * namespace: Namespace names that were not translated.
-       * projecttalk: Namespace names and aliases where the project talk does not contain $1.
+       * projecttalk: Namespace names and aliases where the project talk does not
+         contain $1.
        * magic: Magic words that were not translated.
        * magic-old: Magic words which do not exist.
        * magic-over: Magic words that override the original English word.
-       * magic-case: Magic words whose translation changes the case-sensitivity of the original English word.
+       * magic-case: Magic words whose translation changes the case-sensitivity of
+         the original English word.
        * special: Special page names that were not translated.
        * special-old: Special page names which do not exist.
 
@@ -291,6 +309,17 @@ ENDS;
                                $this->results[$this->code] = $this->checkLanguage( $this->code );
                        }
                }
+
+               $results = $this->results;
+               foreach ( $results as $code => $checks ) {
+                       foreach ( $checks as $check => $messages ) {
+                               foreach ( $messages as $key => $details ) {
+                                       if ( $this->isCheckBlacklisted( $check, $code, $key ) ) {
+                                               unset( $this->results[$code][$check][$key] );
+                                       }
+                               }
+                       }
+               }
        }
 
        /**
@@ -298,9 +327,53 @@ ENDS;
         * @return array The list of checks which should not be executed.
         */
        protected function getCheckBlacklist() {
+               static $blacklist = null;
+
+               if ( $blacklist !== null ) {
+                       return $blacklist;
+               }
+
+               // @codingStandardsIgnoreStart Ignore that globals should have a "wg" prefix.
                global $checkBlacklist;
+               // @codingStandardsIgnoreEnd
+
+               $blacklist = $checkBlacklist;
+
+               wfRunHooks( 'LocalisationChecksBlacklist', array( &$blacklist ) );
+
+               return $blacklist;
+       }
+
+       /**
+        * Verify whether a check is blacklisted.
+        *
+        * @param string $check Check name
+        * @param string $code Language code
+        * @param string|bool $message Message name, or False for a whole language
+        * @return bool Whether the check is blacklisted
+        */
+       protected function isCheckBlacklisted( $check, $code, $message ) {
+               $blacklist = $this->getCheckBlacklist();
+
+               foreach ( $blacklist as $item ) {
+                       if ( isset( $item['check'] ) && $check !== $item['check'] ) {
+                               continue;
+                       }
 
-               return $checkBlacklist;
+                       if ( isset( $item['code'] ) && !in_array( $code, $item['code'] ) ) {
+                               continue;
+                       }
+
+                       if ( isset( $item['message'] ) &&
+                               ( $message === false || !in_array( $message, $item['message'] ) )
+                       ) {
+                               continue;
+                       }
+
+                       return true;
+               }
+
+               return false;
        }
 
        /**
@@ -319,11 +392,8 @@ ENDS;
                }
 
                $checkFunctions = $this->getChecks();
-               $checkBlacklist = $this->getCheckBlacklist();
                foreach ( $this->checks as $check ) {
-                       if ( isset( $checkBlacklist[$code] ) &&
-                               in_array( $check, $checkBlacklist[$code] )
-                       ) {
+                       if ( $this->isCheckBlacklisted( $check, $code, false ) ) {
                                $results[$check] = array();
                                continue;
                        }
@@ -407,7 +477,8 @@ ENDS;
         */
        function outputWiki() {
                $detailText = '';
-               $rows[] = '! Language !! Code !! Total !! ' . implode( ' !! ', array_diff( $this->checks, $this->nonMessageChecks() ) );
+               $rows[] = '! Language !! Code !! Total !! ' .
+                       implode( ' !! ', array_diff( $this->checks, $this->nonMessageChecks() ) );
                foreach ( $this->results as $code => $results ) {
                        $detailTextForLang = "==$code==\n";
                        $numbers = array();
@@ -447,6 +518,7 @@ ENDS;
                $tableRows = implode( "\n|-\n", $rows );
 
                $version = SpecialVersion::getVersion( 'nodb' );
+               // @codingStandardsIgnoreStart Long line.
                echo <<<EOL
 '''Check results are for:''' <code>$version</code>
 
@@ -458,6 +530,7 @@ $tableRows
 $detailText
 
 EOL;
+               // @codingStandardsIgnoreEnd
        }
 
        /**
@@ -539,19 +612,19 @@ class CheckExtensionsCLI extends CheckLanguageCLI {
                if ( $extension == 'all' ) {
                        foreach ( MessageGroups::singleton()->getGroups() as $group ) {
                                if ( strpos( $group->getId(), 'ext-' ) === 0 && !$group->isMeta() ) {
-                                       $this->extensions[] = new extensionLanguages( $group );
+                                       $this->extensions[] = new ExtensionLanguages( $group );
                                }
                        }
                } elseif ( $extension == 'wikimedia' ) {
                        $wikimedia = MessageGroups::getGroup( 'ext-0-wikimedia' );
                        foreach ( $wikimedia->wmfextensions() as $extension ) {
                                $group = MessageGroups::getGroup( $extension );
-                               $this->extensions[] = new extensionLanguages( $group );
+                               $this->extensions[] = new ExtensionLanguages( $group );
                        }
                } elseif ( $extension == 'flaggedrevs' ) {
                        foreach ( MessageGroups::singleton()->getGroups() as $group ) {
                                if ( strpos( $group->getId(), 'ext-flaggedrevs-' ) === 0 && !$group->isMeta() ) {
-                                       $this->extensions[] = new extensionLanguages( $group );
+                                       $this->extensions[] = new ExtensionLanguages( $group );
                                }
                        }
                } else {
@@ -559,7 +632,7 @@ class CheckExtensionsCLI extends CheckLanguageCLI {
                        foreach ( $extensions as $extension ) {
                                $group = MessageGroups::getGroup( 'ext-' . $extension );
                                if ( $group ) {
-                                       $extension = new extensionLanguages( $group );
+                                       $extension = new ExtensionLanguages( $group );
                                        $this->extensions[] = $extension;
                                } else {
                                        print "No such extension $extension.\n";
@@ -603,34 +676,50 @@ class CheckExtensionsCLI extends CheckLanguageCLI {
         */
        protected function help() {
                return <<<ENDS
-Run this script to check the status of a specific language in extensions, or all of them.
-Command line settings are in form --parameter[=value], except for the first one.
+Run this script to check the status of a specific language in extensions, or
+all of them. Command line settings are in form --parameter[=value], except for
+the first one.
 Parameters:
-       * First parameter (mandatory): Extension name, multiple extension names (separated by commas), "all" for all the extensions, "wikimedia" for extensions used by Wikimedia or "flaggedrevs" for all FLaggedRevs extension messages.
+       * First parameter (mandatory): Extension name, multiple extension names
+         (separated by commas), "all" for all the extensions, "wikimedia" for
+         extensions used by Wikimedia or "flaggedrevs" for all FLaggedRevs
+         extension messages.
        * lang: Language code (default: the installation default language).
        * help: Show this help.
        * level: Show the following display level (default: 2).
        * links: Link the message values (default off).
-       * wikilang: For the links, what is the content language of the wiki to display the output in (default en).
+       * wikilang: For the links, what is the content language of the wiki to
+         display the output in (default en).
        * whitelist: Do only the following checks (form: code,code).
        * blacklist: Do not perform the following checks (form: code,code).
-       * easy: Do only the easy checks, which can be treated by non-speakers of the language.
-Check codes (ideally, all of them should result 0; all the checks are executed by default (except language-specific check blacklists in checkLanguage.inc):
-       * untranslated: Messages which are required to translate, but are not translated.
-       * duplicate: Messages which translation equal to fallback
+       * easy: Do only the easy checks, which can be treated by non-speakers of
+         the language.
+
+Check codes (ideally, all of them should result 0; all the checks are executed
+by default (except language-specific check blacklists in checkLanguage.inc):
+       * untranslated: Messages which are required to translate, but are not
+         translated.
+       * duplicate: Messages which translation equal to fallback.
        * obsolete: Messages which are untranslatable, but translated.
-       * variables: Messages without variables which should be used, or with variables which should not be used.
+       * variables: Messages without variables which should be used, or with
+         variables which should not be used.
        * empty: Empty messages.
        * whitespace: Messages which have trailing whitespace.
-       * xhtml: Messages which are not well-formed XHTML (checks only few common errors).
+       * xhtml: Messages which are not well-formed XHTML (checks only few common
+         errors).
        * chars: Messages with hidden characters.
        * links: Messages which contains broken links to pages (does not find all).
-       * unbalanced: Messages which contains unequal numbers of opening {[ and closing ]}.
+       * unbalanced: Messages which contains unequal numbers of opening {[ and
+         closing ]}.
+
 Display levels (default: 2):
        * 0: Skip the checks (useful for checking syntax).
-       * 1: Show only the stub headers and number of wrong messages, without list of messages.
-       * 2: Show only the headers and the message keys, without the message values.
-       * 3: Show both the headers and the complete messages, with both keys and values.
+       * 1: Show only the stub headers and number of wrong messages, without list
+         of messages.
+       * 2: Show only the headers and the message keys, without the message
+         values.
+       * 3: Show both the headers and the complete messages, with both keys and
+         values.
 
 ENDS;
        }
@@ -675,52 +764,21 @@ ENDS;
        }
 }
 
-# Blacklist some checks for some languages
+// Blacklist some checks for some languages or some messages
+// Possible keys of the sub arrays are: 'check', 'code' and 'message'.
 $checkBlacklist = array(
-#'code'        => array( 'check1', 'check2' ... )
-       'az' => array( 'plural' ),
-       'bo' => array( 'plural' ),
-       'cdo' => array( 'plural' ),
-       'dz' => array( 'plural' ),
-       'id' => array( 'plural' ),
-       'fa' => array( 'plural' ),
-       'gan' => array( 'plural' ),
-       'gan-hans' => array( 'plural' ),
-       'gan-hant' => array( 'plural' ),
-       'gn' => array( 'plural' ),
-       'hak' => array( 'plural' ),
-       'hu' => array( 'plural' ),
-       'ja' => array( 'plural' ), // Does not use plural
-       'jv' => array( 'plural' ),
-       'ka' => array( 'plural' ),
-       'kk-arab' => array( 'plural' ),
-       'kk-cyrl' => array( 'plural' ),
-       'kk-latn' => array( 'plural' ),
-       'km' => array( 'plural' ),
-       'kn' => array( 'plural' ),
-       'ko' => array( 'plural' ),
-       'lzh' => array( 'plural' ),
-       'mn' => array( 'plural' ),
-       'ms' => array( 'plural' ),
-       'my' => array( 'plural', 'chars' ), // Uses a lot zwnj
-       'sah' => array( 'plural' ),
-       'sq' => array( 'plural' ),
-       'tet' => array( 'plural' ),
-       'th' => array( 'plural' ),
-       'to' => array( 'plural' ),
-       'tr' => array( 'plural' ),
-       'vi' => array( 'plural' ),
-       'wuu' => array( 'plural' ),
-       'xmf' => array( 'plural' ),
-       'yo' => array( 'plural' ),
-       'yue' => array( 'plural' ),
-       'zh' => array( 'plural' ),
-       'zh-classical' => array( 'plural' ),
-       'zh-cn' => array( 'plural' ),
-       'zh-hans' => array( 'plural' ),
-       'zh-hant' => array( 'plural' ),
-       'zh-hk' => array( 'plural' ),
-       'zh-sg' => array( 'plural' ),
-       'zh-tw' => array( 'plural' ),
-       'zh-yue' => array( 'plural' ),
+       array(
+               'check' => 'plural',
+               'code' => array( 'az', 'bo', 'cdo', 'dz', 'id', 'fa', 'gan', 'gan-hans',
+                       'gan-hant', 'gn', 'hak', 'hu', 'ja', 'jv', 'ka', 'kk-arab',
+                       'kk-cyrl', 'kk-latn', 'km', 'kn', 'ko', 'lzh', 'mn', 'ms',
+                       'my', 'sah', 'sq', 'tet', 'th', 'to', 'tr', 'vi', 'wuu', 'xmf',
+                       'yo', 'yue', 'zh', 'zh-classical', 'zh-cn', 'zh-hans',
+                       'zh-hant', 'zh-hk', 'zh-sg', 'zh-tw', 'zh-yue'
+               ),
+       ),
+       array(
+               'check' => 'chars',
+               'code' => array( 'my' ),
+       ),
 );
index 95a7154..1cb24ab 100644 (file)
@@ -50,7 +50,7 @@ class CountMessages extends Maintenance {
                        // print "$code: $numMessages\n";
                        $total += $numMessages;
                        if ( $numMessages > 0 ) {
-                               $nonZero ++;
+                               $nonZero++;
                        }
                }
                $this->output( "\nTotal: $total\n" );
index fcf2c96..db6c315 100644 (file)
@@ -158,7 +158,8 @@ class GenerateCollationData extends Maintenance {
                // people like to use that as a fake no header symbol.
                $category = substr( $data['gc'], 0, 1 );
                if ( strpos( 'LNPS', $category ) === false
-                       && $data['cp'] !== '0020' ) {
+                       && $data['cp'] !== '0020'
+               ) {
                        return;
                }
                $cp = hexdec( $data['cp'] );
@@ -178,8 +179,8 @@ class GenerateCollationData extends Maintenance {
                // Calculate implicit weight per UTS #10 v6.0.0, sec 7.1.3
                if ( $data['UIdeo'] === 'Y' ) {
                        if ( $data['block'] == 'CJK Unified Ideographs'
-                               || $data['block'] == 'CJK Compatibility Ideographs' )
-                       {
+                               || $data['block'] == 'CJK Compatibility Ideographs'
+                       {
                                $base = 0xFB40;
                        } else {
                                $base = 0xFB80;
@@ -248,8 +249,8 @@ class GenerateCollationData extends Maintenance {
                        }
                        $this->weights[$cp] = $primary;
                        if ( $tertiary === '.0008'
-                               || $tertiary === '.000E' )
-                       {
+                               || $tertiary === '.000E'
+                       {
                                $goodTertiaryChars[$cp] = true;
                        }
                }
@@ -325,7 +326,7 @@ class GenerateCollationData extends Maintenance {
                        $char = codepointToUtf8( $cp );
                        $headerChars[] = $char;
                        if ( $primaryCollator->compare( $char, $prevChar ) <= 0 ) {
-                               $numOutOfOrder ++;
+                               $numOutOfOrder++;
                                /*
                                printf( "Out of order: U+%05X > U+%05X\n",
                                        utf8ToCodepoint( $prevChar ),
@@ -390,6 +391,7 @@ class UcdXmlReader {
                }
                while ( $this->xml->name !== 'ucd' && $this->xml->read() );
                $this->xml->read();
+
                return $this->xml;
        }
 
@@ -403,6 +405,7 @@ class UcdXmlReader {
                while ( $this->xml->moveToNextAttribute() ) {
                        $attrs[$this->xml->name] = $this->xml->value;
                }
+
                return $attrs;
        }
 
@@ -460,9 +463,9 @@ class UcdXmlReader {
                        }
                }
                $xml->close();
+
                return $this->blocks;
        }
-
 }
 
 $maintClass = 'GenerateCollationData';
index 216445e..b638b63 100644 (file)
@@ -44,7 +44,8 @@ class GenerateNormalizerData extends Maintenance {
                if ( !$this->hasOption( 'unicode-data-file' ) ) {
                        $this->dataFile = 'UnicodeData.txt';
                        if ( !file_exists( $this->dataFile ) ) {
-                               $this->error( "Unable to find UnicodeData.txt. Please specify its location with --unicode-data-file=<FILE>" );
+                               $this->error( "Unable to find UnicodeData.txt. Please specify " .
+                                       "its location with --unicode-data-file=<FILE>" );
                                exit( 1 );
                        }
                } else {
@@ -104,15 +105,15 @@ class GenerateNormalizerData extends Maintenance {
 
                        $code = base_convert( $data['Code'], 16, 10 );
                        if ( ( $code >= 0xFB50 && $code <= 0xFDFF ) # Arabic presentation forms A
-                               || ( $code >= 0xFE70 && $code <= 0xFEFF ) # Arabic presentation forms B
-                       {
+                               || ( $code >= 0xFE70 && $code <= 0xFEFF ) # Arabic presentation forms B
+                       {
                                if ( $data['Decomposition_Type_Mapping'] === '' ) {
                                        // No decomposition
                                        continue;
                                }
                                if ( !preg_match( '/^ *(<\w*>) +([0-9A-F ]*)$/',
-                                       $data['Decomposition_Type_Mapping'], $m ) )
-                               {
+                                       $data['Decomposition_Type_Mapping'], $m )
+                               {
                                        $this->error( "Can't parse Decomposition_Type/Mapping on line $lineNum" );
                                        $this->error( $line );
                                        continue;
index 14485f9..32cfcd7 100644 (file)
@@ -43,7 +43,7 @@ class LangMemUsage extends Maintenance {
                        $this->error( "You must compile PHP with --enable-memory-limit", true );
                }
 
-               $langtool = new languages();
+               $langtool = new Languages();
                $memlast = $memstart = memory_get_usage();
 
                $this->output( "Base memory usage: $memstart\n" );
index 6070f4a..61ee424 100644 (file)
 /**
  * @ingroup MaintenanceLanguage
  */
-class languages {
-       protected $mLanguages; # List of languages
+class Languages {
+       /** @var array List of languages */
+       protected $mLanguages; #
 
-       protected $mRawMessages; # Raw list of the messages in each language
-       protected $mMessages; # Messages in each language (except for English), divided to groups
-       protected $mFallback; # Fallback language in each language
-       protected $mGeneralMessages; # General messages in English, divided to groups
-       protected $mIgnoredMessages; # All the messages which should be exist only in the English file
-       protected $mOptionalMessages; # All the messages which may be translated or not, depending on the language
+       /** @var array Raw list of the messages in each language  */
+       protected $mRawMessages;
 
-       protected $mNamespaceNames; # Namespace names
-       protected $mNamespaceAliases; # Namespace aliases
-       protected $mMagicWords; # Magic words
-       protected $mSpecialPageAliases; # Special page aliases
+       /** @var array Messages in each language (except for English), divided to groups */
+       protected $mMessages;
+
+       /** @var array Fallback language in each language */
+       protected $mFallback;
+
+       /** @var array General messages in English, divided to groups */
+       protected $mGeneralMessages;
+
+       /** @var array All the messages which should be exist only in the English file */
+       protected $mIgnoredMessages;
+
+       /** @var array All the messages which may be translated or not, depending on the language */
+       protected $mOptionalMessages;
+
+       /** @var array Namespace names */
+       protected $mNamespaceNames;
+
+       /** @var array Namespace aliases */
+       protected $mNamespaceAliases;
+
+       /** @var array Magic words */
+       protected $mMagicWords;
+
+       /** @var  array Special page aliases */
+       protected $mSpecialPageAliases;
 
        /**
         * Load the list of languages: all the Messages*.php
@@ -96,7 +115,8 @@ class languages {
                        isset( $this->mNamespaceNames[$code] ) &&
                        isset( $this->mNamespaceAliases[$code] ) &&
                        isset( $this->mMagicWords[$code] ) &&
-                       isset( $this->mSpecialPageAliases[$code] ) ) {
+                       isset( $this->mSpecialPageAliases[$code] )
+               ) {
                        return;
                }
                $this->mRawMessages[$code] = array();
@@ -130,12 +150,16 @@ class languages {
        }
 
        /**
-        * Load the messages for a specific language (which is not English) and divide them to groups:
+        * Load the messages for a specific language (which is not English) and divide them to
+        * groups:
         * all - all the messages.
         * required - messages which should be translated in order to get a complete translation.
-        * optional - messages which can be translated, the fallback translation is used if not translated.
-        * obsolete - messages which should not be translated, either because they do not exist, or they are ignored messages.
-        * translated - messages which are either required or optional, but translated from English and needed.
+        * optional - messages which can be translated, the fallback translation is used if not
+        *   translated.
+        * obsolete - messages which should not be translated, either because they do not exist,
+        *   or they are ignored messages.
+        * translated - messages which are either required or optional, but translated from
+        *   English and needed.
         *
         * @param $code string The language code.
         */
@@ -166,10 +190,13 @@ class languages {
        /**
         * Load the messages for English and divide them to groups:
         * all - all the messages.
-        * required - messages which should be translated to other languages in order to get a complete translation.
-        * optional - messages which can be translated to other languages, but it's not required for a complete translation.
+        * required - messages which should be translated to other languages in order to get a
+        *   complete translation.
+        * optional - messages which can be translated to other languages, but it's not required
+        *   for a complete translation.
         * ignored - messages which should not be translated to other languages.
-        * translatable - messages which are either required or optional, but can be translated from English.
+        * translatable - messages which are either required or optional, but can be translated
+        *   from English.
         */
        private function loadGeneralMessages() {
                if ( isset( $this->mGeneralMessages ) ) {
@@ -199,9 +226,12 @@ class languages {
         * fallback language messages, divided to groups:
         * all - all the messages.
         * required - messages which should be translated in order to get a complete translation.
-        * optional - messages which can be translated, the fallback translation is used if not translated.
-        * obsolete - messages which should not be translated, either because they do not exist, or they are ignored messages.
-        * translated - messages which are either required or optional, but translated from English and needed.
+        * optional - messages which can be translated, the fallback translation is used if not
+        *   translated.
+        * obsolete - messages which should not be translated, either because they do not exist,
+        *   or they are ignored messages.
+        * translated - messages which are either required or optional, but translated from
+        *   English and needed.
         *
         * @param $code string The language code.
         *
@@ -209,21 +239,26 @@ class languages {
         */
        public function getMessages( $code ) {
                $this->loadMessages( $code );
+
                return $this->mMessages[$code];
        }
 
        /**
         * Get all the general English messages, divided to groups:
         * all - all the messages.
-        * required - messages which should be translated to other languages in order to get a complete translation.
-        * optional - messages which can be translated to other languages, but it's not required for a complete translation.
+        * required - messages which should be translated to other languages in
+        *   order to get a complete translation.
+        * optional - messages which can be translated to other languages, but it's
+        *   not required for a complete translation.
         * ignored - messages which should not be translated to other languages.
-        * translatable - messages which are either required or optional, but can be translated from English.
+        * translatable - messages which are either required or optional, but can be
+        *   translated from English.
         *
         * @return array The general English messages.
         */
        public function getGeneralMessages() {
                $this->loadGeneralMessages();
+
                return $this->mGeneralMessages;
        }
 
@@ -236,6 +271,7 @@ class languages {
         */
        public function getFallback( $code ) {
                $this->loadFile( $code );
+
                return $this->mFallback[$code];
        }
 
@@ -248,6 +284,7 @@ class languages {
         */
        public function getNamespaceNames( $code ) {
                $this->loadFile( $code );
+
                return $this->mNamespaceNames[$code];
        }
 
@@ -260,6 +297,7 @@ class languages {
         */
        public function getNamespaceAliases( $code ) {
                $this->loadFile( $code );
+
                return $this->mNamespaceAliases[$code];
        }
 
@@ -272,6 +310,7 @@ class languages {
         */
        public function getMagicWords( $code ) {
                $this->loadFile( $code );
+
                return $this->mMagicWords[$code];
        }
 
@@ -284,6 +323,7 @@ class languages {
         */
        public function getSpecialPageAliases( $code ) {
                $this->loadFile( $code );
+
                return $this->mSpecialPageAliases[$code];
        }
 
@@ -297,6 +337,7 @@ class languages {
        public function getUntranslatedMessages( $code ) {
                $this->loadGeneralMessages();
                $this->loadMessages( $code );
+
                return array_diff_key( $this->mGeneralMessages['required'], $this->mMessages[$code]['required'] );
        }
 
@@ -316,6 +357,7 @@ class languages {
                                $duplicateMessages[$key] = $value;
                        }
                }
+
                return $duplicateMessages;
        }
 
@@ -329,6 +371,7 @@ class languages {
        public function getObsoleteMessages( $code ) {
                $this->loadGeneralMessages();
                $this->loadMessages( $code );
+
                return $this->mMessages[$code]['obsolete'];
        }
 
@@ -348,11 +391,13 @@ class languages {
                        $missing = false;
                        foreach ( $variables as $var ) {
                                if ( preg_match( "/$var/sU", $this->mGeneralMessages['translatable'][$key] ) &&
-                                       !preg_match( "/$var/sU", $value ) ) {
+                                       !preg_match( "/$var/sU", $value )
+                               ) {
                                        $missing = true;
                                }
                                if ( !preg_match( "/$var/sU", $this->mGeneralMessages['translatable'][$key] ) &&
-                                       preg_match( "/$var/sU", $value ) ) {
+                                       preg_match( "/$var/sU", $value )
+                               ) {
                                        $missing = true;
                                }
                        }
@@ -360,6 +405,7 @@ class languages {
                                $mismatchMessages[$key] = $value;
                        }
                }
+
                return $mismatchMessages;
        }
 
@@ -375,10 +421,13 @@ class languages {
                $this->loadMessages( $code );
                $messagesWithoutPlural = array();
                foreach ( $this->mMessages[$code]['translated'] as $key => $value ) {
-                       if ( stripos( $this->mGeneralMessages['translatable'][$key], '{{plural:' ) !== false && stripos( $value, '{{plural:' ) === false ) {
+                       if ( stripos( $this->mGeneralMessages['translatable'][$key], '{{plural:' ) !== false &&
+                               stripos( $value, '{{plural:' ) === false
+                       ) {
                                $messagesWithoutPlural[$key] = $value;
                        }
                }
+
                return $messagesWithoutPlural;
        }
 
@@ -398,6 +447,7 @@ class languages {
                                $emptyMessages[$key] = $value;
                        }
                }
+
                return $emptyMessages;
        }
 
@@ -417,6 +467,7 @@ class languages {
                                $messagesWithWhitespace[$key] = $value;
                        }
                }
+
                return $messagesWithWhitespace;
        }
 
@@ -445,6 +496,7 @@ class languages {
                                $nonXHTMLMessages[$key] = $value;
                        }
                }
+
                return $nonXHTMLMessages;
        }
 
@@ -482,6 +534,7 @@ class languages {
                                $wrongCharsMessages[$key] = $value;
                        }
                }
+
                return $wrongCharsMessages;
        }
 
@@ -500,17 +553,18 @@ class languages {
                foreach ( $this->mMessages[$code]['translated'] as $key => $value ) {
                        $matches = array();
                        preg_match_all( "/\[\[([{$tc}]+)(?:\\|(.+?))?]]/sDu", $value, $matches );
-                       for ( $i = 0; $i < count( $matches[0] ); $i++ ) {
+                       $numMatches = count( $matches[0] );
+                       for ( $i = 0; $i < $numMatches; $i++ ) {
                                if ( preg_match( "/.*project.*/isDu", $matches[1][$i] ) ) {
                                        $messages[$key][] = $matches[0][$i];
                                }
                        }
 
-
                        if ( isset( $messages[$key] ) ) {
                                $messages[$key] = implode( $messages[$key], ", " );
                        }
                }
+
                return $messages;
        }
 
@@ -547,8 +601,8 @@ class languages {
                        if ( $a !== $b || $c !== $d ) {
                                $messages[$key] = "$a, $b, $c, $d";
                        }
-
                }
+
                return $messages;
        }
 
@@ -566,6 +620,7 @@ class languages {
                if ( isset( $namespacesDiff[NS_MAIN] ) ) {
                        unset( $namespacesDiff[NS_MAIN] );
                }
+
                return $namespacesDiff;
        }
 
@@ -614,6 +669,7 @@ class languages {
                                $magicWords[$key] = $value[1];
                        }
                }
+
                return $magicWords;
        }
 
@@ -633,6 +689,7 @@ class languages {
                                $magicWords[$key] = $value[1];
                        }
                }
+
                return $magicWords;
        }
 
@@ -662,6 +719,7 @@ class languages {
                                }
                        }
                }
+
                return $magicWords;
        }
 
@@ -685,6 +743,7 @@ class languages {
                                $magicWords[$key] = $local[0];
                        }
                }
+
                return $magicWords;
        }
 
@@ -704,6 +763,7 @@ class languages {
                                $specialPageAliases[$key] = $value[0];
                        }
                }
+
                return $specialPageAliases;
        }
 
@@ -723,12 +783,12 @@ class languages {
                                $specialPageAliases[$key] = $value[0];
                        }
                }
+
                return $specialPageAliases;
        }
 }
 
-class extensionLanguages extends languages {
-
+class ExtensionLanguages extends Languages {
        /**
         * @var MessageGroup
         */
index 267666d..7a10b66 100644 (file)
@@ -262,6 +262,7 @@ $wgIgnoredMessages = array(
        'edithelppage',
        'autocomment-prefix',
        'move-redirect-text',
+       'interlanguage-link-title-langonly',
 );
 
 /** Optional messages, which may be translated only if changed in the target language. */
@@ -484,7 +485,7 @@ $wgOptionalMessages = array(
        'limitreport-ppgeneratednodes-value',
        'limitreport-expansiondepth-value',
        'limitreport-expensivefunctioncount-value',
-       'tooltip-iwiki',
+       'interlanguage-link-title',
 );
 
 /** Exif messages, which may be set as optional in several checks, but are generally mandatory */
index 5567793..a6c99bd 100644 (file)
@@ -287,7 +287,6 @@ $wgMessageStructure = array(
                'disclaimerpage',
                'edithelp',
                'edithelppage',
-               'help',
                'helppage',
                'mainpage',
                'mainpage-description',
@@ -313,8 +312,6 @@ $wgMessageStructure = array(
                'backlinksubtitle',
                'retrievedfrom',
                'youhavenewmessages',
-               'newmessageslink',
-               'newmessagesdifflink',
                'youhavenewmessagesfromusers',
                'youhavenewmessagesmanyusers',
                'newmessageslinkplural',
@@ -1090,7 +1087,6 @@ $wgMessageStructure = array(
                'prefs-namespaces',
                'defaultns',
                'default',
-               'defaultns',
                'prefs-files',
                'prefs-custom-css',
                'prefs-custom-js',
@@ -1517,7 +1513,6 @@ $wgMessageStructure = array(
                'lockmanager-fail-deletelock',
                'lockmanager-fail-acquirelock',
                'lockmanager-fail-openlock',
-               'lockmanager-fail-acquirelock',
                'lockmanager-fail-releaselock',
                'lockmanager-fail-db-bucket',
                'lockmanager-fail-db-release',
@@ -1769,7 +1764,6 @@ $wgMessageStructure = array(
                'nmembers',
                'nrevisions',
                'nviews',
-               'nchanges',
                'nimagelinks',
                'ntransclusions',
                'specialpage-empty',
@@ -2724,7 +2718,8 @@ $wgMessageStructure = array(
                'tooltip-undo',
                'tooltip-preferences-save',
                'tooltip-summary',
-               'tooltip-iwiki',
+               'interlanguage-link-title',
+               'interlanguage-link-title-langonly',
        ),
        'stylesheets' => array(
                'common.css',
@@ -2788,6 +2783,7 @@ $wgMessageStructure = array(
                'pageinfo-length',
                'pageinfo-article-id',
                'pageinfo-language',
+               'pageinfo-content-model',
                'pageinfo-robot-policy',
                'pageinfo-robot-index',
                'pageinfo-robot-noindex',
@@ -3522,6 +3518,7 @@ $wgMessageStructure = array(
                'percent',
                'parentheses',
                'brackets',
+               'quotation-marks',
        ),
        'imgmulti' => array(
                'imgmultipageprev',
@@ -3582,9 +3579,6 @@ $wgMessageStructure = array(
                'lag-warn-normal',
                'lag-warn-high',
        ),
-       'watch' => array(
-               'confirm-watch-button',
-       ),
        'watchlisteditor' => array(
                'editwatchlist-summary',
                'watchlistedit-numitems',
@@ -3739,6 +3733,7 @@ $wgMessageStructure = array(
        'special-specialpages' => array(
                'specialpages',
                'specialpages-summary',
+               'specialpages-note-top',
                'specialpages-note',
                'specialpages-group-maintenance',
                'specialpages-group-other',
@@ -3820,9 +3815,6 @@ $wgMessageStructure = array(
                'sqlite-has-fts',
                'sqlite-no-fts',
        ),
-       'unwatch' => array(
-               'confirm-unwatch-button',
-       ),
        'logging' => array(
                'logentry-delete-delete',
                'logentry-delete-restore',
@@ -3881,8 +3873,6 @@ $wgMessageStructure = array(
                'newuserlog-create-entry',
                'newuserlog-create2-entry',
                'newuserlog-autocreate-entry',
-               'suppressedarticle',
-               'deletedarticle',
                // 'uploadedimage',
                // 'overwroteimage',
                'rightslogentry',
@@ -3982,248 +3972,266 @@ $wgMessageStructure = array(
                'limitreport-expensivefunctioncount',
                'limitreport-expensivefunctioncount-value',
        ),
+       'expandtemplates' => array(
+               'expandtemplates',
+               'expandtemplates-desc',
+               'expand_templates_intro',
+               'expand_templates_title',
+               'expand_templates_input',
+               'expand_templates_output',
+               'expand_templates_xml_output',
+               'expand_templates_ok',
+               'expand_templates_remove_comments',
+               'expand_templates_remove_nowiki',
+               'expand_templates_generate_xml',
+               'expand_templates_preview',
+       ),
 );
 
 /** Comments for each block */
 $wgBlockComments = array(
-       'sidebar'             => "The sidebar for MonoBook is generated from this message, lines that do not
+       'sidebar' => "The sidebar for MonoBook is generated from this message, lines that do not
 begin with * or ** are discarded, furthermore lines that do begin with ** and
 do not contain | are also discarded, but do not depend on this behavior for
 future releases. Also note that since each list value is wrapped in a unique
 (X)HTML id it should only appear once and include characters that are legal
 (X)HTML id names.",
-       'toggles'             => 'User preference toggles',
-       'underline'           => '',
-       'editfont'            => 'Font style option in Special:Preferences',
-       'dates'               => 'Dates',
-       'categorypages'       => 'Categories related messages',
-       'mainpage'            => '',
-       'miscellaneous1'      => '',
-       'cologneblue'         => 'Cologne Blue skin',
-       'vector'              => 'Vector skin',
-       'miscellaneous2'      => '',
-       'links'               => 'All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).',
-       'badaccess'           => '',
-       'versionrequired'     => '',
-       'miscellaneous3'      => '',
-       'nstab'               => "Short words for each namespace, by default used in the namespace tab in monobook",
-       'main'                => 'Main script and global functions',
-       'errors'              => 'General errors',
-       'virus'               => 'Virus scanner',
-       'login'               => 'Login and logout pages',
-       'mail'                => 'Email sending',
-       'passwordstrength'    => 'JavaScript password checks',
-       'resetpass'           => 'Change password dialog',
-       'passwordreset'       => 'Special:PasswordReset',
-       'changeemail'         => 'Special:ChangeEmail',
-       'resettokens'         => 'Special:ResetTokens',
-       'toolbar'             => 'Edit page toolbar',
-       'edit'                => 'Edit pages',
-       'parserwarnings'      => 'Parser/template warnings',
-       'contentmodels'       => 'Content models',
-       'undo'                => '"Undo" feature',
-       'cantcreateaccount'   => 'Account creation failure',
-       'history'             => 'History pages',
-       'history-feed'        => 'Revision feed',
-       'revdelete'           => 'Revision deletion',
-       'suppression'         => 'Suppression log',
-       'mergehistory'        => 'History merging',
-       'mergelog'            => 'Merge log',
-       'diffs'               => 'Diffs',
-       'search'              => 'Search results',
-       'opensearch'          => 'OpenSearch description',
-       'preferences'         => 'Preferences page',
-       'preferences-email'   => 'User preference: email validation using jQuery',
-       'userrights'          => 'User rights',
-       'group'               => 'Groups',
-       'group-member'        => '',
-       'grouppage'           => '',
-       'right'               => 'Rights',
-       'action'              => 'Associated actions - in the sentence "You do not have permission to X"',
-       'rightslog'           => 'User rights log',
-       'recentchanges'       => 'Recent changes',
+       'toggles' => 'User preference toggles',
+       'underline' => '',
+       'editfont' => 'Font style option in Special:Preferences',
+       'dates' => 'Dates',
+       'categorypages' => 'Categories related messages',
+       'mainpage' => '',
+       'miscellaneous1' => '',
+       'cologneblue' => 'Cologne Blue skin',
+       'vector' => 'Vector skin',
+       'miscellaneous2' => '',
+       'links' => 'All link text and link target definitions of links into project namespace ' .
+               'that get used by other message strings, with the exception of user group pages (see grouppage).',
+       'badaccess' => '',
+       'versionrequired' => '',
+       'miscellaneous3' => '',
+       'nstab' => "Short words for each namespace, by default used in the namespace tab in monobook",
+       'main' => 'Main script and global functions',
+       'errors' => 'General errors',
+       'virus' => 'Virus scanner',
+       'login' => 'Login and logout pages',
+       'mail' => 'Email sending',
+       'passwordstrength' => 'JavaScript password checks',
+       'resetpass' => 'Change password dialog',
+       'passwordreset' => 'Special:PasswordReset',
+       'changeemail' => 'Special:ChangeEmail',
+       'resettokens' => 'Special:ResetTokens',
+       'toolbar' => 'Edit page toolbar',
+       'edit' => 'Edit pages',
+       'parserwarnings' => 'Parser/template warnings',
+       'contentmodels' => 'Content models',
+       'undo' => '"Undo" feature',
+       'cantcreateaccount' => 'Account creation failure',
+       'history' => 'History pages',
+       'history-feed' => 'Revision feed',
+       'revdelete' => 'Revision deletion',
+       'suppression' => 'Suppression log',
+       'mergehistory' => 'History merging',
+       'mergelog' => 'Merge log',
+       'diffs' => 'Diffs',
+       'search' => 'Search results',
+       'opensearch' => 'OpenSearch description',
+       'preferences' => 'Preferences page',
+       'preferences-email' => 'User preference: email validation using jQuery',
+       'userrights' => 'User rights',
+       'group' => 'Groups',
+       'group-member' => '',
+       'grouppage' => '',
+       'right' => 'Rights',
+       'action' => 'Associated actions - in the sentence "You do not have permission to X"',
+       'rightslog' => 'User rights log',
+       'recentchanges' => 'Recent changes',
        'recentchangeslinked' => 'Recent changes linked',
-       'upload'              => 'Upload',
-       'zip'                 => 'ZipDirectoryReader',
-       'upload-errors'       => '',
-       'filebackend-errors'  => 'File backend',
-       'filejournal-errors'  => 'File journal errors',
-       'lockmanager-errors'  => 'Lock manager',
-       'uploadstash'         => 'Special:UploadStash',
-       'img-auth'            => 'img_auth script messages',
-       'http-errors'         => 'HTTP errors',
-       'upload-curl-errors'  => 'Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>',
-       'licenses'            => '',
-       'filelist'            => 'Special:ListFiles',
-       'filedescription'     => 'File description page',
-       'filerevert'          => 'File reversion',
-       'filedelete'          => 'File deletion',
-       'mimesearch'          => 'MIME search',
-       'unwatchedpages'      => 'Unwatched pages',
-       'listredirects'       => 'List redirects',
-       'unusedtemplates'     => 'Unused templates',
-       'randompage'          => 'Random page',
-       'randomincategory'    => 'Random page in category',
-       'randomredirect'      => 'Random redirect',
-       'statistics'          => 'Statistics',
-       'pageswithprop'       => '',
-       'doubleredirects'     => '',
-       'brokenredirects'     => '',
-       'withoutinterwiki'    => '',
-       'fewestrevisions'     => '',
-       'specialpages'        => 'Miscellaneous special pages',
-       'booksources'         => 'Book sources',
-       'magicwords'          => 'Magic words',
-       'logpages'            => 'Special:Log',
-       'allpages'            => 'Special:AllPages',
-       'categories'          => 'Special:Categories',
-       'deletedcontribs'     => 'Special:DeletedContributions',
-       'linksearch'          => 'Special:LinkSearch',
-       'listusers'           => 'Special:ListUsers',
-       'activeusers'         => 'Special:ActiveUsers',
-       'newuserlog'          => 'Special:Log/newusers',
-       'listgrouprights'     => 'Special:ListGroupRights',
-       'emailuser'           => 'Email user',
-       'usermessage'         => 'User Messenger',
-       'watchlist'           => 'Watchlist',
-       'watching'            => 'Displayed when you click the "watch" button and it is in the process of watching',
-       'enotif'              => '',
-       'delete'              => 'Delete',
-       'rollback'            => 'Rollback',
-       'edittokens'          => 'Edit tokens',
-       'protect'             => 'Protect',
-       'restrictions'        => 'Restrictions (nouns)',
-       'restriction-levels'  => 'Restriction levels',
-       'undelete'            => 'Undelete',
-       'nsform'              => 'Namespace form on various pages',
-       'contributions'       => 'Contributions',
-       'sp-contributions'    => '',
-       'whatlinkshere'       => 'What links here',
-       'block'               => 'Block/unblock',
-       'developertools'      => 'Developer tools',
-       'movepage'            => 'Move page',
-       'export'              => 'Export',
-       'allmessages'         => 'Namespace 8 related',
-       'thumbnails'          => 'Thumbnails',
-       'import'              => 'Special:Import',
-       'importlog'           => 'Import log',
-       'javaccripttest'      => 'JavaScriptTest',
-       'accesskeys'          => 'Keyboard access keys for power users',
-       'tooltips'            => 'Tooltip help for the actions',
-       'stylesheets'         => 'Stylesheets',
-       'scripts'             => 'Scripts',
-       'metadata_cc'         => 'Metadata',
-       'attribution'         => 'Attribution',
-       'spamprotection'      => 'Spam protection',
-       'info'                => 'Info page',
-       'skin'                => 'Skin names',
-       'patrolling'          => 'Patrolling',
-       'patrol-log'          => 'Patrol log',
-       'imagedeletion'       => 'Image deletion',
-       'browsediffs'         => 'Browsing diffs',
-       'newfiles'            => 'Special:NewFiles',
-       'video-info'          => 'Video information, used by Language::formatTimePeriod() to format lengths in the above messages',
-       'human-timestamps'    => 'Human-readable timestamps',
-       'badimagelist'        => 'Bad image list',
-       'variantname-zh'      => "Short names for language variants used for language conversion links.
+       'upload' => 'Upload',
+       'zip' => 'ZipDirectoryReader',
+       'upload-errors' => '',
+       'filebackend-errors' => 'File backend',
+       'filejournal-errors' => 'File journal errors',
+       'lockmanager-errors' => 'Lock manager',
+       'uploadstash' => 'Special:UploadStash',
+       'img-auth' => 'img_auth script messages',
+       'http-errors' => 'HTTP errors',
+       'upload-curl-errors' => 'Some likely curl errors. More could be added from ' .
+               '<http://curl.haxx.se/libcurl/c/libcurl-errors.html>',
+       'licenses' => '',
+       'filelist' => 'Special:ListFiles',
+       'filedescription' => 'File description page',
+       'filerevert' => 'File reversion',
+       'filedelete' => 'File deletion',
+       'mimesearch' => 'MIME search',
+       'unwatchedpages' => 'Unwatched pages',
+       'listredirects' => 'List redirects',
+       'unusedtemplates' => 'Unused templates',
+       'randompage' => 'Random page',
+       'randomincategory' => 'Random page in category',
+       'randomredirect' => 'Random redirect',
+       'statistics' => 'Statistics',
+       'pageswithprop' => '',
+       'doubleredirects' => '',
+       'brokenredirects' => '',
+       'withoutinterwiki' => '',
+       'fewestrevisions' => '',
+       'specialpages' => 'Miscellaneous special pages',
+       'booksources' => 'Book sources',
+       'magicwords' => 'Magic words',
+       'logpages' => 'Special:Log',
+       'allpages' => 'Special:AllPages',
+       'categories' => 'Special:Categories',
+       'deletedcontribs' => 'Special:DeletedContributions',
+       'linksearch' => 'Special:LinkSearch',
+       'listusers' => 'Special:ListUsers',
+       'activeusers' => 'Special:ActiveUsers',
+       'newuserlog' => 'Special:Log/newusers',
+       'listgrouprights' => 'Special:ListGroupRights',
+       'emailuser' => 'Email user',
+       'usermessage' => 'User Messenger',
+       'watchlist' => 'Watchlist',
+       'watching' => 'Displayed when you click the "watch" button and it is in the process of watching',
+       'enotif' => '',
+       'delete' => 'Delete',
+       'rollback' => 'Rollback',
+       'edittokens' => 'Edit tokens',
+       'protect' => 'Protect',
+       'restrictions' => 'Restrictions (nouns)',
+       'restriction-levels' => 'Restriction levels',
+       'undelete' => 'Undelete',
+       'nsform' => 'Namespace form on various pages',
+       'contributions' => 'Contributions',
+       'sp-contributions' => '',
+       'whatlinkshere' => 'What links here',
+       'block' => 'Block/unblock',
+       'developertools' => 'Developer tools',
+       'movepage' => 'Move page',
+       'export' => 'Export',
+       'allmessages' => 'Namespace 8 related',
+       'thumbnails' => 'Thumbnails',
+       'import' => 'Special:Import',
+       'importlog' => 'Import log',
+       'javaccripttest' => 'JavaScriptTest',
+       'accesskeys' => 'Keyboard access keys for power users',
+       'tooltips' => 'Tooltip help for the actions',
+       'stylesheets' => 'Stylesheets',
+       'scripts' => 'Scripts',
+       'metadata_cc' => 'Metadata',
+       'attribution' => 'Attribution',
+       'spamprotection' => 'Spam protection',
+       'info' => 'Info page',
+       'skin' => 'Skin names',
+       'patrolling' => 'Patrolling',
+       'patrol-log' => 'Patrol log',
+       'imagedeletion' => 'Image deletion',
+       'browsediffs' => 'Browsing diffs',
+       'newfiles' => 'Special:NewFiles',
+       'video-info' => 'Video information, used by Language::formatTimePeriod() to ' .
+               'format lengths in the above messages',
+       'human-timestamps' => 'Human-readable timestamps',
+       'badimagelist' => 'Bad image list',
+       'variantname-zh' => "Short names for language variants used for language conversion links.
 Variants for Chinese language",
-       'variantname-gan'      => 'Variants for Gan language',
-       'variantname-sr'      => 'Variants for Serbian language',
-       'variantname-kk'      => 'Variants for Kazakh language',
-       'variantname-ku'      => 'Variants for Kurdish language',
-       'variantname-tg'      => 'Variants for Tajiki language',
-       'variantname-iu'      => 'Variants for Inuktitut language',
-       'variantname-shi'     => 'Variants for Tachelhit language',
-       'media-info'          => 'Media information',
-       'metadata'            => 'Metadata',
-       'exif'                           => 'Exif tags',
-       'exif-values'                    => 'Make & model, can be wikified in order to link to the camera and model name',
-       'exif-compression'               => 'Exif attributes',
-       'exif-copyrighted'               => '',
-       'exif-unknowndate'               => '',
+       'variantname-gan' => 'Variants for Gan language',
+       'variantname-sr' => 'Variants for Serbian language',
+       'variantname-kk' => 'Variants for Kazakh language',
+       'variantname-ku' => 'Variants for Kurdish language',
+       'variantname-tg' => 'Variants for Tajiki language',
+       'variantname-iu' => 'Variants for Inuktitut language',
+       'variantname-shi' => 'Variants for Tachelhit language',
+       'media-info' => 'Media information',
+       'metadata' => 'Metadata',
+       'exif' => 'Exif tags',
+       'exif-values' => 'Make & model, can be wikified in order to link to the camera and model name',
+       'exif-compression' => 'Exif attributes',
+       'exif-copyrighted' => '',
+       'exif-unknowndate' => '',
        'exif-photometricinterpretation' => '',
-       'exif-orientation'               => '',
-       'exif-planarconfiguration'       => '',
-       'exif-xyresolution'              => '',
-       'exif-colorspace'                => '',
-       'exif-componentsconfiguration'   => '',
-       'exif-exposureprogram'           => '',
-       'exif-subjectdistance-value'     => '',
-       'exif-meteringmode'              => '',
-       'exif-lightsource'               => '',
-       'exif-flash'                     => 'Flash modes',
-       'exif-focalplaneresolutionunit'  => '',
-       'exif-sensingmethod'             => '',
-       'exif-filesource'                => '',
-       'exif-scenetype'                 => '',
-       'exif-customrendered'            => '',
-       'exif-exposuremode'              => '',
-       'exif-whitebalance'              => '',
-       'exif-scenecapturetype'          => '',
-       'exif-gaincontrol'               => '',
-       'exif-contrast'                  => '',
-       'exif-saturation'                => '',
-       'exif-sharpness'                 => '',
-       'exif-subjectdistancerange'      => '',
-       'exif-gpslatitude'               => 'Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef',
-       'exif-gpslongitude'              => 'Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef',
-       'exif-altituderef'               => 'Pseudotags used for GPSAltitudeRef',
-       'exif-gpsstatus'                 => '',
-       'exif-gpsmeasuremode'            => '',
-       'exif-gpsspeed'                  => 'Pseudotags used for GPSSpeedRef',
-       'exif-gpsdestdistanceref'        => 'Pseudotags used for GPSDestDistanceRef',
-       'exif-gdop'                      => '',
-       'exif-objectcycle'               => '',
-       'exif-gpsdirection'              => 'Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef',
-       'exif-ycbcrpositioning'          => '',
-       'exif-dc'                        => '',
-       'exif-rating'                    => '',
-       'exif-isospeedratings'           => '',
-       'exif-maxaperturevalue'          => '',
-       'exif-iimcategory'               => '',
-       'exif-urgency'                   => '',
-       'edit-externally'       => 'External editor support',
-       'all'                   => "'all' in various places, this might be different for inflected languages",
-       'confirmemail'          => 'Email address confirmation',
-       'scarytransclusion'     => 'Scary transclusion',
-       'deleteconflict'        => 'Delete conflict',
-       'unit-pixel'            => '',
-       'purge'                 => 'action=purge',
-       'watch-unwatch'         => 'action=watch/unwatch',
-       'separators'            => 'Separators for various lists, etc.',
-       'imgmulti'              => 'Multipage image navigation',
-       'tablepager'            => 'Table pager',
-       'autosumm'              => 'Auto-summaries',
-       'autoblock_whitelist'   => 'Autoblock whitelist',
-       'sizeunits'             => 'Size units',
-       'bitrateunits'          => 'Bitrate units',
-       'livepreview'           => 'Live preview',
-       'lagwarning'            => 'Friendlier slave lag warnings',
-       'watchlisteditor'       => 'Watchlist editor',
-       'watchlisttools'        => 'Watchlist editing tools',
-       'iranian-dates'         => 'Iranian month names',
-       'hijri-dates'           => 'Hijri month names',
-       'hebrew-dates'          => 'Hebrew month names',
-       'signatures'            => 'Signatures',
-       'CoreParserFunctions'   => 'Core parser functions',
-       'version'               => 'Special:Version',
-       'redirect'              => 'Special:Redirect',
-       'fileduplicatesearch'   => 'Special:FileDuplicateSearch',
-       'special-specialpages'  => 'Special:SpecialPages',
-       'special-blank'         => 'Special:BlankPage',
-       'external_images'       => 'External image whitelist',
-       'special-tags'          => 'Special:Tags',
-       'comparepages'          => 'Special:ComparePages',
-       'db-error-messages'     => 'Database error messages',
-       'html-forms'            => 'HTML forms',
-       'sqlite'                => 'SQLite database support',
-       'logging'               => 'New logging system',
-       'logging-irc'           => 'For IRC, see bug 34508. Do not change',
-       'feedback'              => 'Feedback',
-       'searchsuggestions'     => 'Search suggestions',
-       'apierrors'             => 'API errors',
-       'duration'              => 'Durations',
-       'cachedspecial'         => 'SpecialCachedPage',
-       'rotation'              => 'Image rotation',
-       'limitreport'           => 'Limit report',
+       'exif-orientation' => '',
+       'exif-planarconfiguration' => '',
+       'exif-xyresolution' => '',
+       'exif-colorspace' => '',
+       'exif-componentsconfiguration' => '',
+       'exif-exposureprogram' => '',
+       'exif-subjectdistance-value' => '',
+       'exif-meteringmode' => '',
+       'exif-lightsource' => '',
+       'exif-flash' => 'Flash modes',
+       'exif-focalplaneresolutionunit' => '',
+       'exif-sensingmethod' => '',
+       'exif-filesource' => '',
+       'exif-scenetype' => '',
+       'exif-customrendered' => '',
+       'exif-exposuremode' => '',
+       'exif-whitebalance' => '',
+       'exif-scenecapturetype' => '',
+       'exif-gaincontrol' => '',
+       'exif-contrast' => '',
+       'exif-saturation' => '',
+       'exif-sharpness' => '',
+       'exif-subjectdistancerange' => '',
+       'exif-gpslatitude' => 'Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef',
+       'exif-gpslongitude' => 'Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef',
+       'exif-altituderef' => 'Pseudotags used for GPSAltitudeRef',
+       'exif-gpsstatus' => '',
+       'exif-gpsmeasuremode' => '',
+       'exif-gpsspeed' => 'Pseudotags used for GPSSpeedRef',
+       'exif-gpsdestdistanceref' => 'Pseudotags used for GPSDestDistanceRef',
+       'exif-gdop' => '',
+       'exif-objectcycle' => '',
+       'exif-gpsdirection' => 'Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef',
+       'exif-ycbcrpositioning' => '',
+       'exif-dc' => '',
+       'exif-rating' => '',
+       'exif-isospeedratings' => '',
+       'exif-maxaperturevalue' => '',
+       'exif-iimcategory' => '',
+       'exif-urgency' => '',
+       'edit-externally' => 'External editor support',
+       'all' => "'all' in various places, this might be different for inflected languages",
+       'confirmemail' => 'Email address confirmation',
+       'scarytransclusion' => 'Scary transclusion',
+       'deleteconflict' => 'Delete conflict',
+       'unit-pixel' => '',
+       'purge' => 'action=purge',
+       'watch-unwatch' => 'action=watch/unwatch',
+       'separators' => 'Separators for various lists, etc.',
+       'imgmulti' => 'Multipage image navigation',
+       'tablepager' => 'Table pager',
+       'autosumm' => 'Auto-summaries',
+       'autoblock_whitelist' => 'Autoblock whitelist',
+       'sizeunits' => 'Size units',
+       'bitrateunits' => 'Bitrate units',
+       'livepreview' => 'Live preview',
+       'lagwarning' => 'Friendlier slave lag warnings',
+       'watchlisteditor' => 'Watchlist editor',
+       'watchlisttools' => 'Watchlist editing tools',
+       'iranian-dates' => 'Iranian month names',
+       'hijri-dates' => 'Hijri month names',
+       'hebrew-dates' => 'Hebrew month names',
+       'signatures' => 'Signatures',
+       'CoreParserFunctions' => 'Core parser functions',
+       'version' => 'Special:Version',
+       'redirect' => 'Special:Redirect',
+       'fileduplicatesearch' => 'Special:FileDuplicateSearch',
+       'special-specialpages' => 'Special:SpecialPages',
+       'special-blank' => 'Special:BlankPage',
+       'external_images' => 'External image whitelist',
+       'special-tags' => 'Special:Tags',
+       'comparepages' => 'Special:ComparePages',
+       'db-error-messages' => 'Database error messages',
+       'html-forms' => 'HTML forms',
+       'sqlite' => 'SQLite database support',
+       'logging' => 'New logging system',
+       'logging-irc' => 'For IRC, see bug 34508. Do not change',
+       'feedback' => 'Feedback',
+       'searchsuggestions' => 'Search suggestions',
+       'apierrors' => 'API errors',
+       'duration' => 'Durations',
+       'cachedspecial' => 'SpecialCachedPage',
+       'rotation' => 'Image rotation',
+       'limitreport' => 'Limit report',
+       'expandtemplates' => 'Special:ExpandTemplates'
 );
index 66948ae..6b506b8 100644 (file)
@@ -38,13 +38,22 @@ require_once 'writeMessagesArray.inc';
  * @param $dupeMsgSource string The source file intended to remove from the array.
  * @param $messagesFolder String: path to a folder to store the MediaWiki messages.
  */
-function rebuildLanguage( $languages, $code, $write, $listUnknown, $removeUnknown, $removeDupes, $dupeMsgSource, $messagesFolder ) {
+function rebuildLanguage( $languages, $code, $write, $listUnknown, $removeUnknown,
+       $removeDupes, $dupeMsgSource, $messagesFolder
+) {
        $messages = $languages->getMessages( $code );
        $messages = $messages['all'];
        if ( $removeDupes ) {
                $messages = removeDupes( $messages, $dupeMsgSource );
        }
-       MessageWriter::writeMessagesToFile( $messages, $code, $write, $listUnknown, $removeUnknown, $messagesFolder );
+       MessageWriter::writeMessagesToFile(
+               $messages,
+               $code,
+               $write,
+               $listUnknown,
+               $removeUnknown,
+               $messagesFolder
+       );
 }
 
 /**
@@ -71,15 +80,18 @@ function removeDupes( $oldMsgArray, $dupeMsgSource ) {
                        unset( $newMsgArray[$key] );
                }
        }
+
        return $newMsgArray;
 }
 
 # Show help
 if ( isset( $options['help'] ) ) {
        echo <<<TEXT
-Run this script to rewrite the messages array in the files languages/messages/MessagesXX.php.
+Run this script to rewrite the messages array in the files
+languages/messages/MessagesXX.php.
 Parameters:
-       * lang: Language code (default: the installation default language). You can also specify "all" to check all the languages.
+       * lang: Language code (default: the installation default language).
+         You can also specify "all" to check all the languages.
        * help: Show this help.
 Options:
        * dry-run: Do not write the array to the file.
@@ -114,13 +126,31 @@ $wgRemoveDuplicateMessages = isset( $options['remove-duplicates'] );
 $messagesFolder = isset( $options['messages-folder'] ) ? $options['messages-folder'] : false;
 
 # Get language objects
-$languages = new languages();
+$languages = new Languages();
 
 # Write all the language
 if ( $wgCode == 'all' ) {
        foreach ( $languages->getLanguages() as $languageCode ) {
-               rebuildLanguage( $languages, $languageCode, $wgWriteToFile, $wgListUnknownMessages, $wgRemoveUnknownMessages, $wgRemoveDuplicateMessages, $wgDupeMessageSource, $messagesFolder );
+               rebuildLanguage(
+                       $languages,
+                       $languageCode,
+                       $wgWriteToFile,
+                       $wgListUnknownMessages,
+                       $wgRemoveUnknownMessages,
+                       $wgRemoveDuplicateMessages,
+                       $wgDupeMessageSource,
+                       $messagesFolder
+               );
        }
 } else {
-       rebuildLanguage( $languages, $wgCode, $wgWriteToFile, $wgListUnknownMessages, $wgRemoveUnknownMessages, $wgRemoveDuplicateMessages, $wgDupeMessageSource, $messagesFolder );
+       rebuildLanguage(
+               $languages,
+               $wgCode,
+               $wgWriteToFile,
+               $wgListUnknownMessages,
+               $wgRemoveUnknownMessages,
+               $wgRemoveDuplicateMessages,
+               $wgDupeMessageSource,
+               $messagesFolder
+       );
 }
index 61b84a0..6a538e6 100644 (file)
@@ -32,7 +32,6 @@ require_once __DIR__ . '/../commandLine.inc';
 require_once 'languages.inc';
 require_once __DIR__ . '/StatOutputs.php';
 
-
 if ( isset( $options['help'] ) ) {
        showUsage();
 }
@@ -57,25 +56,23 @@ TEXT;
        exit( 1 );
 }
 
-
-
 # Select an output engine
 switch ( $options['output'] ) {
        case 'wiki':
-               $output = new wikiStatsOutput();
+               $output = new WikiStatsOutput();
                break;
        case 'text':
-               $output = new textStatsOutput();
+               $output = new TextStatsOutput();
                break;
        case 'csv':
-               $output = new csvStatsOutput();
+               $output = new CsvStatsOutput();
                break;
        default:
                showUsage();
 }
 
 # Languages
-$wgLanguages = new languages();
+$wgLanguages = new Languages();
 
 # Header
 $output->heading();
@@ -97,7 +94,8 @@ $wgRequiredMessagesNumber = count( $wgGeneralMessages['required'] );
 foreach ( $wgLanguages->getLanguages() as $code ) {
        # Don't check English, RTL English or dummy language codes
        if ( $code == 'en' || $code == 'enRTL' || ( is_array( $wgDummyLanguageCodes ) &&
-               isset( $wgDummyLanguageCodes[$code] ) ) ) {
+                       isset( $wgDummyLanguageCodes[$code] ) )
+       ) {
                continue;
        }
 
@@ -107,16 +105,33 @@ foreach ( $wgLanguages->getLanguages() as $code ) {
        $messages = $wgLanguages->getMessages( $code );
        $messagesNumber = count( $messages['translated'] );
        $requiredMessagesNumber = count( $messages['required'] );
-       $requiredMessagesPercent = $output->formatPercent( $requiredMessagesNumber, $wgRequiredMessagesNumber );
+       $requiredMessagesPercent = $output->formatPercent(
+               $requiredMessagesNumber,
+               $wgRequiredMessagesNumber
+       );
        $obsoleteMessagesNumber = count( $messages['obsolete'] );
-       $obsoleteMessagesPercent = $output->formatPercent( $obsoleteMessagesNumber, $messagesNumber, true );
+       $obsoleteMessagesPercent = $output->formatPercent(
+               $obsoleteMessagesNumber,
+               $messagesNumber,
+               true
+       );
        $messagesWithMismatchVariables = $wgLanguages->getMessagesWithMismatchVariables( $code );
        $emptyMessages = $wgLanguages->getEmptyMessages( $code );
        $messagesWithWhitespace = $wgLanguages->getMessagesWithWhitespace( $code );
        $nonXHTMLMessages = $wgLanguages->getNonXHTMLMessages( $code );
        $messagesWithWrongChars = $wgLanguages->getMessagesWithWrongChars( $code );
-       $problematicMessagesNumber = count( array_unique( array_merge( $messagesWithMismatchVariables, $emptyMessages, $messagesWithWhitespace, $nonXHTMLMessages, $messagesWithWrongChars ) ) );
-       $problematicMessagesPercent = $output->formatPercent( $problematicMessagesNumber, $messagesNumber, true );
+       $problematicMessagesNumber = count( array_unique( array_merge(
+               $messagesWithMismatchVariables,
+               $emptyMessages,
+               $messagesWithWhitespace,
+               $nonXHTMLMessages,
+               $messagesWithWrongChars
+       ) ) );
+       $problematicMessagesPercent = $output->formatPercent(
+               $problematicMessagesNumber,
+               $messagesNumber,
+               true
+       );
 
        # Output them
        $output->blockstart();
index 63d9b84..f1b4079 100644 (file)
@@ -60,5 +60,6 @@ function getVars( $filename ) {
        require $filename;
        $vars = get_defined_vars();
        unset( $vars['filename'] );
+
        return $vars;
 }
index fc0da3f..7c880b2 100644 (file)
  * @ingroup MaintenanceLanguage
  */
 class MessageWriter {
-       static $optionalComment = 'only translate this message to other languages if you have to change it';
-       static $ignoredComment = "do not translate or duplicate this message to other languages";
+       protected static $optionalComment =
+               'only translate this message to other languages if you have to change it';
+       protected static $ignoredComment = "do not translate or duplicate this message to other languages";
 
-       static $messageStructure;
-       static $blockComments;
-       static $ignoredMessages;
-       static $optionalMessages;
+       protected static $messageStructure;
+       protected static $blockComments;
+       protected static $ignoredMessages;
+       protected static $optionalMessages;
 
        /**
         * Write a messages array as a PHP text and write it to the messages file.
@@ -41,9 +42,12 @@ class MessageWriter {
         * @param $write Boolean: write to the messages file?
         * @param $listUnknown Boolean: list the unknown messages?
         * @param $removeUnknown Boolean: whether to remove unkown messages
-        * @param $messagesFolder String: path to a folder to store the MediaWiki messages. Defaults to the current install.
+        * @param $messagesFolder String: path to a folder to store the MediaWiki messages.
+        *        Defaults to the current install.
         */
-       public static function writeMessagesToFile( $messages, $code, $write, $listUnknown, $removeUnknown, $messagesFolder = false ) {
+       public static function writeMessagesToFile( $messages, $code, $write, $listUnknown,
+               $removeUnknown, $messagesFolder = false
+       ) {
                # Rewrite the messages array
                $messages = self::writeMessagesArray( $messages, $code == 'en', false, $removeUnknown );
                $messagesText = $messages[0];
@@ -76,14 +80,20 @@ $messages = array(
                                        file_put_contents( $filename, $new );
                                        echo "Generated and wrote messages for language $code.\n";
                                } else {
-                                       echo "Generated messages for language $code. Please run the script again (without the parameter \"dry-run\") to write the array to the file.\n";
+                                       echo "Generated messages for language $code.\n" .
+                                               "Please run the script again (without the parameter \"dry-run\") " .
+                                               "to write the array to the file.\n";
                                }
                        }
-                       if ( $listUnknown && isset( $sortedMessages['unknown'] ) && !empty( $sortedMessages['unknown'] ) ) {
+                       if ( $listUnknown && isset( $sortedMessages['unknown'] ) &&
+                               !empty( $sortedMessages['unknown'] )
+                       ) {
                                if ( $removeUnknown ) {
-                                       echo "\nThe following " . count( $sortedMessages['unknown'] ) . " unknown messages have been removed:\n";
+                                       echo "\nThe following " . count( $sortedMessages['unknown'] ) .
+                                               " unknown messages have been removed:\n";
                                } else {
-                                       echo "\nThere are " . count( $sortedMessages['unknown'] ) . " unknown messages, please check them:\n";
+                                       echo "\nThere are " . count( $sortedMessages['unknown'] ) .
+                                               " unknown messages, please check them:\n";
                                }
                                foreach ( $sortedMessages['unknown'] as $key => $value ) {
                                        echo "* " . $key . "\n";
@@ -106,7 +116,9 @@ $messages = array(
         *
         * @return Array of the PHP text and the sorted messages array.
         */
-       public static function writeMessagesArray( $messages, $ignoredComments = false, $prefix = false, $removeUnknown = false ) {
+       public static function writeMessagesArray( $messages, $ignoredComments = false,
+               $prefix = false, $removeUnknown = false
+       ) {
                # Load messages
                $dir = $prefix ? $prefix : __DIR__;
 
@@ -162,6 +174,7 @@ $messages = array(
                }
                $messagesText .= ");
 ";
+
                return array( $messagesText, $sortedMessages );
        }
 
@@ -247,12 +260,22 @@ $blockComment
                        if ( strpos( $value, $single ) === false ) {
                                # Nothing ugly, just use '
                                $blockText .= $single . $value . $single;
-                       } elseif ( strpos( $value, $double ) === false && !preg_match( '/\$[a-zA-Z_\x7f-\xff]/', $value ) ) {
+                       } elseif ( strpos( $value, $double ) === false &&
+                               !preg_match( '/\$[a-zA-Z_\x7f-\xff]/', $value )
+                       ) {
                                # No "-quotes, no variables that need quoting, use "
                                $blockText .= $double . $value . $double;
                        } else {
                                # Something needs quoting, pick the quote which causes less quoting
-                               $quote = substr_count( $value, $double ) + substr_count( $value, '$' ) >= substr_count( $value, $single ) ? $single : $double;
+
+                               if ( substr_count( $value, $double ) + substr_count( $value, '$' ) >=
+                                       substr_count( $value, $single )
+                               ) {
+                                       $quote = $single;
+                               } else {
+                                       $quote = $double;
+                               }
+
                                if ( $quote === $double ) {
                                        $extra = '$';
                                } else {
diff --git a/maintenance/language/zhtable/trad2simp_supp_unset.manual b/maintenance/language/zhtable/trad2simp_supp_unset.manual
deleted file mode 100644 (file)
index e69de29..0000000
index 01fbac7..d98654e 100644 (file)
@@ -149,7 +149,7 @@ class LockServerDaemon {
                $socketArray->addSocket( $this->sock ); // add listening socket
                do {
                        list( $read, $write ) = $socketArray->socketsForSelect();
-                       if ( socket_select( $read, $write, $except = NULL, NULL ) < 1 ) {
+                       if ( socket_select( $read, $write, $except = null, null ) < 1 ) {
                                continue; // wait
                        }
                        // Check if there is a client trying to connect...
index e918337..5bf04c6 100644 (file)
@@ -148,7 +148,7 @@ foreach ( $mmfl['setupFiles'] as $fileName ) {
                fwrite( STDERR, "Loading data from $fileName\n" );
        }
        // Include the extension to update $wgExtensionMessagesFiles
-       if ( !( include_once( $fileName ) ) ) {
+       if ( !( include_once $fileName ) ) {
                fwrite( STDERR, "Unable to read $fileName\n" );
                exit( 1 );
        }
index 34e6428..5171b17 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  * @author Tim Starling
  *
- * USAGE: php moveBatch.php [-u <user>] [-r <reason>] [-i <interval>] [listfile]
+ * USAGE: php moveBatch.php [-u <user>] [-r <reason>] [-i <interval>] [-noredirects] [listfile]
  *
  * [listfile] - file with two titles per line, separated with pipe characters;
  * the first title is the source, the second is the destination.
@@ -29,6 +29,7 @@
  * <user> - username to perform moves as
  * <reason> - reason to be given for moves
  * <interval> - number of seconds to sleep after each move
+ * <noredirects> - suppress creation of redirects
  *
  * This will print out error codes from Title::moveTo() if something goes wrong,
  * e.g. immobile_namespace for namespaces which can't be moved
@@ -48,6 +49,7 @@ class MoveBatch extends Maintenance {
                $this->addOption( 'u', "User to perform move", false, true );
                $this->addOption( 'r', "Reason to move page", false, true );
                $this->addOption( 'i', "Interval to sleep between moves" );
+               $this->addOption( 'noredirects', "Suppress creation of redirects" );
                $this->addArg( 'listfile', 'List of pages to move, newline delimited', false );
        }
 
@@ -62,6 +64,7 @@ class MoveBatch extends Maintenance {
                $user = $this->getOption( 'u', 'Move page script' );
                $reason = $this->getOption( 'r', '' );
                $interval = $this->getOption( 'i', 0 );
+               $noredirects = $this->getOption( 'noredirects', false );
                if ( $this->hasArg() ) {
                        $file = fopen( $this->getArg(), 'r' );
                } else {
@@ -96,10 +99,9 @@ class MoveBatch extends Maintenance {
                                continue;
                        }
 
-
                        $this->output( $source->getPrefixedText() . ' --> ' . $dest->getPrefixedText() );
                        $dbw->begin( __METHOD__ );
-                       $err = $source->moveTo( $dest, false, $reason );
+                       $err = $source->moveTo( $dest, false, $reason, !$noredirects );
                        if ( $err !== true ) {
                                $msg = array_shift( $err[0] );
                                $this->output( "\nFAILED: " . wfMessage( $msg, $err[0] )->text() );
index 7356c38..8a565d5 100644 (file)
@@ -674,13 +674,13 @@ CREATE UNIQUE INDEX /*$wgDBprefix*/qcc_titletwo ON /*$wgDBprefix*/querycachetwo(
 
 --- Used for storing page restrictions (i.e. protection levels)
 CREATE TABLE /*$wgDBprefix*/page_restrictions (
+   pr_id INT UNIQUE IDENTITY,
    pr_page INT NOT NULL REFERENCES /*$wgDBprefix*/page(page_id) ON DELETE CASCADE,
    pr_type NVARCHAR(200) NOT NULL,
    pr_level NVARCHAR(200) NOT NULL,
    pr_cascade SMALLINT NOT NULL,
    pr_user INT NULL,
    pr_expiry DATETIME NULL,
-   pr_id INT UNIQUE IDENTITY,
    CONSTRAINT /*$wgDBprefix*/pr_pagetype PRIMARY KEY(pr_page,pr_type),
 );
 CREATE INDEX /*$wgDBprefix*/pr_page      ON /*$wgDBprefix*/page_restrictions(pr_page);
index 64c2848..cd99f7c 100644 (file)
@@ -67,7 +67,7 @@ CREATE TABLE &mw_prefix.msg_resource (
   mr_lang varchar2(32) NOT NULL,
   mr_blob BLOB NOT NULL,
   mr_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL
-) ;
+);
 CREATE UNIQUE INDEX &mw_prefix.msg_resource_u01 ON &mw_prefix.msg_resource (mr_resource, mr_lang);
 
 ALTER TABLE &mw_prefix.oldimage MODIFY oi_name DEFAULT 0;
index 607d7b9..2395bc5 100644 (file)
@@ -663,7 +663,7 @@ CREATE TABLE &mw_prefix.msg_resource (
   mr_lang varchar2(32) NOT NULL,
   mr_blob BLOB NOT NULL,
   mr_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL
-) ;
+);
 CREATE UNIQUE INDEX &mw_prefix.msg_resource_u01 ON &mw_prefix.msg_resource (mr_resource, mr_lang);
 
 CREATE TABLE &mw_prefix.msg_resource_links (
index 8f170ab..34837e1 100644 (file)
@@ -1,7 +1,6 @@
 #!/usr/bin/perl
 
 ## Convert data from a MySQL mediawiki database into a Postgres mediawiki database
-## svn: $Id$
 
 ## NOTE: It is probably easier to dump your wiki using maintenance/dumpBackup.php
 ## and then import it with maintenance/importDump.php
@@ -181,7 +180,7 @@ $MYSQLSOCKET and $conninfo .= "\n--   socket    $MYSQLSOCKET";
 print qq{
 -- Dump of MySQL Mediawiki tables for import into a Postgres Mediawiki schema
 -- Performed by the program: $0
--- Version: $VERSION (subversion }.q{$LastChangedRevision$}.qq{)
+-- Version: $VERSION
 -- Author: Greg Sabino Mullane <greg\@turnstep.com> Comments welcome
 --
 -- This file was created: $now
index 9f83ee7..91c36f2 100644 (file)
@@ -69,7 +69,9 @@ class PurgeChangedFiles extends Maintenance {
                        implode( ',', array_keys( self::$typeMappings ) ) . ',all)', false, true );
                $this->addOption( 'htcp-dest', 'HTCP announcement destination (IP:port)', false, true );
                $this->addOption( 'dry-run', 'Do not send purge requests' );
+               $this->addOption( 'sleep-per-batch', 'Milliseconds to sleep between batches', false, true );
                $this->addOption( 'verbose', 'Show more output', false, false, 'v' );
+               $this->setBatchSize( 100 );
        }
 
        public function execute() {
@@ -119,7 +121,7 @@ class PurgeChangedFiles extends Maintenance {
                        $this->mOptions['verbose'] = 1;
                }
 
-               $this->verbose( 'Purging files that were: ' . implode( ', ', $typeList ) . "\n");
+               $this->verbose( 'Purging files that were: ' . implode( ', ', $typeList ) . "\n" );
                foreach ( $typeList as $type ) {
                        $this->verbose( "Checking for {$type} files...\n" );
                        $this->purgeFromLogType( $type );
@@ -154,6 +156,7 @@ class PurgeChangedFiles extends Maintenance {
                                __METHOD__
                        );
 
+                       $bSize = 0;
                        foreach ( $res as $row ) {
                                $file = $repo->newFile( Title::makeTitle( NS_FILE, $row->log_title ) );
 
@@ -183,7 +186,7 @@ class PurgeChangedFiles extends Maintenance {
                                        // Purge items from fileachive table (rows are likely here)
                                        $this->purgeFromArchiveTable( $repo, $file );
 
-                               } else if ( $logType === 'move' ) {
+                               } elseif ( $logType === 'move' ) {
                                        // Purge the target file as well
 
                                        $params = unserialize( $row->log_params );
@@ -197,6 +200,12 @@ class PurgeChangedFiles extends Maintenance {
                                }
 
                                $this->verbose( "Purged file {$row->log_title}; {$type} @{$row->log_timestamp}.\n" );
+
+                               if ( $this->hasOption( 'sleep-per-batch' ) && ++$bSize > $this->mBatchSize ) {
+                                       $bSize = 0;
+                                       // sleep-per-batch is milliseconds, usleep wants micro seconds.
+                                       usleep( 1000 * (int)$this->getOption( 'sleep-per-batch' ) );
+                               }
                        }
                }
        }
index 7e15c09..ee3f709 100644 (file)
@@ -174,8 +174,6 @@ class ReassignEdits extends Maintenance {
                $user->load();
                return $user;
        }
-
-
 }
 
 $maintClass = "ReassignEdits";
index b7f306b..5833f8c 100644 (file)
@@ -90,7 +90,7 @@ class RebuildLocalisationCache extends Maintenance {
                if ( $this->hasOption( 'outdir' ) ) {
                        $conf['storeDirectory'] = $this->getOption( 'outdir' );
                }
-               $lc = new LocalisationCache_BulkLoad( $conf );
+               $lc = new LocalisationCacheBulkLoad( $conf );
 
                $allCodes = array_keys( Language::fetchLanguageNames( null, 'mwfile' ) );
                if ( $this->hasOption( 'lang' ) ) {
@@ -149,7 +149,7 @@ class RebuildLocalisationCache extends Maintenance {
         * Helper function to rebuild list of languages codes. Prints the code
         * for each language which is rebuilt.
         * @param $codes array List of language codes to rebuild.
-        * @param $lc LocalisationCache Instance of LocalisationCache_BulkLoad (?)
+        * @param $lc LocalisationCache Instance of LocalisationCacheBulkLoad (?)
         * @param $force bool Rebuild up-to-date languages
         * @return int Number of rebuilt languages
         */
index 315176c..b9eb809 100644 (file)
@@ -70,7 +70,6 @@ class RebuildRecentchanges extends Maintenance {
                $dbw->insertSelect( 'recentchanges', array( 'page', 'revision' ),
                        array(
                                'rc_timestamp'  => 'rev_timestamp',
-                               'rc_cur_time'   => 'rev_timestamp',
                                'rc_user'       => 'rev_user',
                                'rc_user_text'  => 'rev_user_text',
                                'rc_namespace'  => 'page_namespace',
@@ -185,7 +184,6 @@ class RebuildRecentchanges extends Maintenance {
                $dbw->insertSelect( 'recentchanges', array( 'user', "$logging LEFT JOIN $page ON (log_namespace=page_namespace AND log_title=page_title)" ),
                        array(
                                'rc_timestamp'  => 'log_timestamp',
-                               'rc_cur_time'   => 'log_timestamp',
                                'rc_user'       => 'log_user',
                                'rc_user_text'  => 'user_name',
                                'rc_namespace'  => 'log_namespace',
index 7fe5c4c..9f73e49 100644 (file)
@@ -207,6 +207,5 @@ class RefreshImageMetadata extends Maintenance {
        }
 }
 
-
 $maintClass = 'RefreshImageMetadata';
 require_once RUN_MAINTENANCE_IF_MAIN;
index 93ba24a..76340cd 100644 (file)
@@ -60,6 +60,5 @@ class BatchedQueryRunner extends Maintenance {
        }
 }
 
-
 $maintClass = "BatchedQueryRunner";
 require_once RUN_MAINTENANCE_IF_MAIN;
index cd9768d..9168d6f 100644 (file)
@@ -57,7 +57,6 @@ class ShowCacheStats extends Maintenance {
                $this->output( sprintf( "without session:   %-10d %6.2f%%\n", $noSession, $noSession / $total * 100 ) );
                $this->output( sprintf( "total:             %-10d %6.2f%%\n", $total, 100 ) );
 
-
                $this->output( "\nParser cache\n" );
                $hits = intval( $wgMemc->get( wfMemcKey( 'stats', 'pcache_hit' ) ) );
                $expired = intval( $wgMemc->get( wfMemcKey( 'stats', 'pcache_miss_expired' ) ) );
index 1a59be5..954c85d 100644 (file)
@@ -237,13 +237,13 @@ CREATE UNIQUE INDEX /*i*/iw_prefix ON /*_*/interwiki_tmp (iw_prefix);
 
 
 CREATE TABLE /*_*/page_restrictions_tmp (
+  pr_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
   pr_page int NOT NULL,
   pr_type varbinary(60) NOT NULL,
   pr_level varbinary(60) NOT NULL,
   pr_cascade tinyint NOT NULL,
   pr_user int NULL,
-  pr_expiry varbinary(14) NULL,
-  pr_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT
+  pr_expiry varbinary(14) NULL
 );
 
 CREATE UNIQUE INDEX /*i*/pr_pagetype ON /*_*/page_restrictions_tmp (pr_page,pr_type);
index 03dc113..9174d12 100644 (file)
@@ -34,7 +34,6 @@ if ( !defined( 'MEDIAWIKI' ) ) {
        $cs->check( $fix, $xml );
 }
 
-
 // ----------------------------------------------------------------------------------
 
 /**
@@ -331,7 +330,6 @@ class CheckStorage {
                }
        }
 
-
        function error( $type, $msg, $ids ) {
                if ( is_array( $ids ) && count( $ids ) == 1 ) {
                        $ids = reset( $ids );
index fdc28d9..d693986 100644 (file)
@@ -45,7 +45,6 @@ if ( isset( $options['limit'] ) ) {
 }
 $type = isset( $options['type'] ) ? $options['type'] : 'ConcatenatedGzipHistoryBlob';
 
-
 $dbr = wfGetDB( DB_SLAVE );
 $res = $dbr->select(
        array( 'page', 'revision', 'text' ),
index 7857dd9..c2df0dd 100644 (file)
@@ -24,7 +24,6 @@
 
 require __DIR__ . '/../commandLine.inc';
 
-
 if ( count( $args ) < 1 ) {
        echo "Usage: php trackBlobs.php <cluster> [... <cluster>]\n";
        echo "Adds blobs from a given ES cluster to the blob_tracking table\n";
index af01a30..18139b2 100644 (file)
@@ -1026,6 +1026,8 @@ CREATE TABLE /*_*/recentchanges (
   rc_timestamp varbinary(14) NOT NULL default '',
 
   -- This is no longer used
+  -- Field kept in database for downgrades
+  -- @todo: add drop patch with 1.24
   rc_cur_time varbinary(14) NOT NULL default '',
 
   -- As in revision
@@ -1374,6 +1376,8 @@ CREATE INDEX /*i*/qcc_titletwo ON /*_*/querycachetwo (qcc_type,qcc_namespacetwo,
 
 -- Used for storing page restrictions (i.e. protection levels)
 CREATE TABLE /*_*/page_restrictions (
+  -- Field for an ID for this restrictions row (sort-key for Special:ProtectedPages)
+  pr_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
   -- Page to apply restrictions to (Foreign Key to page).
   pr_page int NOT NULL,
   -- The protection type (edit, move, etc)
@@ -1385,9 +1389,7 @@ CREATE TABLE /*_*/page_restrictions (
   -- Field for future support of per-user restriction.
   pr_user int NULL,
   -- Field for time-limited protection.
-  pr_expiry varbinary(14) NULL,
-  -- Field for an ID for this restrictions row (sort-key for Special:ProtectedPages)
-  pr_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT
+  pr_expiry varbinary(14) NULL
 ) /*$wgDBTableOptions*/;
 
 CREATE UNIQUE INDEX /*i*/pr_pagetype ON /*_*/page_restrictions (pr_page,pr_type);
@@ -1519,7 +1521,7 @@ CREATE UNIQUE INDEX /*i*/md_module_skin ON /*_*/module_deps (md_module, md_skin)
 
 -- Holds all the sites known to the wiki.
 CREATE TABLE /*_*/sites (
--- Numeric id of the site
+  -- Numeric id of the site
   site_id                    INT UNSIGNED        NOT NULL PRIMARY KEY AUTO_INCREMENT,
 
   -- Global identifier for the site, ie 'enwiktionary'
index 5c93964..6b08480 100644 (file)
@@ -169,7 +169,7 @@ class UpdateMediaWiki extends Maintenance {
                $time2 = new MWTimestamp();
 
                $this->output( "\nDone.\n" );
-               $this->output( "\nThe job took ". $time2->diff( $time1 )->format( "%i:%S" ). "\n" );
+               $this->output( "\nThe job took " . $time2->diff( $time1 )->format( "%i:%S" ) . "\n" );
        }
 
        function afterFinalSetup() {
@@ -180,7 +180,7 @@ class UpdateMediaWiki extends Maintenance {
                # cache from $wgExtensionFunctions (bug 20471)
                $wgLocalisationCacheConf = array(
                        'class' => 'LocalisationCache',
-                       'storeClass' => 'LCStore_Null',
+                       'storeClass' => 'LCStoreNull',
                        'storeDirectory' => false,
                        'manualRecache' => false,
                );
index 51da80d..f198167 100644 (file)
@@ -49,7 +49,6 @@ class userOptions {
                }
        }
 
-
        /**
         * This is used to check options. Only needed on construction
         *
@@ -179,7 +178,6 @@ class userOptions {
                }
        }
 
-
        /** Change our users options */
        private function CHANGER() {
                $this->warn();
index 9eb5227..31714a6 100644 (file)
@@ -637,9 +637,6 @@ return array(
                        'user.tokens',
                ),
        ),
-       'mediawiki.icon' => array(
-               'styles' => 'resources/mediawiki/mediawiki.icon.css',
-       ),
        'mediawiki.debug' => array(
                'scripts' => 'resources/mediawiki/mediawiki.debug.js',
                'styles' => 'resources/mediawiki/mediawiki.debug.css',
@@ -653,14 +650,6 @@ return array(
                // must be loaded on the bottom
                'position' => 'bottom',
        ),
-       'mediawiki.inspect' => array(
-               'scripts' => 'resources/mediawiki/mediawiki.inspect.js',
-               'dependencies' => array(
-                       'jquery.byteLength',
-                       'jquery.json',
-               ),
-               'targets' => array( 'desktop', 'mobile' ),
-       ),
        'mediawiki.feedback' => array(
                'scripts' => 'resources/mediawiki/mediawiki.feedback.js',
                'styles' => 'resources/mediawiki/mediawiki.feedback.css',
@@ -693,10 +682,28 @@ return array(
                ),
                'targets' => array( 'desktop', 'mobile' ),
        ),
+       'mediawiki.hlist' => array(
+               'styles' => 'resources/mediawiki/mediawiki.hlist.css',
+               'scripts' => 'resources/mediawiki/mediawiki.hlist.js',
+               'dependencies' => array(
+                       'jquery.client',
+               ),
+       ),
        'mediawiki.htmlform' => array(
                'scripts' => 'resources/mediawiki/mediawiki.htmlform.js',
                'messages' => array( 'htmlform-chosen-placeholder' ),
        ),
+       'mediawiki.icon' => array(
+               'styles' => 'resources/mediawiki/mediawiki.icon.css',
+       ),
+       'mediawiki.inspect' => array(
+               'scripts' => 'resources/mediawiki/mediawiki.inspect.js',
+               'dependencies' => array(
+                       'jquery.byteLength',
+                       'jquery.json',
+               ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
        'mediawiki.notification' => array(
                'styles' => 'resources/mediawiki/mediawiki.notification.css',
                'scripts' => 'resources/mediawiki/mediawiki.notification.js',
@@ -1164,8 +1171,8 @@ return array(
        ),
        'mediawiki.ui' => array(
                'skinStyles' => array(
-                       'default' => 'resources/mediawiki.ui/mediawiki.ui.default.css',
-                       'vector' => 'resources/mediawiki.ui/mediawiki.ui.vector.css',
+                       'default' => 'resources/mediawiki.ui/default.less',
+                       'vector' => 'resources/mediawiki.ui/vector.less',
                ),
                'position' => 'top',
        ),
index 8044d88..abada19 100644 (file)
@@ -6,7 +6,7 @@
  * @author Trevor Parscal <tparscal@wikimedia.org>, 2012
  * @author Krinkle <krinklemail@gmail.com>, 2012
  * @version 0.2.0
- * @license GPL v2
+ * @license MIT
  */
 ( function ( $ ) {
 
index ba711aa..299fabd 100644 (file)
        };
 
        // Legacy (for compatibility with the code previously in skins/common.edit.js)
-       window.addButton = toolbar.addButton;
-       window.insertTags = toolbar.insertTags;
+       mw.log.deprecate( window, 'addButton', toolbar.addButton, 'Use mw.toolbar.addButton instead' );
+       mw.log.deprecate( window, 'insertTags', toolbar.insertTags, 'Use mw.toolbar.insertTags instead' );
 
-       // Explose API publicly
+       // Expose API publicly
        mw.toolbar = toolbar;
 
        $( function () {
index 2d22bad..bc2a0a2 100644 (file)
@@ -9,6 +9,12 @@
                var isValid = mw.util.validateEmail( mail ),
                        $label = $( '#mw-emailaddress-validity' );
 
+               // Set up the validity notice if it doesn't already exist
+               if ( $label.length === 0 ) {
+                       $label = $( '<label for="wpNewEmail" id="mw-emailaddress-validity"></label>' )
+                               .insertAfter( '#wpNewEmail' );
+               }
+
                // We allow empty address
                if ( isValid === null ) {
                        $label.text( '' ).removeClass( 'valid invalid' );
        }
 
        $( function () {
-               // Lame tip to let user know if its email is valid. See bug 22449.
-               // Only bind once for 'blur' so that the user can fill it in without errors;
-               // after that, look at every keypress for immediate feedback.
-               $( '#wpNewEmail' ).one( 'blur', function () {
-                       var $this = $( this );
-                       if ( $( '#mw-emailaddress-validity' ).length === 0 ) {
-                               $this.after( '<label for="wpNewEmail" id="mw-emailaddress-validity"></label>' );
-                       }
-
-                       updateMailValidityLabel( $this.val() );
-                       $this.keyup( function () {
+               $( '#wpNewEmail' )
+                       // Lame tip to let user know if its email is valid. See bug 22449.
+                       // Only bind once for 'blur' so that the user can fill it in without errors;
+                       // after that, look at every keypress for immediate feedback.
+                       .one( 'blur', function () {
+                               var $this = $( this );
                                updateMailValidityLabel( $this.val() );
+                               $this.keyup( function () {
+                                       updateMailValidityLabel( $this.val() );
+                               } );
+                       } )
+                       // Supress built-in validation notice and just call updateMailValidityLabel(),
+                       // to avoid double notice. See bug 40909.
+                       .on( 'invalid', function ( e ) {
+                               e.preventDefault();
+                               updateMailValidityLabel( $( this ).val() );
                        } );
-               } );
        } );
 }( mediaWiki, jQuery ) );
diff --git a/resources/mediawiki.ui/components/default/buttons.less b/resources/mediawiki.ui/components/default/buttons.less
new file mode 100644 (file)
index 0000000..10d36ff
--- /dev/null
@@ -0,0 +1,69 @@
+@import "../../settings/typography";
+@import "../../mixins/effects";
+
+@buttonBorderRadius: 3px;
+
+// Button styling
+.mw-ui-button {
+       // Container layout
+       display: inline-block;
+       padding: 0.4em 1em 0.4em 1em;
+       margin: 0;
+
+       // IE6/IE7 hack
+       // http://stackoverflow.com/a/5838575/365238
+       *display: inline;
+       zoom: 1;
+
+       // Container styling
+       .buttonColors();
+       border-radius: @buttonBorderRadius;
+
+       // Content styling
+       vertical-align: middle;
+
+       text-align: center;
+       text-decoration: none;
+
+       font-weight: bold;
+
+       // Interaction styling
+       cursor: pointer;
+
+       &:disabled,
+       &.mw-ui-disabled {
+               cursor: default;
+       }
+
+       // Button sizes and displays
+       // -----------------------------------------
+       &.mw-ui-big {
+               font-size: @baseFontSize * 1.3;
+       }
+       &.mw-ui-block {
+               display: block;
+               width: 100%;
+       }
+}
+
+// This overrides an underline declaration on a:hover and a:focus in commonElements.css, which the
+// class alone isn't specific enough to do
+a.mw-ui-button {
+       text-decoration: none;
+}
+
+// Button groups
+.mw-ui-button-group > * {
+       border-radius: 0;
+       float: left;
+
+       &:first-child{
+               border-top-left-radius: @buttonBorderRadius;
+               border-bottom-left-radius: @buttonBorderRadius;
+       }
+
+       &:last-child{
+               border-top-right-radius: @buttonBorderRadius;
+               border-bottom-right-radius: @buttonBorderRadius;
+       }
+}
diff --git a/resources/mediawiki.ui/components/default/forms.less b/resources/mediawiki.ui/components/default/forms.less
new file mode 100644 (file)
index 0000000..d2554c6
--- /dev/null
@@ -0,0 +1,115 @@
+// Form elements and layouts
+
+@import "../../mixins/utilities";
+@import "../../mixins/forms";
+
+// --------------------------------------------------------------------------
+// Layouts
+// --------------------------------------------------------------------------
+
+// The FancyCaptcha image CAPTCHA used on WMF wikis drives the width of the
+// 'VForm' design, the form can't be narrower than this.
+@captchaContainerWidth: 290px;
+@defaultFormWidth: @captchaContainerWidth;
+
+// Style a compact vertical stacked form ("VForm") and the elements in divs
+// within it.
+.mw-ui-vform {
+       .box-sizing(border-box);
+
+       width: @defaultFormWidth;
+
+       // Immediate divs in a vform are block and spaced-out.
+       & > div {
+               display: block;
+               margin: 0 0 15px 0;
+               padding: 0;
+               width: 100%;
+
+               // MW currently doesn't use the type attribute everywhere on inputs.
+               input,
+               .mw-ui-button {
+                       display: block;
+                       .box-sizing(border-box);
+                       margin: 0;
+                       width: 100%;
+               }
+
+               // We exclude these because they'll generally use mw-ui-button.
+               // Otherwise, we'll unintentionally override that.
+               input:not([type=button]):not([type=submit]):not([type=file]), {
+                       .agora-field-styling(); // mixins/forms.less
+               }
+
+               label {
+                       display: block;
+                       .box-sizing(border-box);
+                       .agora-label-styling();
+                       width: auto;
+                       margin: 0 0 0.2em 0;
+                       padding: 0;
+               }
+
+               // Override input styling just for checkboxes and radio inputs.
+               input[type="checkbox"],
+               input[type="radio"] {
+                       display: inline;
+                       .box-sizing(content-box);
+                       width: auto;
+               }
+
+       }
+
+       // HTMLForm uses error, SpecialUserlogin (login and create account) uses
+       // errorbox.
+       // TODO move errorbox from mediawiki.special.vforms.css into here.
+       .error {
+               .box-sizing(border-box);
+               font-size: 0.9em;
+               margin: 0 0 1em 0;
+               padding: 0.5em;
+               color: #cc0000;
+               border: 1px solid #fac5c5;
+               background-color: #fae3e3;
+               text-shadow: 0 1px #fae3e3;
+               word-wrap: break-word;
+       }
+}
+
+// --------------------------------------------------------------------------
+// Elements
+// --------------------------------------------------------------------------
+
+// Apply this to individual elements to style them.
+// You generally don't need to use this class on divs within an Agora
+// form container such as mw-ui-vform
+// XXX DRY: This repeats earlier styling, use an @include agora-div-styling ?
+.mw-ui-vform-div {
+       display: block;
+       margin: 0 0 15px 0;
+       padding: 0;
+       width: 100%;
+}
+
+// Apply mw-ui-input to individual input fields to style them.
+// You generally don't need to use this class if <input> is within an Agora
+// form container such as mw-ui-vform
+.mw-ui-input {
+       .agora-field-styling(); // mixins/forms.less
+}
+
+// Apply mw-ui-label to individual elements to style them.
+// You generally don't need to use this class if <label> is within an Agora
+// form container such as mw-ui-vform
+.mw-ui-label {
+       .agora-label-styling(); // mixins/forms.less
+}
+
+// Nesting an input checkbox or radio button inside a label with this class
+// improves alignment, e.g.
+//     <label class="mw-ui-checkbox-label">
+//             <input type="checkbox">The label text
+//     </label>
+.mw-ui-checkbox-label, .mw-ui-radio-label {
+       .agora-inline-label-styling();
+}
diff --git a/resources/mediawiki.ui/components/utilities.less b/resources/mediawiki.ui/components/utilities.less
new file mode 100644 (file)
index 0000000..9aea429
--- /dev/null
@@ -0,0 +1,19 @@
+// Generic helper classes that could be used in many elements/layouts
+
+// --------------------------------------------------------------------------
+// Positioning
+// --------------------------------------------------------------------------
+
+@import "../mixins/utilities";
+
+.mw-ui-flush-left {
+       .agora-flush-left();
+}
+
+.mw-ui-flush-right {
+       .agora-flush-right();
+}
+
+.mw-ui-center-block {
+       .agora-center-block();
+}
diff --git a/resources/mediawiki.ui/components/vector/buttons.less b/resources/mediawiki.ui/components/vector/buttons.less
new file mode 100644 (file)
index 0000000..a49721d
--- /dev/null
@@ -0,0 +1,20 @@
+@import "../default/buttons"; // Layer Vector on top of the default settings.
+@import "../../mixins/type";
+
+.mw-ui-button {
+       // Button colors determined by function.
+       // -----------------------------------------
+       &.mw-ui-primary {
+               .buttonColors(@agoraBlue);
+       }
+
+       &.mw-ui-constructive {
+               .buttonColors(@agoraGreen);
+       }
+
+       &.mw-ui-destructive {
+               .buttonColors(@agoraRed);
+       }
+
+       .vector-type();
+}
diff --git a/resources/mediawiki.ui/components/vector/containers.less b/resources/mediawiki.ui/components/vector/containers.less
new file mode 100644 (file)
index 0000000..1e9ec05
--- /dev/null
@@ -0,0 +1,6 @@
+// No default settings for containers yet.
+@import "../../mixins/type";
+
+.mw-ui-container {
+       .vector-type();
+}
diff --git a/resources/mediawiki.ui/components/vector/forms.less b/resources/mediawiki.ui/components/vector/forms.less
new file mode 100644 (file)
index 0000000..ebb175b
--- /dev/null
@@ -0,0 +1,8 @@
+@import "../default/forms"; // Layer Vector on top of the default settings.
+@import "../../mixins/type";
+
+.mw-ui-vform,
+.mw-ui-vform > div input,
+.mw-ui-input {
+       .vector-type();
+}
diff --git a/resources/mediawiki.ui/default.less b/resources/mediawiki.ui/default.less
new file mode 100644 (file)
index 0000000..036db5f
--- /dev/null
@@ -0,0 +1,8 @@
+/**
+ * Provide Agora appearance for mw-ui-* classes when using a skin other than
+ * Vector.
+ */
+
+@import "components/utilities";
+@import "components/default/buttons";
+@import "components/default/forms";
diff --git a/resources/mediawiki.ui/mediawiki.ui.default.css b/resources/mediawiki.ui/mediawiki.ui.default.css
deleted file mode 100644 (file)
index b072616..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-@charset "UTF-8";
-/**
- * Provide Agora appearance for mw-ui-* classes when using a skin other than
- * Vector.
- * Compass builds these Agora styles from source Sass files in
- * extensions/Agora/modules/scss
- */
-/* _effects.scss */
-/* Mixins for visual effects in CSS3 */
-/* line 7, sourcefiles/scss/components/_utilities.scss */
-.mw-ui-flush-left {
-  float: left;
-  margin-left: 0;
-  padding-left: 0;
-}
-
-/* line 11, sourcefiles/scss/components/_utilities.scss */
-.mw-ui-flush-right {
-  float: right;
-  margin-right: 0;
-  padding-right: 0;
-}
-
-/* line 15, sourcefiles/scss/components/_utilities.scss */
-.mw-ui-center-block {
-  display: block;
-  margin-left: auto;
-  margin-right: auto;
-}
-
-/* line 4, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button {
-  display: -moz-inline-stack;
-  display: inline-block;
-  vertical-align: middle;
-  *vertical-align: auto;
-  zoom: 1;
-  *display: inline;
-  padding: 0.4em 1em 0.4em 1em;
-  margin: 0;
-  background-color: #c9c9c9;
-  *background-color: #c9c9c9;
-  *zoom: 1;
-  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFDCDCDC', endColorstr='#FFC9C9C9');
-  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dcdcdc), color-stop(100%, #c9c9c9));
-  background-image: -webkit-linear-gradient(top, #dcdcdc, #c9c9c9);
-  background-image: -moz-linear-gradient(top, #dcdcdc, #c9c9c9);
-  background-image: -o-linear-gradient(top, #dcdcdc, #c9c9c9);
-  background-image: linear-gradient(top, #dcdcdc, #c9c9c9);
-  color: black;
-  text-shadow: 0 1px 1px rgba(201, 201, 201, 0.3);
-  border: 1px solid #c4c4c4;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  -ms-border-radius: 3px;
-  -o-border-radius: 3px;
-  border-radius: 3px;
-  vertical-align: middle;
-  text-align: center;
-  text-decoration: none;
-  font-weight: bold;
-  cursor: pointer;
-}
-/* line 38, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button:hover, .mw-ui-button.mw-ui-hover {
-  background-color: gainsboro;
-  *background-color: gainsboro;
-  *zoom: 1;
-  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFE9E9E9', endColorstr='#FFDCDCDC');
-  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e9e9e9), color-stop(100%, #dcdcdc));
-  background-image: -webkit-linear-gradient(top, #e9e9e9, #dcdcdc);
-  background-image: -moz-linear-gradient(top, #e9e9e9, #dcdcdc);
-  background-image: -o-linear-gradient(top, #e9e9e9, #dcdcdc);
-  background-image: linear-gradient(top, #e9e9e9, #dcdcdc);
-  text-decoration: none;
-}
-/* line 44, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button:active, .mw-ui-button.mw-ui-active {
-  background-image: none;
-  background-color: #c1c1c1;
-  text-shadow: none;
-}
-/* line 54, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button:disabled, .mw-ui-button.mw-ui-disabled {
-  background-image: none;
-  background-color: #c9c9c9;
-  opacity: 0.5;
-  text-shadow: none;
-}
-/* line 30, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button:disabled, .mw-ui-button.mw-ui-disabled {
-  cursor: default;
-}
-/* line 36, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button.mw-ui-big {
-  font-size: 1.3em;
-}
-/* line 41, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button.mw-ui-block {
-  display: block;
-  width: 100%;
-}
-
-/* line 49, sourcefiles/scss/components/default/_buttons.scss */
-a.mw-ui-button {
-  text-decoration: none;
-}
-
-/* line 56, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button-group > * {
-  -webkit-border-radius: 0;
-  -moz-border-radius: 0;
-  -ms-border-radius: 0;
-  -o-border-radius: 0;
-  border-radius: 0;
-  float: left;
-}
-/* line 60, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button-group > *:first-child {
-  -moz-border-radius-topleft: 3px;
-  -webkit-border-top-left-radius: 3px;
-  border-top-left-radius: 3px;
-  -moz-border-radius-bottomleft: 3px;
-  -webkit-border-bottom-left-radius: 3px;
-  border-bottom-left-radius: 3px;
-}
-/* line 65, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button-group > *:last-child {
-  -moz-border-radius-topright: 3px;
-  -webkit-border-top-right-radius: 3px;
-  border-top-right-radius: 3px;
-  -moz-border-radius-bottomright: 3px;
-  -webkit-border-bottom-right-radius: 3px;
-  border-bottom-right-radius: 3px;
-}
-
-/* line 14, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-  width: 290px;
-}
-/* line 20, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform > div {
-  display: block;
-  margin: 0 0 15px 0;
-  padding: 0;
-  width: 100%;
-}
-/* line 28, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform > div input,
-.mw-ui-vform > div .mw-ui-button {
-  display: block;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-  margin: 0;
-  width: 100%;
-}
-/* line 37, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform > div input:not([type=button]):not([type=submit]):not([type=file]) {
-  border-style: solid;
-  border-width: 1px;
-  border-color: #c9c9c9;
-  color: #252525;
-  padding: 0.35em 0 0.35em 0.5em;
-}
-/* line 11, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-vform > div input:not([type=button]):not([type=submit]):not([type=file]):focus {
-  box-shadow: #4091ed 0px 0px 5px;
-  border-color: #4091ed;
-}
-/* line 13, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-vform > div input:not([type=button]):not([type=submit]):not([type=file]):focus:not([type=checkbox]):not([type=radio]) {
-  outline: 0;
-}
-/* line 41, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform > div label {
-  display: block;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-  font-size: 0.9em;
-  color: #4a4a4a;
-  width: auto;
-  margin: 0 0 0.2em 0;
-  padding: 0;
-}
-/* line 38, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-vform > div label * {
-  font-weight: normal;
-}
-/* line 52, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform > div input[type="checkbox"],
-.mw-ui-vform > div input[type="radio"] {
-  display: inline;
-  -webkit-box-sizing: content-box;
-  -moz-box-sizing: content-box;
-  box-sizing: content-box;
-  width: auto;
-}
-/* line 63, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform .error {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-  font-size: 0.9em;
-  margin: 0 0 1em 0;
-  padding: 0.5em;
-  color: #cc0000;
-  border: 1px solid #fac5c5;
-  background-color: #fae3e3;
-  text-shadow: 0 1px #fae3e3;
-  word-wrap: break-word;
-}
-
-/* line 86, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform-div {
-  display: block;
-  margin: 0 0 15px 0;
-  padding: 0;
-  width: 100%;
-}
-
-/* line 96, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-input {
-  border-style: solid;
-  border-width: 1px;
-  border-color: #c9c9c9;
-  color: #252525;
-  padding: 0.35em 0 0.35em 0.5em;
-}
-/* line 11, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-input:focus {
-  box-shadow: #4091ed 0px 0px 5px;
-  border-color: #4091ed;
-}
-/* line 13, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-input:focus:not([type=checkbox]):not([type=radio]) {
-  outline: 0;
-}
-
-/* line 103, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-label {
-  font-size: 0.9em;
-  color: #4a4a4a;
-}
-/* line 38, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-label * {
-  font-weight: normal;
-}
-
-/* line 112, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-checkbox-label, .mw-ui-radio-label {
-  margin-bottom: 0.5em;
-  cursor: pointer;
-  vertical-align: bottom;
-  line-height: normal;
-  font-weight: normal;
-}
-/* line 54, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-checkbox-label > input[type="checkbox"], .mw-ui-checkbox-label > input[type="radio"], .mw-ui-radio-label > input[type="checkbox"], .mw-ui-radio-label > input[type="radio"] {
-  width: auto;
-  height: auto;
-  margin: 0 0.1em 0em 0;
-  padding: 0;
-  border-style: solid;
-  border-width: 1px;
-  border-color: #c9c9c9;
-  cursor: pointer;
-}
diff --git a/resources/mediawiki.ui/mediawiki.ui.vector.css b/resources/mediawiki.ui/mediawiki.ui.vector.css
deleted file mode 100644 (file)
index fd9e091..0000000
+++ /dev/null
@@ -1,414 +0,0 @@
-@charset "UTF-8";
-/**
- * Provide Agora appearance for mw-ui-* classes when using the Vector skin.
- * Compass builds these Agora styles from source Sass files in
- * extensions/Agora/modules/scss
- */
-/* _effects.scss */
-/* Mixins for visual effects in CSS3 */
-/* line 7, sourcefiles/scss/components/_utilities.scss */
-.mw-ui-flush-left {
-  float: left;
-  margin-left: 0;
-  padding-left: 0;
-}
-
-/* line 11, sourcefiles/scss/components/_utilities.scss */
-.mw-ui-flush-right {
-  float: right;
-  margin-right: 0;
-  padding-right: 0;
-}
-
-/* line 15, sourcefiles/scss/components/_utilities.scss */
-.mw-ui-center-block {
-  display: block;
-  margin-left: auto;
-  margin-right: auto;
-}
-
-/* line 4, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button {
-  display: -moz-inline-stack;
-  display: inline-block;
-  vertical-align: middle;
-  *vertical-align: auto;
-  zoom: 1;
-  *display: inline;
-  padding: 0.4em 1em 0.4em 1em;
-  margin: 0;
-  background-color: #c9c9c9;
-  *background-color: #c9c9c9;
-  *zoom: 1;
-  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFDCDCDC', endColorstr='#FFC9C9C9');
-  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dcdcdc), color-stop(100%, #c9c9c9));
-  background-image: -webkit-linear-gradient(top, #dcdcdc, #c9c9c9);
-  background-image: -moz-linear-gradient(top, #dcdcdc, #c9c9c9);
-  background-image: -o-linear-gradient(top, #dcdcdc, #c9c9c9);
-  background-image: linear-gradient(top, #dcdcdc, #c9c9c9);
-  color: black;
-  text-shadow: 0 1px 1px rgba(201, 201, 201, 0.3);
-  border: 1px solid #c4c4c4;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  -ms-border-radius: 3px;
-  -o-border-radius: 3px;
-  border-radius: 3px;
-  vertical-align: middle;
-  text-align: center;
-  text-decoration: none;
-  font-weight: bold;
-  cursor: pointer;
-}
-/* line 38, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button:hover, .mw-ui-button.mw-ui-hover {
-  background-color: gainsboro;
-  *background-color: gainsboro;
-  *zoom: 1;
-  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFE9E9E9', endColorstr='#FFDCDCDC');
-  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e9e9e9), color-stop(100%, #dcdcdc));
-  background-image: -webkit-linear-gradient(top, #e9e9e9, #dcdcdc);
-  background-image: -moz-linear-gradient(top, #e9e9e9, #dcdcdc);
-  background-image: -o-linear-gradient(top, #e9e9e9, #dcdcdc);
-  background-image: linear-gradient(top, #e9e9e9, #dcdcdc);
-  text-decoration: none;
-}
-/* line 44, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button:active, .mw-ui-button.mw-ui-active {
-  background-image: none;
-  background-color: #c1c1c1;
-  text-shadow: none;
-}
-/* line 54, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button:disabled, .mw-ui-button.mw-ui-disabled {
-  background-image: none;
-  background-color: #c9c9c9;
-  opacity: 0.5;
-  text-shadow: none;
-}
-/* line 30, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button:disabled, .mw-ui-button.mw-ui-disabled {
-  cursor: default;
-}
-/* line 36, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button.mw-ui-big {
-  font-size: 1.3em;
-}
-/* line 41, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button.mw-ui-block {
-  display: block;
-  width: 100%;
-}
-
-/* line 49, sourcefiles/scss/components/default/_buttons.scss */
-a.mw-ui-button {
-  text-decoration: none;
-}
-
-/* line 56, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button-group > * {
-  -webkit-border-radius: 0;
-  -moz-border-radius: 0;
-  -ms-border-radius: 0;
-  -o-border-radius: 0;
-  border-radius: 0;
-  float: left;
-}
-/* line 60, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button-group > *:first-child {
-  -moz-border-radius-topleft: 3px;
-  -webkit-border-top-left-radius: 3px;
-  border-top-left-radius: 3px;
-  -moz-border-radius-bottomleft: 3px;
-  -webkit-border-bottom-left-radius: 3px;
-  border-bottom-left-radius: 3px;
-}
-/* line 65, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button-group > *:last-child {
-  -moz-border-radius-topright: 3px;
-  -webkit-border-top-right-radius: 3px;
-  border-top-right-radius: 3px;
-  -moz-border-radius-bottomright: 3px;
-  -webkit-border-bottom-right-radius: 3px;
-  border-bottom-right-radius: 3px;
-}
-
-/* line 3, sourcefiles/scss/components/vector/_buttons.scss */
-.mw-ui-button {
-  font-size: 1em;
-  line-height: 1.4em;
-}
-/* line 6, sourcefiles/scss/components/vector/_buttons.scss */
-.mw-ui-button.mw-ui-primary {
-  background-color: #3366bb;
-  *background-color: #3366bb;
-  *zoom: 1;
-  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FF4779CD', endColorstr='#FF3366BB');
-  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #4779cd), color-stop(100%, #3366bb));
-  background-image: -webkit-linear-gradient(top, #4779cd, #3366bb);
-  background-image: -moz-linear-gradient(top, #4779cd, #3366bb);
-  background-image: -o-linear-gradient(top, #4779cd, #3366bb);
-  background-image: linear-gradient(top, #4779cd, #3366bb);
-  color: white;
-  text-shadow: 0 1px 1px rgba(51, 102, 187, 0.75);
-  border: 1px solid #3162b3;
-}
-/* line 38, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button.mw-ui-primary:hover, .mw-ui-button.mw-ui-primary.mw-ui-hover {
-  background-color: #4779cd;
-  *background-color: #4779cd;
-  *zoom: 1;
-  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FF5B88D2', endColorstr='#FF4779CD');
-  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #5b88d2), color-stop(100%, #4779cd));
-  background-image: -webkit-linear-gradient(top, #5b88d2, #4779cd);
-  background-image: -moz-linear-gradient(top, #5b88d2, #4779cd);
-  background-image: -o-linear-gradient(top, #5b88d2, #4779cd);
-  background-image: linear-gradient(top, #5b88d2, #4779cd);
-  text-decoration: none;
-}
-/* line 44, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button.mw-ui-primary:active, .mw-ui-button.mw-ui-primary.mw-ui-active {
-  background-image: none;
-  background-color: #305faf;
-  text-shadow: none;
-}
-/* line 54, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button.mw-ui-primary:disabled, .mw-ui-button.mw-ui-primary.mw-ui-disabled {
-  background-image: none;
-  background-color: #3366bb;
-  opacity: 0.5;
-  text-shadow: none;
-}
-/* line 10, sourcefiles/scss/components/vector/_buttons.scss */
-.mw-ui-button.mw-ui-constructive {
-  background-color: #27aa65;
-  *background-color: #27aa65;
-  *zoom: 1;
-  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FF2EC977', endColorstr='#FF27AA65');
-  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #2ec977), color-stop(100%, #27aa65));
-  background-image: -webkit-linear-gradient(top, #2ec977, #27aa65);
-  background-image: -moz-linear-gradient(top, #2ec977, #27aa65);
-  background-image: -o-linear-gradient(top, #2ec977, #27aa65);
-  background-image: linear-gradient(top, #2ec977, #27aa65);
-  color: white;
-  text-shadow: 0 1px 1px rgba(39, 170, 101, 0.75);
-  border: 1px solid #25a260;
-}
-/* line 38, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button.mw-ui-constructive:hover, .mw-ui-button.mw-ui-constructive.mw-ui-hover {
-  background-color: #2ec977;
-  *background-color: #2ec977;
-  *zoom: 1;
-  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FF3ED384', endColorstr='#FF2EC977');
-  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #3ed384), color-stop(100%, #2ec977));
-  background-image: -webkit-linear-gradient(top, #3ed384, #2ec977);
-  background-image: -moz-linear-gradient(top, #3ed384, #2ec977);
-  background-image: -o-linear-gradient(top, #3ed384, #2ec977);
-  background-image: linear-gradient(top, #3ed384, #2ec977);
-  text-decoration: none;
-}
-/* line 44, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button.mw-ui-constructive:active, .mw-ui-button.mw-ui-constructive.mw-ui-active {
-  background-image: none;
-  background-color: #249e5e;
-  text-shadow: none;
-}
-/* line 54, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button.mw-ui-constructive:disabled, .mw-ui-button.mw-ui-constructive.mw-ui-disabled {
-  background-image: none;
-  background-color: #27aa65;
-  opacity: 0.5;
-  text-shadow: none;
-}
-/* line 14, sourcefiles/scss/components/vector/_buttons.scss */
-.mw-ui-button.mw-ui-destructive {
-  background-color: #cc0000;
-  *background-color: #cc0000;
-  *zoom: 1;
-  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFF20000', endColorstr='#FFCC0000');
-  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f20000), color-stop(100%, #cc0000));
-  background-image: -webkit-linear-gradient(top, #f20000, #cc0000);
-  background-image: -moz-linear-gradient(top, #f20000, #cc0000);
-  background-image: -o-linear-gradient(top, #f20000, #cc0000);
-  background-image: linear-gradient(top, #f20000, #cc0000);
-  color: white;
-  text-shadow: 0 1px 1px rgba(204, 0, 0, 0.75);
-  border: 1px solid #c20000;
-}
-/* line 38, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button.mw-ui-destructive:hover, .mw-ui-button.mw-ui-destructive.mw-ui-hover {
-  background-color: #f20000;
-  *background-color: #f20000;
-  *zoom: 1;
-  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFFF0D0D', endColorstr='#FFF20000');
-  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ff0d0d), color-stop(100%, #f20000));
-  background-image: -webkit-linear-gradient(top, #ff0d0d, #f20000);
-  background-image: -moz-linear-gradient(top, #ff0d0d, #f20000);
-  background-image: -o-linear-gradient(top, #ff0d0d, #f20000);
-  background-image: linear-gradient(top, #ff0d0d, #f20000);
-  text-decoration: none;
-}
-/* line 44, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button.mw-ui-destructive:active, .mw-ui-button.mw-ui-destructive.mw-ui-active {
-  background-image: none;
-  background-color: #bd0000;
-  text-shadow: none;
-}
-/* line 54, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button.mw-ui-destructive:disabled, .mw-ui-button.mw-ui-destructive.mw-ui-disabled {
-  background-image: none;
-  background-color: #cc0000;
-  opacity: 0.5;
-  text-shadow: none;
-}
-
-/* line 14, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-  width: 290px;
-}
-/* line 20, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform > div {
-  display: block;
-  margin: 0 0 15px 0;
-  padding: 0;
-  width: 100%;
-}
-/* line 28, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform > div input,
-.mw-ui-vform > div .mw-ui-button {
-  display: block;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-  margin: 0;
-  width: 100%;
-}
-/* line 37, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform > div input:not([type=button]):not([type=submit]):not([type=file]) {
-  border-style: solid;
-  border-width: 1px;
-  border-color: #c9c9c9;
-  color: #252525;
-  padding: 0.35em 0 0.35em 0.5em;
-}
-/* line 11, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-vform > div input:not([type=button]):not([type=submit]):not([type=file]):focus {
-  box-shadow: #4091ed 0px 0px 5px;
-  border-color: #4091ed;
-}
-/* line 13, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-vform > div input:not([type=button]):not([type=submit]):not([type=file]):focus:not([type=checkbox]):not([type=radio]) {
-  outline: 0;
-}
-/* line 41, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform > div label {
-  display: block;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-  font-size: 0.9em;
-  color: #4a4a4a;
-  width: auto;
-  margin: 0 0 0.2em 0;
-  padding: 0;
-}
-/* line 38, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-vform > div label * {
-  font-weight: normal;
-}
-/* line 52, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform > div input[type="checkbox"],
-.mw-ui-vform > div input[type="radio"] {
-  display: inline;
-  -webkit-box-sizing: content-box;
-  -moz-box-sizing: content-box;
-  box-sizing: content-box;
-  width: auto;
-}
-/* line 63, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform .error {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-  font-size: 0.9em;
-  margin: 0 0 1em 0;
-  padding: 0.5em;
-  color: #cc0000;
-  border: 1px solid #fac5c5;
-  background-color: #fae3e3;
-  text-shadow: 0 1px #fae3e3;
-  word-wrap: break-word;
-}
-
-/* line 86, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform-div {
-  display: block;
-  margin: 0 0 15px 0;
-  padding: 0;
-  width: 100%;
-}
-
-/* line 96, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-input {
-  border-style: solid;
-  border-width: 1px;
-  border-color: #c9c9c9;
-  color: #252525;
-  padding: 0.35em 0 0.35em 0.5em;
-}
-/* line 11, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-input:focus {
-  box-shadow: #4091ed 0px 0px 5px;
-  border-color: #4091ed;
-}
-/* line 13, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-input:focus:not([type=checkbox]):not([type=radio]) {
-  outline: 0;
-}
-
-/* line 103, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-label {
-  font-size: 0.9em;
-  color: #4a4a4a;
-}
-/* line 38, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-label * {
-  font-weight: normal;
-}
-
-/* line 112, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-checkbox-label, .mw-ui-radio-label {
-  margin-bottom: 0.5em;
-  cursor: pointer;
-  vertical-align: bottom;
-  line-height: normal;
-  font-weight: normal;
-}
-/* line 54, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-checkbox-label > input[type="checkbox"], .mw-ui-checkbox-label > input[type="radio"], .mw-ui-radio-label > input[type="checkbox"], .mw-ui-radio-label > input[type="radio"] {
-  width: auto;
-  height: auto;
-  margin: 0 0.1em 0em 0;
-  padding: 0;
-  border-style: solid;
-  border-width: 1px;
-  border-color: #c9c9c9;
-  cursor: pointer;
-}
-
-/* line 5, sourcefiles/scss/components/vector/_forms.scss */
-.mw-ui-vform,
-.mw-ui-vform > div input,
-.mw-ui-input {
-  font-size: 1em;
-  line-height: 1.4em;
-}
-
-/* line 3, sourcefiles/scss/components/vector/_containers.scss */
-.mw-ui-container {
-  font-size: 1em;
-  line-height: 1.4em;
-}
diff --git a/resources/mediawiki.ui/mixins/effects.less b/resources/mediawiki.ui/mixins/effects.less
new file mode 100644 (file)
index 0000000..d168e5f
--- /dev/null
@@ -0,0 +1,52 @@
+/* Mixins for visual effects in CSS3 */
+
+@import "../settings/colors";
+
+// ----------------------------------------------------------------------------
+// Gradients
+// ----------------------------------------------------------------------------
+.vertical-gradient(@startColor: lighten(@agoraGray, 95%), @endColor: @agoraGray, @startPos: 0, @endPos: 100%) {
+       background-color: @endColor;
+       background-image: -moz-linear-gradient( top, @startColor @startPos, @endColor @endPos ); // Firefox 3.6+
+       background-image: -webkit-gradient( linear, left top, left bottom, color-stop( @startPos, @startColor ), color-stop( @endPos, @endColor ) ); // Safari 4+, Chrome 2+
+       background-image: -webkit-linear-gradient( top, @startColor @startPos, @endColor @endPos ); // Safari 5.1+, Chrome 10+
+       background-image: linear-gradient( @startColor @startPos, @endColor @endPos ); // Standard
+}
+
+// ----------------------------------------------------------------------------
+// Button styling
+// ----------------------------------------------------------------------------
+
+.buttonColors(@baseColor: @agoraGray) {
+       // Background color
+       .vertical-gradient(lighten(@baseColor, 7.5%), @baseColor);
+
+       border: 1px solid darken(@baseColor, 2%);
+
+       &:hover,
+       &.mw-ui-hover {
+               .vertical-gradient(lighten(@baseColor, 12.5%), lighten(@baseColor, 7.5%));
+               text-decoration: none;
+       }
+
+       &:active,
+       &.mw-ui-active {
+               background-image: none;
+               background-color: darken(@baseColor, 3%);
+       }
+
+       &:disabled,
+       &.mw-ui-disabled {
+               background-image: none;
+               background-color: @baseColor;
+               opacity: 0.5;
+       }
+}
+
+.buttonColors(@baseColor: @agoraGray) when (lightness(@baseColor) >= 50%) {
+       color: #000;
+}
+
+.buttonColors(@baseColor: @agoraGray) when (lightness(@baseColor) < 50%) {
+       color: #fff;
+}
diff --git a/resources/mediawiki.ui/mixins/forms.less b/resources/mediawiki.ui/mixins/forms.less
new file mode 100644 (file)
index 0000000..4ed7261
--- /dev/null
@@ -0,0 +1,51 @@
+@import "../settings/colors";
+
+// Font is not included.
+// For Vector, that should be layered on top with vector-type
+.agora-field-styling() {
+
+       border: 1px solid @agoraGray;
+
+       &:focus {
+               // Styling focus of native checkboxes etc on Mac is almost impossible.
+               &:not([type=checkbox]):not([type=radio]) {
+                       outline: 0; // Removes OS field focus
+               }
+
+               box-shadow: @agoraBlueShadow 0px 0px 5px;
+
+               border-color: @agoraBlueShadow;
+       }
+
+       color: @agoraTextColor;
+       padding: 0.35em 0.5em 0.35em 0.5em;
+}
+
+.agora-label-styling() {
+       //font-weight: bold;
+       font-size: 0.9em;
+       color: darken(@agoraGray, 50%);
+
+       * {
+               font-weight: normal;
+       }
+}
+
+.agora-inline-label-styling() {
+       margin-bottom: 0.5em;
+       cursor: pointer;
+       vertical-align: bottom;
+       line-height: normal;
+
+       font-weight: normal;
+
+       & > input[type="checkbox"],
+       & > input[type="radio"] {
+               width: auto;
+               height: auto;
+               margin: 0 0.1em 0em 0;
+               padding: 0;
+               border: 1px solid @agoraGray;
+               cursor: pointer;
+       }
+}
diff --git a/resources/mediawiki.ui/mixins/type.less b/resources/mediawiki.ui/mixins/type.less
new file mode 100644 (file)
index 0000000..4a01168
--- /dev/null
@@ -0,0 +1,6 @@
+@import "../settings/typography";
+
+.vector-type() {
+       font-size: @baseFontSize;
+       line-height: @baseLineHeight;
+}
diff --git a/resources/mediawiki.ui/mixins/utilities.less b/resources/mediawiki.ui/mixins/utilities.less
new file mode 100644 (file)
index 0000000..a201a4e
--- /dev/null
@@ -0,0 +1,23 @@
+.box-sizing(@value) {
+       -moz-box-sizing: @value;
+       -webkit-box-sizing: @value;
+       box-sizing: @value;
+}
+
+.agora-flush-left() {
+       float: left;
+       margin-left: 0;
+       padding-left: 0;
+}
+
+.agora-flush-right() {
+       float: right;
+       margin-right: 0;
+       padding-right: 0;
+}
+
+.agora-center-block() {
+       display: block;
+       margin-left: auto;
+       margin-right: auto;
+}
diff --git a/resources/mediawiki.ui/settings/colors.less b/resources/mediawiki.ui/settings/colors.less
new file mode 100644 (file)
index 0000000..208d6f6
--- /dev/null
@@ -0,0 +1,17 @@
+// Grays
+// -----------------------------------------
+@agoraGray: #c9c9c9;
+@agoraTextColor: #252525;
+
+// Blues
+// -----------------------------------------
+@agoraBlue: #3366bb;
+@agoraBlueShadow: #4091ed;
+
+// Greens
+// -----------------------------------------
+@agoraGreen: #27aa65;
+
+// Reds
+// -----------------------------------------
+@agoraRed: #cc0000;
diff --git a/resources/mediawiki.ui/settings/typography.less b/resources/mediawiki.ui/settings/typography.less
new file mode 100644 (file)
index 0000000..76c398c
--- /dev/null
@@ -0,0 +1,5 @@
+@baseFontSize: 1em;
+@baseLineHeight: 1.4 * @baseFontSize;
+@baseFontColor: @agoraTextColor;
+
+@smallFontSize: 0.75em;
diff --git a/resources/mediawiki.ui/sourcefiles/Makefile b/resources/mediawiki.ui/sourcefiles/Makefile
deleted file mode 100644 (file)
index dea9013..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-DATE=$(shell date +%I:%M%p)
-CHECK=\033[32m✔\033[39m
-HR=\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#
-
-build:
-       @echo "\n${HR}"
-       @echo "Building Agora..."
-       @echo "${HR}\n"
-       @compass compile
-       @echo "Compiling Compass project...            ${CHECK} Done"
-       @rm -rf .sass-cache
-       @echo "Removing .sass-cache...                 ${CHECK} Done"
-       @echo "\n${HR}"
-       @echo "Agora successfully built at ${DATE}."
-       @echo "${HR}\n"
-
-all: build
-
-watch:
-       @echo "\n${HR}"
-       @echo "Watching SCSS files for Agora..."
-       @echo "${HR}\n"
-       @compass watch
-       @echo "Started watching modules/scss at ${DATE}..."
diff --git a/resources/mediawiki.ui/sourcefiles/config.rb b/resources/mediawiki.ui/sourcefiles/config.rb
deleted file mode 100644 (file)
index 28c6524..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-# Require any additional compass plugins here.
-
-# Set this to the root of your project when deployed:
-# (unused so far): http_path = "/"
-
-# Output to parent of build directory
-css_dir = ".."
-sass_dir = "scss"
-# (unused so far): images_dir = "modules/img"
-# (unused so far): javascripts_dir = "modules/js"
-
-# You can select your preferred output style here (can be overridden via the command line):
-# output_style = :expanded or :nested or :compact or :compressed
-output_style = :expanded
-
-# To enable relative paths to assets via compass helper functions. Uncomment:
-relative_assets = true
-
-# To disable debugging comments that display the original location of your selectors. Uncomment:
-line_comments = true
-
-
-# If you prefer the indented syntax, you might want to regenerate this
-# project again passing --syntax sass, or you can uncomment this:
-# preferred_syntax = :sass
-# and then run:
-# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass
diff --git a/resources/mediawiki.ui/sourcefiles/scss/components/_default.scss b/resources/mediawiki.ui/sourcefiles/scss/components/_default.scss
deleted file mode 100644 (file)
index e7090eb..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-@import "utilities";
-@import "default/buttons";
-@import "default/forms";
\ No newline at end of file
diff --git a/resources/mediawiki.ui/sourcefiles/scss/components/_utilities.scss b/resources/mediawiki.ui/sourcefiles/scss/components/_utilities.scss
deleted file mode 100644 (file)
index 4f1dba2..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-// Generic helper classes that could be used in many elements/layouts
-
-// --------------------------------------------------------------------------
-// Positioning
-// --------------------------------------------------------------------------
-
-.mw-ui-flush-left {
-    @include agora-flush-left;
-}
-
-.mw-ui-flush-right {
-    @include agora-flush-right;
-}
-
-.mw-ui-center-block {
-    @include agora-center-block;
-}
\ No newline at end of file
diff --git a/resources/mediawiki.ui/sourcefiles/scss/components/_vector.scss b/resources/mediawiki.ui/sourcefiles/scss/components/_vector.scss
deleted file mode 100644 (file)
index d7cb34a..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-@import "utilities";
-@import "vector/buttons";
-@import "vector/forms";
-@import "vector/containers";
diff --git a/resources/mediawiki.ui/sourcefiles/scss/components/default/_buttons.scss b/resources/mediawiki.ui/sourcefiles/scss/components/default/_buttons.scss
deleted file mode 100644 (file)
index d67810f..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-$buttonBorderRadius: 3px;
-
-// Button styling
-.mw-ui-button {
-    // Container layout
-    @include inline-block;
-    padding: 0.4em 1em 0.4em 1em;
-    margin: 0;
-
-    // Container styling
-    @include buttonColors($agoraGray);
-    @include border-radius($buttonBorderRadius);
-
-    // Content styling
-    vertical-align: middle;
-
-    text: {
-        align: center;
-        decoration: none;
-    }
-
-    font: {
-        weight: bold;
-    }
-
-    // Interaction styling
-    cursor: pointer;
-
-    &:disabled,
-    &.mw-ui-disabled {
-        cursor: default;
-    }
-
-    // Button sizes and displays
-    // -----------------------------------------
-    &.mw-ui-big {
-        font: {
-            size: $baseFontSize * 1.3;
-        }
-    }
-    &.mw-ui-block {
-        display: block;
-        width: 100%;
-    }
-}
-
-// This overrides an underline declaration on a:hover and a:focus in commonElements.css, which the
-// class alone isn't specific enough to do
-a.mw-ui-button {
-    text: {
-        decoration: none;
-    }
-}
-
-// Button groups
-.mw-ui-button-group > * {
-  @include border-radius(0);
-  float: left;
-
-  &:first-child{
-    @include border-top-left-radius($buttonBorderRadius);
-    @include border-bottom-left-radius($buttonBorderRadius);
-  }
-
-  &:last-child{
-    @include border-top-right-radius($buttonBorderRadius);
-    @include border-bottom-right-radius($buttonBorderRadius);
-  }
-}
diff --git a/resources/mediawiki.ui/sourcefiles/scss/components/default/_forms.scss b/resources/mediawiki.ui/sourcefiles/scss/components/default/_forms.scss
deleted file mode 100644 (file)
index a9cec39..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-// Form elements and layouts
-
-// --------------------------------------------------------------------------
-// Layouts
-// --------------------------------------------------------------------------
-
-// The FancyCaptcha image CAPTCHA used on WMF wikis drives the width of the
-// 'VForm' design, the form can't be narrower than this.
-$captchaContainerWidth: 290px;
-$defaultFormWidth: $captchaContainerWidth;
-
-// Style a compact vertical stacked form ("VForm") and the elements in divs
-// within it.
-.mw-ui-vform {
-    @include box-sizing(border-box);
-
-    width: $defaultFormWidth;
-
-    // Immediate divs in a vform are block and spaced-out.
-    & > div {
-        display: block;
-        margin: 0 0 15px 0;
-        padding: 0;
-        width: 100%;
-
-        // MW currently doesn't use the type attribute everywhere on inputs.
-        input,
-        .mw-ui-button {
-            display: block;
-            @include box-sizing(border-box);
-            margin: 0;
-            width: 100%;
-        }
-
-        // We exclude these because they'll generally use mw-ui-button.
-        // Otherwise, we'll unintentionally override that.
-        input:not([type=button]):not([type=submit]):not([type=file]), {
-            @include agora-field-styling; // mixins/_forms.scss
-        }
-
-        label {
-            display: block;
-            @include box-sizing(border-box);
-            @include agora-label-styling;
-            width: auto;
-            margin: 0 0 0.2em 0;
-            padding: 0;
-        }
-
-        // Override input styling just for checkboxes and radio inputs.
-        input[type="checkbox"],
-        input[type="radio"] {
-            display: inline;
-            @include box-sizing(content-box);
-            width: auto;
-        }
-
-    }
-
-    // HTMLForm uses error, SpecialUserlogin (login and create account) uses
-    // errorbox.
-    // TODO move errorbox from mediawiki.special.vforms.css into here.
-    .error {
-        -webkit-box-sizing: border-box;
-        -moz-box-sizing: border-box;
-        box-sizing: border-box;
-        font-size: 0.9em;
-        margin: 0 0 1em 0;
-        padding: 0.5em;
-        color: #cc0000;
-        border: 1px solid #fac5c5;
-        background-color: #fae3e3;
-        text-shadow: 0 1px #fae3e3;
-        word-wrap: break-word;
-    }
-}
-
-// --------------------------------------------------------------------------
-// Elements
-// --------------------------------------------------------------------------
-
-// Apply this to individual elements to style them.
-// You generally don't need to use this class on divs within an Agora
-// form container such as mw-ui-vform
-// XXX DRY: This repeats earlier styling, use an @include agora-div-styling ?
-.mw-ui-vform-div {
-       display: block;
-       margin: 0 0 15px 0;
-       padding: 0;
-       width: 100%;
-}
-
-// Apply mw-ui-input to individual input fields to style them.
-// You generally don't need to use this class if <input> is within an Agora
-// form container such as mw-ui-vform
-.mw-ui-input {
-    @include agora-field-styling; // mixins/_forms.scss
-}
-
-// Apply mw-ui-label to individual elements to style them.
-// You generally don't need to use this class if <label> is within an Agora
-// form container such as mw-ui-vform
-.mw-ui-label {
-    @include agora-label-styling; // mixins/_forms.scss
-}
-
-// Nesting an input checkbox or radio button inside a label with this class
-// improves alignment, e.g.
-//   <label class="mw-ui-checkbox-label">
-//       <input type="checkbox">The label text
-//   </label>
-.mw-ui-checkbox-label, .mw-ui-radio-label {
-    @include agora-inline-label-styling;
-}
diff --git a/resources/mediawiki.ui/sourcefiles/scss/components/vector/_buttons.scss b/resources/mediawiki.ui/sourcefiles/scss/components/vector/_buttons.scss
deleted file mode 100644 (file)
index 8d5f0b6..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-@import "../default/buttons"; // Layer Vector on top of the default settings.
-
-.mw-ui-button {
-    // Button colors determined by function.
-    // -----------------------------------------
-    &.mw-ui-primary {
-        @include buttonColors($agoraBlue);
-    }
-
-    &.mw-ui-constructive {
-        @include buttonColors($agoraGreen);
-    }
-
-    &.mw-ui-destructive {
-        @include buttonColors($agoraRed);
-    }
-
-    @include vector-type;
-}
diff --git a/resources/mediawiki.ui/sourcefiles/scss/components/vector/_containers.scss b/resources/mediawiki.ui/sourcefiles/scss/components/vector/_containers.scss
deleted file mode 100644 (file)
index ed01603..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// No default settings for containers yet.
-
-.mw-ui-container {
-    @include vector-type;
-}
diff --git a/resources/mediawiki.ui/sourcefiles/scss/components/vector/_forms.scss b/resources/mediawiki.ui/sourcefiles/scss/components/vector/_forms.scss
deleted file mode 100644 (file)
index 73ea24e..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-@import "../default/forms"; // Layer Vector on top of the default settings.
-
-.mw-ui-vform,
-.mw-ui-vform > div input,
-.mw-ui-input {
-    @include vector-type;
-}
diff --git a/resources/mediawiki.ui/sourcefiles/scss/mediawiki.ui.default.scss b/resources/mediawiki.ui/sourcefiles/scss/mediawiki.ui.default.scss
deleted file mode 100644 (file)
index e6db523..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * Provide Agora appearance for mw-ui-* classes when using a skin other than
- * Vector.
- * Compass builds these Agora styles from source Sass files in
- * extensions/Agora/modules/scss
- */
-
-@charset "UTF-8";
-
-@import "compass";
-
-@import "settings/all";
-
-@import "mixins/all";
-
-@import "components/default";
diff --git a/resources/mediawiki.ui/sourcefiles/scss/mediawiki.ui.vector.scss b/resources/mediawiki.ui/sourcefiles/scss/mediawiki.ui.vector.scss
deleted file mode 100644 (file)
index ac113ee..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * Provide Agora appearance for mw-ui-* classes when using the Vector skin.
- * Compass builds these Agora styles from source Sass files in
- * extensions/Agora/modules/scss
- */
-
-@charset "UTF-8";
-
-@import "compass";
-
-@import "settings/all";
-
-@import "mixins/all";
-
-@import "components/vector";
diff --git a/resources/mediawiki.ui/sourcefiles/scss/mixins/_all.scss b/resources/mediawiki.ui/sourcefiles/scss/mixins/_all.scss
deleted file mode 100644 (file)
index adc48cd..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-@import "utilities";
-@import "type";
-@import "effects";
-@import "forms";
\ No newline at end of file
diff --git a/resources/mediawiki.ui/sourcefiles/scss/mixins/_effects.scss b/resources/mediawiki.ui/sourcefiles/scss/mixins/_effects.scss
deleted file mode 100644 (file)
index 2efff82..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/* _effects.scss */
-
-/* Mixins for visual effects in CSS3 */
-
-// ----------------------------------------------------------------------------
-// Gradients
-// ----------------------------------------------------------------------------
-@mixin vertical-gradient ($startColor: lighten($agoraGray, 95%), $endColor: $agoraGray) {
-       // Fallback
-    background-color: $endColor;
-    *background-color: $endColor; // IE7
-
-    // IE6-8
-    @include filter-gradient($startColor, $endColor, vertical);
-
-    // IE9+, Opera, Gecko, WebKit
-    @include background-image(linear-gradient(top, $startColor, $endColor));
-}
-
-// ----------------------------------------------------------------------------
-// Button styling
-// ----------------------------------------------------------------------------
-@mixin buttonColors ($baseColor: $agoraGray) {
-       // Background color
-       @include vertical-gradient(lighten($baseColor, 7.5%), $baseColor);
-
-       @if $baseColor == $agoraGray {
-               color: black;
-               @include text-shadow(0 1px 1px rgba($baseColor, 0.3));
-       } @else {
-               color: white;
-               @include text-shadow(0 1px 1px rgba($baseColor, 0.75));
-       }
-
-       border: 1px solid darken($baseColor, 2%);
-
-       &:hover,
-       &.mw-ui-hover {
-               @include vertical-gradient(lighten($baseColor, 12.5%), lighten($baseColor, 7.5%));
-               text-decoration: none;
-       }
-
-       &:active,
-       &.mw-ui-active {
-               background: {
-                       image: none;
-                       color: darken($baseColor, 3%);
-               }
-
-               text-shadow: none;
-       }
-
-       &:disabled,
-       &.mw-ui-disabled {
-               background: {
-                       image: none;
-                       color: $baseColor;
-               }
-               opacity: 0.5;
-               text-shadow: none;
-       }
-}
diff --git a/resources/mediawiki.ui/sourcefiles/scss/mixins/_forms.scss b/resources/mediawiki.ui/sourcefiles/scss/mixins/_forms.scss
deleted file mode 100644 (file)
index 0f3f6ad..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-// Font is not included.
-// For Vector, that should be layered on top with vector-type
-@mixin agora-field-styling() {
-
-       border: {
-               style: solid;
-               width: 1px;
-               color: $agoraGray;
-       };
-
-       &:focus {
-               // Styling focus of native checkboxes etc on Mac is almost impossible.
-               &:not([type=checkbox]):not([type=radio]) {
-                       @include reset-focus;  // Removes OS field focus
-               };
-
-               // @include box-shadow generates unneeded prefixes
-               // https://github.com/chriseppstein/compass/issues/1054 , so specify
-               // directly.
-               box-shadow: $agoraBlueShadow 0px 0px 5px;
-
-               border: {
-                       color: $agoraBlueShadow;
-               };
-       }
-
-       color: $agoraTextColor;
-       padding: 0.35em 0 0.35em 0.5em;
-}
-
-@mixin agora-label-styling() {
-       font: {
-               //weight: bold;
-               size: 0.9em;
-       };
-       color: darken($agoraGray, 50%);
-
-       & * {
-               font-weight: normal;
-       }
-}
-
-@mixin agora-inline-label-styling() {
-       margin-bottom: 0.5em;
-       cursor: pointer;
-       vertical-align: bottom;
-       line-height: normal;
-
-       font: {
-               weight: normal;
-       };
-
-       & > input[type="checkbox"],
-       & > input[type="radio"] {
-               width: auto;
-               height: auto;
-               margin: 0 0.1em 0em 0;
-               padding: 0;
-               border: {
-                       style: solid;
-                       width: 1px;
-                       color: $agoraGray;
-               }
-               cursor: pointer;
-       }
-}
diff --git a/resources/mediawiki.ui/sourcefiles/scss/mixins/_type.scss b/resources/mediawiki.ui/sourcefiles/scss/mixins/_type.scss
deleted file mode 100644 (file)
index 8a93a08..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-@mixin vector-type {
-    font: {
-        size: $baseFontSize;
-    }
-    line-height: $baseLineHeight;
-}
\ No newline at end of file
diff --git a/resources/mediawiki.ui/sourcefiles/scss/mixins/_utilities.scss b/resources/mediawiki.ui/sourcefiles/scss/mixins/_utilities.scss
deleted file mode 100644 (file)
index 71a93b6..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-@mixin agora-flush-left() {
-    float: left;
-    margin-left: 0;
-    padding-left: 0;
-}
-
-@mixin agora-flush-right() {
-    float: right;
-    margin-right: 0;
-    padding-right: 0;
-}
-
-@mixin agora-center-block() {
-    display: block;
-    margin: {
-        left: auto;
-        right: auto;
-    };
-}
\ No newline at end of file
diff --git a/resources/mediawiki.ui/sourcefiles/scss/settings/_all.scss b/resources/mediawiki.ui/sourcefiles/scss/settings/_all.scss
deleted file mode 100644 (file)
index 21ac292..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-@import "colors";
-@import "typography";
\ No newline at end of file
diff --git a/resources/mediawiki.ui/sourcefiles/scss/settings/_colors.scss b/resources/mediawiki.ui/sourcefiles/scss/settings/_colors.scss
deleted file mode 100644 (file)
index 0c18bdb..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-// Grays
-// -----------------------------------------
-$agoraGray: #c9c9c9;
-$agoraTextColor: #252525;
-
-// Blues
-// -----------------------------------------
-$agoraBlue: #3366bb;
-$agoraBlueShadow: #4091ed;
-
-// Greens
-// -----------------------------------------
-$agoraGreen: #27aa65;
-
-// Reds
-// -----------------------------------------
-$agoraRed: #cc0000;
diff --git a/resources/mediawiki.ui/sourcefiles/scss/settings/_typography.scss b/resources/mediawiki.ui/sourcefiles/scss/settings/_typography.scss
deleted file mode 100644 (file)
index 013d12b..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-$baseFontSize: 1em;
-$baseLineHeight: 1.4 * $baseFontSize;
-$baseFontColor: $agoraTextColor;
-
-$smallFontSize: 0.75em;
\ No newline at end of file
diff --git a/resources/mediawiki.ui/vector.less b/resources/mediawiki.ui/vector.less
new file mode 100644 (file)
index 0000000..a347562
--- /dev/null
@@ -0,0 +1,8 @@
+/**
+ * Provide Agora appearance for mw-ui-* classes when using the Vector skin.
+ */
+
+@import "components/utilities";
+@import "components/vector/buttons";
+@import "components/vector/forms";
+@import "components/vector/containers";
index dde5abf..e1031c6 100644 (file)
                        thumbPhpRegex = /thumb\.php/,
                        regexes = [
                                // Thumbnails
-                               /\/[a-f0-9]\/[a-f0-9]{2}\/([^\s\/]+)\/[^\s\/]+-\1[^\s\/]*$/,
+                               /\/[a-f0-9]\/[a-f0-9]{2}\/([^\s\/]+)\/[^\s\/]+-(?:\1|thumbnail)[^\s\/]*$/,
 
                                // Thumbnails in non-hashed upload directories
-                               /\/([^\s\/]+)\/[^\s\/]+-\1[^\s\/]*$/,
+                               /\/([^\s\/]+)\/[^\s\/]+-(?:\1|thumbnail)[^\s\/]*$/,
 
                                // Full size images
                                /\/[a-f0-9]\/[a-f0-9]{2}\/([^\s\/]+)$/,
                 * Get the URL to this title
                 *
                 * @see mw.util#getUrl
+                * @param {Object} [params] A mapping of query parameter names to values,
+                *     e.g. `{ action: 'edit' }`.
                 * @return {string}
                 */
-               getUrl: function () {
-                       return mw.util.getUrl( this.toString() );
+               getUrl: function ( params ) {
+                       return mw.util.getUrl( this.toString(), params );
                },
 
                /**
diff --git a/resources/mediawiki/mediawiki.hlist.css b/resources/mediawiki/mediawiki.hlist.css
new file mode 100644 (file)
index 0000000..0bd86fe
--- /dev/null
@@ -0,0 +1,83 @@
+/**
+       Stylesheet for mediawiki.hlist module
+       @author [[User:Edokter]]
+ */
+.skin-monobook .hlist dl,
+.skin-modern .hlist dl,
+.skin-vector .hlist dl {
+       line-height: 1.5em;
+}
+.hlist dl,
+.hlist ol,
+.hlist ul {
+       margin: 0;
+       padding: 0;
+}
+/* Display list items inline */
+.hlist dd,
+.hlist dt,
+.hlist li {
+       margin: 0;
+       display: inline;
+}
+/* Display nested lists inline */
+.hlist dl dl, .hlist dl ol, .hlist dl ul,
+.hlist ol dl, .hlist ol ol, .hlist ol ul,
+.hlist ul dl, .hlist ul ol, .hlist ul ul {
+       display: inline;
+}
+/* Generate interpuncts */
+.hlist dt:after {
+       content: ":";
+}
+.hlist dd:after,
+.hlist li:after {
+       content: " ·";
+       font-weight: bold;
+}
+.hlist dd:last-child:after,
+.hlist dt:last-child:after,
+.hlist li:last-child:after {
+       content: none;
+}
+/* For IE8 */
+.hlist dd.hlist-last-child:after,
+.hlist dt.hlist-last-child:after,
+.hlist li.hlist-last-child:after {
+       content: none;
+}
+/* Add parentheses around nested lists */
+.hlist dd dd:first-child:before, .hlist dd dt:first-child:before, .hlist dd li:first-child:before,
+.hlist dt dd:first-child:before, .hlist dt dt:first-child:before, .hlist dt li:first-child:before,
+.hlist li dd:first-child:before, .hlist li dt:first-child:before, .hlist li li:first-child:before {
+       content: "(";
+       font-weight: normal;
+}
+.hlist dd dd:last-child:after, .hlist dd dt:last-child:after, .hlist dd li:last-child:after,
+.hlist dt dd:last-child:after, .hlist dt dt:last-child:after, .hlist dt li:last-child:after,
+.hlist li dd:last-child:after, .hlist li dt:last-child:after, .hlist li li:last-child:after {
+       content: ")";
+       font-weight: normal;
+}
+/* For IE8 */
+.hlist dd dd.hlist-last-child:after, .hlist dd dt.hlist-last-child:after, .hlist dd li.hlist-last-child:after,
+.hlist dt dd.hlist-last-child:after, .hlist dt dt.hlist-last-child:after, .hlist dt li.hlist-last-child:after,
+.hlist li dd.hlist-last-child:after, .hlist li dt.hlist-last-child:after, .hlist li li.hlist-last-child:after {
+       content: ")";
+       font-weight: normal;
+}
+/* Put ordinals in front of ordered list items */
+.hlist ol {
+       counter-reset: list-item;
+}
+.hlist ol > li {
+       counter-increment: list-item;
+}
+.hlist ol > li:before {
+       content: counter(list-item) " ";
+}
+.hlist dd ol > li:first-child:before,
+.hlist dt ol > li:first-child:before,
+.hlist li ol > li:first-child:before {
+       content: "(" counter(list-item) " ";
+}
diff --git a/resources/mediawiki/mediawiki.hlist.js b/resources/mediawiki/mediawiki.hlist.js
new file mode 100644 (file)
index 0000000..ef98136
--- /dev/null
@@ -0,0 +1,24 @@
+/**
+       IE 8: Add pseudo-selector class to last-child list items
+       @author [[User:Edokter]]
+*/
+jQuery( function( $ ) {
+       if ( $.client.profile().name === 'msie' ) {
+               if ( $.client.profile().versionNumber === 8 ) {
+                       $( '.hlist' ).find( 'dd:last-child, dt:last-child, li:last-child' )
+                               .addClass( 'hlist-last-child' );
+               }
+                       /* IE 7 and below: Generate interpuncts and parentheses */
+               if ( $.client.profile().versionNumber <= 7 ) {
+                       var $hlists = $( '.hlist' );
+                       $hlists.find( 'dt:not(:last-child)' )
+                               .append( ': ' );
+                       $hlists.find( 'dd:not(:last-child)' )
+                               .append( '<b>·</b> ' );
+                       $hlists.find( 'li:not(:last-child)' )
+                               .append( '<b>·</b> ' );
+                       $hlists.find( 'dl dl, dl ol, dl ul, ol dl, ol ol, ol ul, ul dl, ul ol, ul ul' )
+                               .prepend( '( ' ).append( ') ' );
+               }
+       }
+} );
index 1f89792..8a8215d 100644 (file)
@@ -1749,6 +1749,38 @@ var mw = ( function ( $, undefined ) {
                                        // Cache hit stats
                                        stats: { hits: 0, misses: 0, expired: 0 },
 
+                                       // Experiment data
+                                       experiment: ( function () {
+                                               var start = ( new Date() ).getTime(), id = 0, seed = 0;
+
+                                               try {
+                                                       id = JSON.parse( localStorage.getItem( 'moduleStorageExperiment' ) );
+                                                       if ( typeof id !== 'number' ) {
+                                                               id = Math.floor( Math.random() * Math.random() * 1e16 );
+                                                               localStorage.setItem( 'moduleStorageExperiment', id );
+                                                       }
+                                                       seed = id % 2000;
+                                               } catch ( e ) {}
+
+                                               return {
+                                                       // Unique identifier for this browser. This allows us to group all
+                                                       // datapoints generated by a particular browser, which in turn allows us
+                                                       // to see how the initial load compares to subsequent page loads.
+                                                       id: id,
+
+                                                       // Group assignment may be 0 (not in experiment), 1 (control group), or 2
+                                                       // (experimental group). Browsers that don't implement all the prerequisite APIs
+                                                       // (JSON and Web Storage) are ineligible. Eligible browsers have a 0.1% chance
+                                                       // of being included in the experiment, in which case they are equally likely to
+                                                       // be assigned to either the experimental or control group.
+                                                       group: seed === 1 ? 1 : ( seed === 2 ? 2 : 0 ),
+
+                                                       // Assess module storage performance by measuring the time between this
+                                                       // reference point and the window load event.
+                                                       start: start
+                                               };
+                                       }() ),
+
                                        /**
                                         * Construct a JSON-serializable object representing the content of the store.
                                         * @return {Object} Module store contents.
@@ -1799,20 +1831,19 @@ var mw = ( function ( $, undefined ) {
                                         * code for a full account of why we need a try / catch: <http://git.io/4NEwKg>.
                                         */
                                        init: function () {
-                                               var raw, data, optedIn;
+                                               var raw, data;
 
                                                if ( mw.loader.store.enabled !== null ) {
                                                        // #init already ran.
                                                        return;
                                                }
 
-                                               // Temporarily allow users to opt-in during mw.loader.store test phase by
-                                               // manually setting a cookie (bug 56397).
-                                               optedIn = /ResourceLoaderStorageEnabled=1/.test( document.cookie );
-
-                                               if ( !( mw.config.get( 'wgResourceLoaderStorageEnabled' ) || optedIn ) || mw.config.get( 'debug' ) ) {
-                                                       // Disabled by configuration, or because debug mode is set.
-                                                       mw.loader.store.enabled = false;
+                                               if (
+                                                       // We're in debug mode
+                                                       mw.config.get( 'debug' ) ||
+                                                       // Module storage is neither enabled by default, nor enabled for this user's group.
+                                                       !( mw.config.get( 'wgResourceLoaderStorageEnabled' ) || mw.loader.store.experiment.group === 2 )
+                                               ) {
                                                        return;
                                                }
 
@@ -1944,14 +1975,19 @@ var mw = ( function ( $, undefined ) {
                                                var timer;
 
                                                function flush() {
-                                                       var data;
+                                                       var data, key = mw.loader.store.getStoreKey();
                                                        if ( mw.loader.store.enabled !== true ) {
                                                                return false;
                                                        }
                                                        mw.loader.store.prune();
                                                        try {
+                                                               // Replacing the content of the module store might fail if the new
+                                                               // contents would exceed the browser's localStorage size limit. To
+                                                               // avoid clogging the browser with stale data, always remove the old
+                                                               // value before attempting to set the new one.
+                                                               localStorage.removeItem( key );
                                                                data = JSON.stringify( mw.loader.store );
-                                                               localStorage.setItem( mw.loader.store.getStoreKey(), data );
+                                                               localStorage.setItem( key, data );
                                                        } catch (e) {}
                                                }
 
index cfc717f..86f06b8 100644 (file)
                 * Get the link to a page name (relative to `wgServer`),
                 *
                 * @param {string} str Page name to get the link for.
-                * @param {Object} params A mapping of query parameter names to values,
-                *     e.g. { action: 'edit' }. Optional.
+                * @param {Object} [params] A mapping of query parameter names to values,
+                *     e.g. `{ action: 'edit' }`.
                 * @return {string} Location for a page with name of `str` or boolean false on error.
                 */
                getUrl: function ( str, params ) {
                                        // nextnode is a DOM element (was the only option before MW 1.17, in wikibits.js)
                                        // or nextnode is a CSS selector for jQuery
                                        nextnode = $ul.find( nextnode );
-                               } else if ( !nextnode.jquery || nextnode[0].parentNode !== $ul[0] ) {
+                               } else if ( !nextnode.jquery || ( nextnode.length && nextnode[0].parentNode !== $ul[0] ) ) {
                                        // Fallback
                                        $ul.append( $item );
                                        return $item[0];
index 0370e05..142cb8d 100644 (file)
@@ -169,7 +169,6 @@ class CologneBlueTemplate extends BaseTemplate {
 
                        $lines[] = $this->getSkin()->getLanguage()->pipeList( array_filter( $element ) );
 
-
                        // Second row. Privileged actions.
                        $element = array();
 
@@ -183,7 +182,6 @@ class CologneBlueTemplate extends BaseTemplate {
 
                        $lines[] = $this->getSkin()->getLanguage()->pipeList( array_filter( $element ) );
 
-
                        // Third row. Language links.
                        $lines[] = $this->otherLanguages();
                }
@@ -467,7 +465,6 @@ class CologneBlueTemplate extends BaseTemplate {
                        $bar = $this->sidebarAdditions( $bar );
                }
 
-
                // Fill out special sidebar items with content
                $orig_bar = $bar;
                $bar = array();
@@ -481,7 +478,6 @@ class CologneBlueTemplate extends BaseTemplate {
                        }
                }
 
-
                // Output the sidebar
                // CologneBlue uses custom messages for some portlets, but we should keep the ids for consistency
                $idToMessage = array(
index 6d66cac..f7fb0d8 100644 (file)
@@ -321,5 +321,3 @@ echo $footerEnd;
 <?php
        }
 } // end of class
-
-
index 5862877..c7804a0 100644 (file)
@@ -112,6 +112,7 @@ div.top,
 div#column-one,
 #colophon,
 .mw-editsection,
+.mw-editsection-like,
 .toctoggle,
 .tochidden,
 div#f-poweredbyico,
diff --git a/skins/common/images/feed-icon.svg b/skins/common/images/feed-icon.svg
new file mode 100644 (file)
index 0000000..0aa76f5
--- /dev/null
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>\r
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\r
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="128px" height="128px" id="RSSicon" viewBox="0 0 256 256">\r
+<defs>\r
+<linearGradient x1="0.085" y1="0.085" x2="0.915" y2="0.915" id="RSSg">\r
+<stop  offset="0.0" stop-color="#E3702D"/><stop  offset="0.1071" stop-color="#EA7D31"/>\r
+<stop  offset="0.3503" stop-color="#F69537"/><stop  offset="0.5" stop-color="#FB9E3A"/>\r
+<stop  offset="0.7016" stop-color="#EA7C31"/><stop  offset="0.8866" stop-color="#DE642B"/>\r
+<stop  offset="1.0" stop-color="#D95B29"/>\r
+</linearGradient>\r
+</defs>\r
+<rect width="256" height="256" rx="55" ry="55" x="0"  y="0"  fill="#CC5D15"/>\r
+<rect width="246" height="246" rx="50" ry="50" x="5"  y="5"  fill="#F49C52"/>\r
+<rect width="236" height="236" rx="47" ry="47" x="10" y="10" fill="url(#RSSg)"/>\r
+<circle cx="68" cy="189" r="24" fill="#FFF"/>\r
+<path d="M160 213h-34a82 82 0 0 0 -82 -82v-34a116 116 0 0 1 116 116z" fill="#FFF"/>\r
+<path d="M184 213A140 140 0 0 0 44 73 V 38a175 175 0 0 1 175 175z" fill="#FFF"/>\r
+</svg>\r
index ac7265a..2e61f63 100644 (file)
@@ -485,7 +485,11 @@ a.new {
 /* feed links */
 a.feedlink {
        /* @embed */
-       background: url(images/feed-icon.png) center left no-repeat;
+       background-image: url(images/feed-icon.png);
+       background-image: linear-gradient(transparent, transparent), url(images/feed-icon.svg);
+       background-position: center left;
+       background-repeat: no-repeat;
+       background-size: 12px 12px;
        padding-left: 16px;
 }
 
@@ -1183,7 +1187,8 @@ table.floatleft {
 }
 
 /* Display editsection links smaller and next to headings */
-.mw-editsection {
+.mw-editsection,
+.mw-editsection-like {
        font-size: small;
        font-weight: normal;
        margin-left: 1em;
index e97bbdb..150d2d2 100644 (file)
@@ -4,6 +4,7 @@
 #jump-to-nav,
 #footer,
 .mw-editsection,
+.mw-editsection-like,
 .noprint {
        display: none;
 }
index f8be097..4651b48 100644 (file)
@@ -183,7 +183,7 @@ div.vectorTabs li.icon a {
        background-repeat: no-repeat;
 }
 /* OVERRIDDEN BY COMPLIANT BROWSERS */
-div.vectorTabs span a  {
+div.vectorTabs span a {
        display: inline-block;
        padding-top: 1.25em;
 }
index dec8e22..46a894c 100644 (file)
@@ -89,8 +89,8 @@ $wgAutoloadClasses += array(
        'MockFSFile' => "$testDir/phpunit/mocks/filebackend/MockFSFile.php",
        'MockFileBackend' => "$testDir/phpunit/mocks/filebackend/MockFileBackend.php",
        'MockBitmapHandler' => "$testDir/phpunit/mocks/media/MockBitmapHandler.php",
-       'MockImageHandler' => "$testDir/phpunit/mocks/media/MockBitmapHandler.php",
-       'MockSvgHandler' => "$testDir/phpunit/mocks/media/MockBitmapHandler.php",
+       'MockImageHandler' => "$testDir/phpunit/mocks/media/MockImageHandler.php",
+       'MockSvgHandler' => "$testDir/phpunit/mocks/media/MockSvgHandler.php",
 
        # tests/phpunit/languages
        'LanguageClassesTestCase' => "$testDir/phpunit/languages/LanguageClassesTestCase.php",
index d4d9f43..cc935da 100644 (file)
@@ -11709,6 +11709,70 @@ MSIE CSS safety test: comment in expression
 
 !! end
 
+!! test
+CSS safety test: vertical tab
+!! input
+<p style="font-size: 100px; background-image:url\b(https://www.google.com/images/srpr/logo6w.png)">A</p>
+!! result
+<p style="/* invalid control char */">A</p>
+
+!! end
+
+!! test
+MSIE CSS safety test: Fullwidth
+!! input
+<p style="font-size: 100px; color: expression((title='XSSed'),'red')">A</p>
+<div style="top:EXPRESSION(alert())">B</div>
+!! result
+<p style="/* insecure input */">A</p>
+<div style="/* insecure input */">B</div>
+
+!! end
+
+!! test
+MSIE CSS safety test: IPA extensions
+!! input
+<div style="background-image:uʀʟ(javascript:alert())">A</div>
+<p style="font-size: 100px; color: expʀessɪoɴ((title='XSSed'),'red')">B</p>
+!! result
+<div style="/* insecure input */">A</div>
+<p style="/* insecure input */">B</p>
+
+!! end
+
+!! test
+MSIE CSS safety test: sup/sub script
+!! input
+<div style="background-image:url⁽javascript:alert())">A</div>
+<div style="background-image:url₍javascript:alert())">B</div>
+<p style="font-size: 100px; color: expressioⁿ((title='XSSed'),'red')">C</p>
+!! result
+<div style="/* insecure input */">A</div>
+<div style="/* insecure input */">B</div>
+<p style="/* insecure input */">C</p>
+
+!! end
+
+!! test
+MSIE CSS safety test: Repetition markers
+!! input
+<p style="font-size: 100px; color: expres〱ion((title='XSSed'),'red')">A</p>
+<p style="font-size: 100px; color: expresゝion((title='XSSed'),'red')">B</p>
+<p style="font-size: 100px; color: expresーion((title='XSSed'),'red')">C</p>
+<p style="font-size: 100px; color: expresヽion((title='XSSed'),'red')">D</p>
+<p style="font-size: 100px; color: expresﹽion((title='XSSed'),'red')">E</p>
+<p style="font-size: 100px; color: expresﹼion((title='XSSed'),'red')">F</p>
+<p style="font-size: 100px; color: expresーion((title='XSSed'),'red')">G</p>
+!! result
+<p style="/* insecure input */">A</p>
+<p style="/* insecure input */">B</p>
+<p style="/* insecure input */">C</p>
+<p style="/* insecure input */">D</p>
+<p style="/* insecure input */">E</p>
+<p style="/* insecure input */">F</p>
+<p style="/* insecure input */">G</p>
+
+!! end
 
 !! test
 Table attribute legitimate extension
index 042956a..cc49fde 100644 (file)
@@ -100,17 +100,14 @@ class MediaWikiPHPUnitCommand extends PHPUnit_TextUI_Command {
                print <<<EOT
 
 ParserTest-specific options:
-
   --regex="<regex>"        Only run parser tests that match the given regex
   --file="<filename>"      File describing parser tests
   --keep-uploads           Re-use the same upload directory for each test, don't delete it
 
-
 Database options:
   --use-normal-tables      Use normal DB tables.
   --reuse-db               Init DB only if tables are missing and keep after finish.
 
-
 Debugging options:
   --debug-tests            Log testing activity to the PHPUnitCommand log channel.
 
index 6ce78b5..7a7ec8f 100644 (file)
@@ -35,6 +35,13 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
        private static $dbSetup = false;
        private static $oldTablePrefix = false;
 
+       /**
+        * Original value of PHP's error_reporting setting.
+        *
+        * @var int
+        */
+       private $phpErrorLevel;
+
        /**
         * Holds the paths of temporary files/directories created through getNewTempFile,
         * and getNewTempDirectory
@@ -172,6 +179,8 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                parent::setUp();
                $this->called['setUp'] = 1;
 
+               $this->phpErrorLevel = intval( ini_get( 'error_reporting' ) );
+
                /*
                // @todo global variables to restore for *every* test
                array(
@@ -233,6 +242,18 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                }
                $this->mwGlobals = array();
 
+               $phpErrorLevel = intval( ini_get( 'error_reporting' ) );
+
+               if ( $phpErrorLevel !== $this->phpErrorLevel ) {
+                       ini_set( 'error_reporting', $this->phpErrorLevel );
+
+                       $oldHex = strtoupper( dechex( $this->phpErrorLevel ) );
+                       $newHex = strtoupper( dechex( $phpErrorLevel ) );
+                       $message = "PHP error_reporting setting was left dirty: was 0x$oldHex before test, 0x$newHex after test!";
+
+                       $this->fail( $message );
+               }
+
                parent::tearDown();
                wfProfileOut( __METHOD__ );
        }
index 66847ab..2efb7a0 100644 (file)
@@ -50,12 +50,12 @@ CREATE TABLE /*$wgDBprefix*/revision (
   rev_minor_edit tinyint  default '0',
   rev_deleted tinyint  default '0',
   rev_len int,
-  rev_parent_id INTEGER default NULL) /*$wgDBTableOptions*/  ;
+  rev_parent_id INTEGER default NULL) /*$wgDBTableOptions*/;
 
 CREATE TABLE /*$wgDBprefix*/text (
   old_id INTEGER  PRIMARY KEY AUTOINCREMENT,
   old_text mediumblob ,
-  old_flags tinyblob ) /*$wgDBTableOptions*/  ;
+  old_flags tinyblob ) /*$wgDBTableOptions*/;
 
 CREATE TABLE /*$wgDBprefix*/archive (
   ar_namespace INTEGER  default '0',
@@ -124,7 +124,7 @@ CREATE TABLE /*$wgDBprefix*/site_stats (
 
 CREATE TABLE /*$wgDBprefix*/hitcounter (
   hc_id INTEGER
-)  ;
+);
 
 CREATE TABLE /*$wgDBprefix*/ipblocks (
   ipb_id INTEGER  PRIMARY KEY AUTOINCREMENT,
@@ -245,7 +245,7 @@ CREATE TABLE /*$wgDBprefix*/math (
 CREATE TABLE /*$wgDBprefix*/searchindex (
   si_page INTEGER ,
   si_title varchar(255)  default '',
-  si_text mediumtext ) ;
+  si_text mediumtext );
 
 CREATE TABLE /*$wgDBprefix*/interwiki (
   iw_prefix varchar(32) ,
index c749598..7f9a023 100644 (file)
@@ -24,7 +24,7 @@ class ArticleTablesTest extends MediaWikiLangTestCase {
                $templates1 = $title->getTemplateLinksFrom();
 
                $wgLang = Language::factory( 'de' );
-               $page->mPreparedEdit = false; // In order to force the rerendering of the same wikitext
+               $page = WikiPage::factory( $title ); // In order to force the rerendering of the same wikitext
 
                // We need an edit, a purge is not enough to regenerate the tables
                $page->doEditContent( new WikitextContent( '{{:{{int:history}}}}' ), 'Test code for bug 14404', EDIT_UPDATE, false, $user );
index 7d2b04f..0dee6b0 100644 (file)
@@ -202,7 +202,6 @@ class EditPageTest extends MediaWikiLangTestCase {
                        "expected article not being created if empty"
                );
 
-
                $this->assertEdit(
                        'MediaWiki:January',
                        null,
index 9e76045..e2a3711 100644 (file)
@@ -38,7 +38,6 @@ class ExceptionTest extends MediaWikiTestCase {
                );
        }
 
-
        /**
         * Lame JSON schema validation.
         *
@@ -49,7 +48,7 @@ class ExceptionTest extends MediaWikiTestCase {
         * @param $key String Name of the key to validate in the serialized JSON
         * @dataProvider provideJsonSerializedKeys
         */
-       function testJsonserializeexceptionKeys($expectedKeyType, $exClass, $key) {
+       function testJsonserializeexceptionKeys( $expectedKeyType, $exClass, $key ) {
 
                # Make sure we log a backtrace:
                $this->setMwGlobals( array( 'wgLogExceptionBacktrace' => true ) );
@@ -61,7 +60,7 @@ class ExceptionTest extends MediaWikiTestCase {
                        "JSON serialized exception is missing key '$key'"
                );
                $this->assertInternalType( $expectedKeyType, $json->$key,
-                       "JSON serialized key '$key' has type " . gettype($json->$key)
+                       "JSON serialized key '$key' has type " . gettype( $json->$key )
                        . " (expected: $expectedKeyType)."
                );
        }
@@ -71,7 +70,7 @@ class ExceptionTest extends MediaWikiTestCase {
         */
        function provideJsonSerializedKeys() {
                $testCases = array();
-               foreach( array( 'Exception', 'MWException' ) as $exClass ) {
+               foreach ( array( 'Exception', 'MWException' ) as $exClass ) {
                        $exTests = array(
                                array( 'string',  $exClass,  'id' ),
                                array( 'string',  $exClass,  'file' ),
@@ -81,7 +80,7 @@ class ExceptionTest extends MediaWikiTestCase {
                                # Backtrace only enabled with wgLogExceptionBacktrace = true
                                array( 'array',   $exClass,  'backtrace' ),
                        );
-                       $testCases = array_merge($testCases, $exTests);
+                       $testCases = array_merge( $testCases, $exTests );
                }
                return $testCases;
        }
index f408f47..910b766 100644 (file)
@@ -69,5 +69,4 @@ class FallbackTest extends MediaWikiTestCase {
                        );
                }
        }
-
-}
\ No newline at end of file
+}
index 6154df1..f67f696 100644 (file)
@@ -141,9 +141,8 @@ class GlobalTest extends MediaWikiTestCase {
                $this->assertEquals( $result, wfArrayToCgi( $array ) );
        }
 
-
        /**
-        * @covers ::testWfArrayDiff2
+        * @covers ::wfArrayToCgi
         */
        public function testArrayToCGI2() {
                $this->assertEquals(
@@ -293,11 +292,11 @@ class GlobalTest extends MediaWikiTestCase {
                unlink( $wgDebugLogFile );
 
                wfDebugMem();
-               $this->assertGreaterThan( 5000, preg_replace( '/\D/', '', file_get_contents( $wgDebugLogFile ) ) );
+               $this->assertGreaterThan( 1000, preg_replace( '/\D/', '', file_get_contents( $wgDebugLogFile ) ) );
                unlink( $wgDebugLogFile );
 
                wfDebugMem( true );
-               $this->assertGreaterThan( 5000000, preg_replace( '/\D/', '', file_get_contents( $wgDebugLogFile ) ) );
+               $this->assertGreaterThan( 1000000, preg_replace( '/\D/', '', file_get_contents( $wgDebugLogFile ) ) );
                unlink( $wgDebugLogFile );
 
                $wgDebugLogFile = $old_log_file;
index aebd65f..dd76e3b 100644 (file)
@@ -19,7 +19,7 @@ class MWExceptionHandlerTest extends MediaWikiTestCase {
                        $array = array( 'a', 'b' );
                        $object = new StdClass();
                        self::helperThrowAnException( $array, $object, $refvar );
-               } catch (Exception $e) {
+               } catch ( Exception $e ) {
                }
 
                # Make sure our strack trace contains an array and an object passed to
@@ -37,7 +37,7 @@ class MWExceptionHandlerTest extends MediaWikiTestCase {
                                $hasArray = $hasArray || is_array( $arg );
                        }
 
-                       if( $hasObject && $hasArray ) {
+                       if ( $hasObject && $hasArray ) {
                                break;
                        }
                }
@@ -55,8 +55,8 @@ class MWExceptionHandlerTest extends MediaWikiTestCase {
                                continue;
                        }
                        foreach ( $frame['args'] as $arg ) {
-                               $this->assertNotInternalType( 'array', $arg);
-                               $this->assertNotInternalType( 'object', $arg);
+                               $this->assertNotInternalType( 'array', $arg );
+                               $this->assertNotInternalType( 'object', $arg );
                        }
                }
 
index 8fea8cc..e60dc54 100644 (file)
@@ -240,7 +240,6 @@ class PathRouterTest extends MediaWikiTestCase {
                $this->assertEquals( $matches, array( 'title' => "Lorem_ipsum_dolor_sit_amet,_consectetur_adipisicing_elit,_sed_do_eiusmod_tempor_incididunt_ut_labore_et_dolore_magna_aliqua._Ut_enim_ad_minim_veniam,_quis_nostrud_exercitation_ullamco_laboris_nisi_ut_aliquip_ex_ea_commodo_consequat._Duis_aute_irure_dolor_in_reprehenderit_in_voluptate_velit_esse_cillum_dolore_eu_fugiat_nulla_pariatur._Excepteur_sint_occaecat_cupidatat_non_proident,_sunt_in_culpa_qui_officia_deserunt_mollit_anim_id_est_laborum." ) );
        }
 
-
        /**
         * Ensure that the php passed site of parameter values are not urldecoded
         */
diff --git a/tests/phpunit/includes/RecentChangeTest.php b/tests/phpunit/includes/RecentChangeTest.php
deleted file mode 100644 (file)
index cfa3e77..0000000
+++ /dev/null
@@ -1,280 +0,0 @@
-<?php
-/**
- * @group Database
- */
-class RecentChangeTest extends MediaWikiTestCase {
-       protected $title;
-       protected $target;
-       protected $user;
-       protected $user_comment;
-       protected $context;
-
-       public function __construct() {
-               parent::__construct();
-
-               $this->title = Title::newFromText( 'SomeTitle' );
-               $this->target = Title::newFromText( 'TestTarget' );
-               $this->user = User::newFromName( 'UserName' );
-
-               $this->user_comment = '<User comment about action>';
-               $this->context = RequestContext::newExtraneousContext( $this->title );
-       }
-
-       /**
-        * The testIrcMsgForAction* tests are supposed to cover the hacky
-        * LogFormatter::getIRCActionText / bug 34508
-        *
-        * Third parties bots listen to those messages. They are clever enough
-        * to fetch the i18n messages from the wiki and then analyze the IRC feed
-        * to reverse engineer the $1, $2 messages.
-        * One thing bots can not detect is when MediaWiki change the meaning of
-        * a message like what happened when we deployed 1.19. $1 became the user
-        * performing the action which broke basically all bots around.
-        *
-        * Should cover the following log actions (which are most commonly used by bots):
-        * - block/block
-        * - block/unblock
-        * - delete/delete
-        * - delete/restore
-        * - newusers/create
-        * - newusers/create2
-        * - newusers/autocreate
-        * - move/move
-        * - move/move_redir
-        * - protect/protect
-        * - protect/modifyprotect
-        * - protect/unprotect
-        * - upload/upload
-        *
-        * As well as the following Auto Edit Summaries:
-        * - blank
-        * - replace
-        * - rollback
-        * - undo
-        */
-
-       /**
-        * @covers LogFormatter::getIRCActionText
-        */
-       public function testIrcMsgForLogTypeBlock() {
-               $sep = $this->context->msg( 'colon-separator' )->text();
-
-               # block/block
-               $this->assertIRCComment(
-                       $this->context->msg( 'blocklogentry', 'SomeTitle' )->plain() . $sep . $this->user_comment,
-                       'block', 'block',
-                       array(),
-                       $this->user_comment
-               );
-               # block/unblock
-               $this->assertIRCComment(
-                       $this->context->msg( 'unblocklogentry', 'SomeTitle' )->plain() . $sep . $this->user_comment,
-                       'block', 'unblock',
-                       array(),
-                       $this->user_comment
-               );
-       }
-
-       /**
-        * @covers LogFormatter::getIRCActionText
-        */
-       public function testIrcMsgForLogTypeDelete() {
-               $sep = $this->context->msg( 'colon-separator' )->text();
-
-               # delete/delete
-               $this->assertIRCComment(
-                       $this->context->msg( 'deletedarticle', 'SomeTitle' )->plain() . $sep . $this->user_comment,
-                       'delete', 'delete',
-                       array(),
-                       $this->user_comment
-               );
-
-               # delete/restore
-               $this->assertIRCComment(
-                       $this->context->msg( 'undeletedarticle', 'SomeTitle' )->plain() . $sep . $this->user_comment,
-                       'delete', 'restore',
-                       array(),
-                       $this->user_comment
-               );
-       }
-
-       /**
-        * @covers LogFormatter::getIRCActionText
-        */
-       public function testIrcMsgForLogTypeNewusers() {
-               $this->assertIRCComment(
-                       'New user account',
-                       'newusers', 'newusers',
-                       array()
-               );
-               $this->assertIRCComment(
-                       'New user account',
-                       'newusers', 'create',
-                       array()
-               );
-               $this->assertIRCComment(
-                       'created new account SomeTitle',
-                       'newusers', 'create2',
-                       array()
-               );
-               $this->assertIRCComment(
-                       'Account created automatically',
-                       'newusers', 'autocreate',
-                       array()
-               );
-       }
-
-       /**
-        * @covers LogFormatter::getIRCActionText
-        */
-       public function testIrcMsgForLogTypeMove() {
-               $move_params = array(
-                       '4::target' => $this->target->getPrefixedText(),
-                       '5::noredir' => 0,
-               );
-               $sep = $this->context->msg( 'colon-separator' )->text();
-
-               # move/move
-               $this->assertIRCComment(
-                       $this->context->msg( '1movedto2', 'SomeTitle', 'TestTarget' )->plain() . $sep . $this->user_comment,
-                       'move', 'move',
-                       $move_params,
-                       $this->user_comment
-               );
-
-               # move/move_redir
-               $this->assertIRCComment(
-                       $this->context->msg( '1movedto2_redir', 'SomeTitle', 'TestTarget' )->plain() . $sep . $this->user_comment,
-                       'move', 'move_redir',
-                       $move_params,
-                       $this->user_comment
-               );
-       }
-
-       /**
-        * @covers LogFormatter::getIRCActionText
-        */
-       public function testIrcMsgForLogTypePatrol() {
-               # patrol/patrol
-               $this->assertIRCComment(
-                       $this->context->msg( 'patrol-log-line', 'revision 777', '[[SomeTitle]]', '' )->plain(),
-                       'patrol', 'patrol',
-                       array(
-                               '4::curid' => '777',
-                               '5::previd' => '666',
-                               '6::auto' => 0,
-                       )
-               );
-       }
-
-       /**
-        * @covers LogFormatter::getIRCActionText
-        */
-       public function testIrcMsgForLogTypeProtect() {
-               $protectParams = array(
-                       '[edit=sysop] (indefinite) ‎[move=sysop] (indefinite)'
-               );
-               $sep = $this->context->msg( 'colon-separator' )->text();
-
-               # protect/protect
-               $this->assertIRCComment(
-                       $this->context->msg( 'protectedarticle', 'SomeTitle ' . $protectParams[0] )->plain() . $sep . $this->user_comment,
-                       'protect', 'protect',
-                       $protectParams,
-                       $this->user_comment
-               );
-
-               # protect/unprotect
-               $this->assertIRCComment(
-                       $this->context->msg( 'unprotectedarticle', 'SomeTitle' )->plain() . $sep . $this->user_comment,
-                       'protect', 'unprotect',
-                       array(),
-                       $this->user_comment
-               );
-
-               # protect/modify
-               $this->assertIRCComment(
-                       $this->context->msg( 'modifiedarticleprotection', 'SomeTitle ' . $protectParams[0] )->plain() . $sep . $this->user_comment,
-                       'protect', 'modify',
-                       $protectParams,
-                       $this->user_comment
-               );
-       }
-
-       /**
-        * @covers LogFormatter::getIRCActionText
-        */
-       public function testIrcMsgForLogTypeUpload() {
-               $sep = $this->context->msg( 'colon-separator' )->text();
-
-               # upload/upload
-               $this->assertIRCComment(
-                       $this->context->msg( 'uploadedimage', 'SomeTitle' )->plain() . $sep . $this->user_comment,
-                       'upload', 'upload',
-                       array(),
-                       $this->user_comment
-               );
-
-               # upload/overwrite
-               $this->assertIRCComment(
-                       $this->context->msg( 'overwroteimage', 'SomeTitle' )->plain() . $sep . $this->user_comment,
-                       'upload', 'overwrite',
-                       array(),
-                       $this->user_comment
-               );
-       }
-
-       /**
-        * @todo Emulate these edits somehow and extract
-        * raw edit summary from RecentChange object
-        * --
-        */
-       /*
-       public function testIrcMsgForBlankingAES() {
-               // $this->context->msg( 'autosumm-blank', .. );
-       }
-
-       public function testIrcMsgForReplaceAES() {
-               // $this->context->msg( 'autosumm-replace', .. );
-       }
-
-       public function testIrcMsgForRollbackAES() {
-               // $this->context->msg( 'revertpage', .. );
-       }
-
-       public function testIrcMsgForUndoAES() {
-               // $this->context->msg( 'undo-summary', .. );
-       }
-       */
-
-       /**
-        * @param $expected String Expected IRC text without colors codes
-        * @param $type String Log type (move, delete, suppress, patrol ...)
-        * @param $action String A log type action
-        * @param $params
-        * @param $comment String (optional) A comment for the log action
-        * @param $msg String (optional) A message for PHPUnit :-)
-        */
-       protected function assertIRCComment( $expected, $type, $action, $params, $comment = null, $msg = '' ) {
-
-               $logEntry = new ManualLogEntry( $type, $action );
-               $logEntry->setPerformer( $this->user );
-               $logEntry->setTarget( $this->title );
-               if ( $comment !== null ) {
-                       $logEntry->setComment( $comment );
-               }
-               $logEntry->setParameters( $params );
-
-               $formatter = LogFormatter::newFromEntry( $logEntry );
-               $formatter->setContext( $this->context );
-
-               // Apply the same transformation as done in IRCColourfulRCFeedFormatter::getLine for rc_comment
-               $ircRcComment = IRCColourfulRCFeedFormatter::cleanupForIRC( $formatter->getIRCActionComment() );
-
-               $this->assertEquals(
-                       $expected,
-                       $ircRcComment,
-                       $msg
-               );
-       }
-}
index e17c7b0..90ef553 100644 (file)
@@ -170,7 +170,6 @@ class RevisionStorageTest extends MediaWikiTestCase {
                $this->assertRevEquals( $orig, $rev );
        }
 
-
        /**
         * @covers Revision::newFromArchiveRow
         */
index 4e83e35..f830e36 100644 (file)
@@ -57,7 +57,6 @@ class RevisionTest_ContentHandlerUseDB extends RevisionStorageTest {
                }
        }
 
-
        /**
         * @covers Revision::getContentFormat
         */
index b5819ff..fc23919 100644 (file)
@@ -325,7 +325,6 @@ class RevisionTest extends MediaWikiTestCase {
                $this->assertEquals( $expectedText, $rev->getRawText( $audience ) );
        }
 
-
        public function dataGetSize() {
                return array(
                        array( "hello world.", CONTENT_MODEL_WIKITEXT, 12 ),
@@ -428,7 +427,6 @@ class RevisionTest extends MediaWikiTestCase {
                $this->assertEquals( "bar", $content->getText() ); // clones should be independent
        }
 
-
        /**
         * Tests whether $rev->getContent() returns the same object repeatedly if appropriate.
         *
diff --git a/tests/phpunit/includes/SpecialPageTest.php b/tests/phpunit/includes/SpecialPageTest.php
new file mode 100644 (file)
index 0000000..a29d527
--- /dev/null
@@ -0,0 +1,115 @@
+<?php
+
+/**
+ * @covers SpecialPage
+ *
+ * @group Database
+ *
+ * @licence GNU GPL v2+
+ * @author Katie Filbert < aude.wiki@gmail.com >
+ */
+class SpecialPageTest extends MediaWikiTestCase {
+
+       public function setUp() {
+               parent::setUp();
+
+               $this->setMwGlobals( array(
+                       'wgScript' => '/index.php',
+                       'wgContLang' => Language::factory( 'en' )
+               ) );
+       }
+
+       /**
+        * @dataProvider getTitleForProvider
+        */
+       public function testGetTitleFor( $expectedName, $name ) {
+               $title = SpecialPage::getTitleFor( $name );
+               $expected = Title::makeTitle( NS_SPECIAL, $expectedName );
+               $this->assertEquals( $expected, $title );
+       }
+
+       public function getTitleForProvider() {
+               return array(
+                       array( 'UserLogin', 'Userlogin' )
+               );
+       }
+
+       /**
+        * @expectedException PHPUnit_Framework_Error_Notice
+        */
+       public function testInvalidGetTitleFor() {
+               $title = SpecialPage::getTitleFor( 'cat' );
+               $expected = Title::makeTitle( NS_SPECIAL, 'Cat' );
+               $this->assertEquals( $expected, $title );
+       }
+
+       /**
+        * @expectedException PHPUnit_Framework_Error_Notice
+        * @dataProvider getTitleForWithWarningProvider
+        */
+       public function testGetTitleForWithWarning( $expected, $name ) {
+               $title = SpecialPage::getTitleFor( $name );
+               $this->assertEquals( $expected, $title );
+       }
+
+       public function getTitleForWithWarningProvider() {
+               return array(
+                       array( Title::makeTitle( NS_SPECIAL, 'UserLogin' ), 'UserLogin' )
+               );
+       }
+
+       /**
+        * @dataProvider requireLoginAnonProvider
+        */
+       public function testRequireLoginAnon( $expected, $reason, $title ) {
+               $specialPage = new SpecialPage( 'Watchlist', 'viewmywatchlist' );
+
+               $user = User::newFromId( 0 );
+               $specialPage->getContext()->setUser( $user );
+               $specialPage->getContext()->setLanguage( Language::factory( 'en' ) );
+
+               $this->setExpectedException( 'UserNotLoggedIn', $expected );
+
+               if ( $reason === 'blank' && $title === 'blank' ) {
+                       $specialPage->requireLogin();
+               } else {
+                       $specialPage->requireLogin( $reason, $title );
+               }
+       }
+
+       public function requireLoginAnonProvider() {
+               $lang = 'en';
+
+               $msg = wfMessage( 'loginreqlink' )->inLanguage( $lang )->escaped();
+               $loginLink = '<a href="/index.php?title=Special:UserLogin&amp;returnto=Special%3AWatchlist"'
+                       . ' title="Special:UserLogin">' . $msg . '</a>';
+
+               $expected1 = wfMessage( 'exception-nologin-text-manual' )
+                       ->params( $loginLink )->inLanguage( $lang )->text();
+
+               $expected2 = wfMessage( 'about' )->inLanguage( $lang )->text();
+
+               return array(
+                       array( $expected1, null, null ),
+                       array( $expected2, 'about', null ),
+                       array( $expected2, wfMessage( 'about' ), null ),
+                       array( $expected2, 'about', 'about' ),
+                       array( $expected2, 'about', wfMessage( 'about' ) ),
+                       array( $expected1, 'blank', 'blank' )
+               );
+       }
+
+       public function testRequireLoginNotAnon() {
+               $specialPage = new SpecialPage( 'Watchlist', 'viewmywatchlist' );
+
+               $user = User::newFromId( 0 );
+               $user->setId( 1 );
+               $specialPage->getContext()->setUser( $user );
+
+               $specialPage->requireLogin();
+
+               // no exception thrown, logged in use can access special page
+               $this->assertTrue( true );
+       }
+
+}
index 0a7cc04..376009d 100644 (file)
@@ -5,7 +5,7 @@
  */
 class StatusTest extends MediaWikiTestCase {
 
-       public function testCanConstruct(){
+       public function testCanConstruct() {
                new Status();
                $this->assertTrue( true );
        }
@@ -13,18 +13,15 @@ class StatusTest extends MediaWikiTestCase {
        /**
         * @dataProvider provideValues
         * @covers Status::newGood
-        * @covers Status::getValue
-        * @covers Status::isGood
-        * @covers Status::isOK
         */
-       public function testNewGood( $value = null ){
+       public function testNewGood( $value = null ) {
                $status = Status::newGood( $value );
                $this->assertTrue( $status->isGood() );
                $this->assertTrue( $status->isOK() );
                $this->assertEquals( $value, $status->getValue() );
        }
 
-       public static function provideValues(){
+       public static function provideValues() {
                return array(
                        array(),
                        array( 'foo' ),
@@ -36,9 +33,6 @@ class StatusTest extends MediaWikiTestCase {
 
        /**
         * @covers Status::newFatal
-        * @covers Status::isGood
-        * @covers Status::isOK
-        * @covers Status::getMessage
         */
        public function testNewFatalWithMessage() {
                $message = $this->getMockBuilder( 'Message' )
@@ -53,23 +47,18 @@ class StatusTest extends MediaWikiTestCase {
 
        /**
         * @covers Status::newFatal
-        * @covers Status::isGood
-        * @covers Status::isOK
-        * @covers Status::getMessage
         */
        public function testNewFatalWithString() {
                $message = 'foo';
                $status = Status::newFatal( $message );
                $this->assertFalse( $status->isGood() );
                $this->assertFalse( $status->isOK() );
-               $newMessage = $status->getMessage();
-               $this->assertEquals( $message, $newMessage->getKey() );
+               $this->assertEquals( $message, $status->getMessage()->getKey() );
        }
 
        /**
         * @dataProvider provideSetResult
-        * @covers Status::getValue
-        * @covers Status::isOK
+        * @covers Status::setResult
         */
        public function testSetResult( $ok, $value = null ) {
                $status = new Status();
@@ -87,6 +76,52 @@ class StatusTest extends MediaWikiTestCase {
                );
        }
 
+       /**
+        * @dataProvider provideIsOk
+        * @covers Status::isOk
+        */
+       public function testIsOk( $ok ) {
+               $status = new Status();
+               $status->ok = $ok;
+               $this->assertEquals( $ok, $status->isOK() );
+       }
+
+       public static function provideIsOk() {
+               return array(
+                       array( true ),
+                       array( false ),
+               );
+       }
+
+       /**
+        * @covers Status::getValue
+        */
+       public function testGetValue() {
+               $status = new Status();
+               $status->value = 'foobar';
+               $this->assertEquals( 'foobar', $status->getValue() );
+       }
+
+       /**
+        * @dataProvider provideIsGood
+        * @covers Status::isGood
+        */
+       public function testIsGood( $ok, $errors, $expected ) {
+               $status = new Status();
+               $status->ok = $ok;
+               $status->errors = $errors;
+               $this->assertEquals( $expected, $status->isGood() );
+       }
+
+       public static function provideIsGood() {
+               return array(
+                       array( true, array(), true ),
+                       array( true, array( 'foo' ), false ),
+                       array( false, array(), false ),
+                       array( false, array( 'foo' ), false ),
+               );
+       }
+
        /**
         * @dataProvider provideMockMessageDetails
         * @covers Status::warning
@@ -96,13 +131,13 @@ class StatusTest extends MediaWikiTestCase {
                $status = new Status();
                $messages = $this->getMockMessages( $mockDetails );
 
-               foreach( $messages as $message ){
+               foreach ( $messages as $message ) {
                        $status->warning( $message );
                }
                $warnings = $status->getWarningsArray();
 
                $this->assertEquals( count( $messages ), count( $warnings ) );
-               foreach( $messages as $key => $message ) {
+               foreach ( $messages as $key => $message ) {
                        $expectedArray = array_merge( array( $message->getKey() ), $message->getParams() );
                        $this->assertEquals( $warnings[$key], $expectedArray );
                }
@@ -117,13 +152,13 @@ class StatusTest extends MediaWikiTestCase {
                $status = new Status();
                $messages = $this->getMockMessages( $mockDetails );
 
-               foreach( $messages as $message ){
+               foreach ( $messages as $message ) {
                        $status->error( $message );
                }
                $errors = $status->getErrorsArray();
 
                $this->assertEquals( count( $messages ), count( $errors ) );
-               foreach( $messages as $key => $message ) {
+               foreach ( $messages as $key => $message ) {
                        $expectedArray = array_merge( array( $message->getKey() ), $message->getParams() );
                        $this->assertEquals( $errors[$key], $expectedArray );
                }
@@ -146,15 +181,15 @@ class StatusTest extends MediaWikiTestCase {
         * @param array $messageDetails eg. array( 'KEY' => array(/PARAMS/) )
         * @return Message[]
         */
-       protected function getMockMessages( $messageDetails ){
+       protected function getMockMessages( $messageDetails ) {
                $messages = array();
-               foreach( $messageDetails as $key => $paramsArray ){
+               foreach ( $messageDetails as $key => $paramsArray ) {
                        $messages[] = $this->getMockMessage( $key, $paramsArray );
                }
                return $messages;
        }
 
-       public static function provideMockMessageDetails(){
+       public static function provideMockMessageDetails() {
                return array(
                        array( array( 'key1' => array( 'foo' => 'bar' ) ) ),
                        array( array( 'key1' => array( 'foo' => 'bar' ), 'key2' => array( 'foo2' => 'bar2' ) ) ),
@@ -165,7 +200,7 @@ class StatusTest extends MediaWikiTestCase {
         * @covers Status::merge
         * @todo test merge with $overwriteValue true
         */
-       public function testMerge(){
+       public function testMerge() {
                $status1 = new Status();
                $status2 = new Status();
                $message1 = $this->getMockMessage( 'warn1' );
@@ -185,11 +220,94 @@ class StatusTest extends MediaWikiTestCase {
                $status->fatal( 'bad' );
                $this->assertTrue( $status->hasMessage( 'bad' ) );
                $this->assertFalse( $status->hasMessage( 'good' ) );
+       }
 
+       /**
+        * @dataProvider provideCleanParams
+        * @covers Status::cleanParams
+        */
+       public function testCleanParams( $cleanCallback, $params, $expected ) {
+               $method = new ReflectionMethod( 'Status', 'cleanParams' );
+               $method->setAccessible( true );
+               $status = new Status();
+               $status->cleanCallback = $cleanCallback;
+
+               $this->assertEquals( $expected, $method->invoke( $status, $params ) );
+       }
+
+       /**
+        * @todo test cleanParams with a callback
+        */
+       public static function provideCleanParams() {
+               return array(
+                       array( false, array( 'foo' => 'bar' ), array( 'foo' => 'bar' ) ),
+               );
+       }
+
+       /**
+        * @dataProvider provideGetWikiText
+        * @covers Status::getWikiText
+        * @todo test long and short context messages generated through this method
+        *       this can not really be done now due to use of wfMessage()->plain()
+        *       It is possible to mock such methods but only if namespaces are used
+        */
+       public function testGetWikiText( Status $status, $expected ) {
+               $this->assertEquals( $expected, $status->getWikiText() );
+       }
+
+       /**
+        * @return array of arrays with values;
+        *    0 => status object
+        *    1 => expected string (with no context)
+        */
+       public static function provideGetWikiText() {
+               $testCases = array();
+
+               $testCases[ 'GoodStatus' ] = array(
+                       new Status(),
+                       "Internal error: Status::getWikiText called for a good result, this is incorrect\n",
+               );
+
+               $status = new Status();
+               $status->ok = false;
+               $testCases[ 'GoodButNoError' ] = array(
+                       $status,
+                       "Internal error: Status::getWikiText: Invalid result object: no error text but not OK\n",
+               );
+
+               $status = new Status();
+               $status->warning( 'fooBar!' );
+               $testCases[ '1StringWarning' ] = array(
+                       $status,
+                       "<fooBar!>",
+               );
+
+               $status = new Status();
+               $status->warning( 'fooBar!' );
+               $status->warning( 'fooBar2!' );
+               $testCases[ '2StringWarnings' ] = array(
+                       $status,
+                       "* <fooBar!>\n* <fooBar2!>\n",
+               );
+
+               $status = new Status();
+               $status->warning( new Message( 'fooBar!', array( 'foo', 'bar' )  ) );
+               $testCases[ '1MessageWarning' ] = array(
+                       $status,
+                       "<fooBar!>",
+               );
+
+               $status = new Status();
+               $status->warning( new Message( 'fooBar!', array( 'foo', 'bar' ) ) );
+               $status->warning( new Message( 'fooBar2!' ) );
+               $testCases[ '2MessageWarnings' ] = array(
+                       $status,
+                       "* <fooBar!>\n* <fooBar2!>\n",
+               );
+
+               return $testCases;
        }
 
-       //todo test cleanParams
-       //todo test getWikiText
        //todo test getMessage
        //todo test getErrorMessage
        //todo test getHTML
@@ -197,6 +315,5 @@ class StatusTest extends MediaWikiTestCase {
        //todo test getStatusArray
        //todo test getErrorsByType
        //todo test replaceMessage
-       //todo test replaceMessage
 
 }
index 4a0a755..c7cbc7b 100644 (file)
@@ -47,7 +47,7 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                date_default_timezone_set( $localZone );
 
                $this->title = Title::makeTitle( NS_MAIN, "Main Page" );
-               if ( !isset( $this->userUser ) || !( $this->userUser instanceOf User ) ) {
+               if ( !isset( $this->userUser ) || !( $this->userUser instanceof User ) ) {
                        $this->userUser = User::newFromName( $this->userName );
 
                        if ( !$this->userUser->getID() ) {
index 278edfa..dca8aeb 100644 (file)
@@ -11,4 +11,4 @@ class UserMailerTest extends MediaWikiLangTestCase {
                        UserMailer::quotedPrintable( "\xc4\x88u legebla?", "UTF-8" ) );
        }
 
-}
\ No newline at end of file
+}
index 1258eb1..796adf3 100644 (file)
@@ -576,7 +576,6 @@ class WikiPageTest extends MediaWikiLangTestCase {
                );
        }
 
-
        /**
         * @dataProvider provideIsCountable
         * @covers WikiPage::isCountable
@@ -678,7 +677,6 @@ just a test
 more stuff
 ";
 
-
        public function dataReplaceSection() {
                //NOTE: assume the Help namespace to contain wikitext
                return array(
index 161468e..907ce79 100644 (file)
@@ -14,7 +14,7 @@ class XmlJs extends MediaWikiTestCase {
                $this->assertEquals( $value, $obj->value );
        }
 
-       public function provideConstruction(){
+       public function provideConstruction() {
                return array(
                        array( null ),
                        array( '' ),
index 7521dcf..8fe08e1 100644 (file)
@@ -212,7 +212,7 @@ class ApiEditPageTest extends ApiTestCase {
                        'text' => "==section 1==\nnew content 1",
                ) );
                $this->assertEquals( 'Success', $re['edit']['result'] );
-               $newtext = WikiPage::factory( Title::newFromText( $name) )->getContent( Revision::RAW )->getNativeData();
+               $newtext = WikiPage::factory( Title::newFromText( $name ) )->getContent( Revision::RAW )->getNativeData();
                $this->assertEquals( $newtext, "==section 1==\nnew content 1\n\n==section 2==\ncontent2" );
 
                // Test that we raise a 'nosuchsection' error
index 3168f32..6e5edbf 100644 (file)
@@ -10,7 +10,7 @@
 class ApiOptionsTest extends MediaWikiLangTestCase {
 
        /** @var PHPUnit_Framework_MockObject_MockObject */
-       private $mUserMock ;
+       private $mUserMock;
        /** @var ApiOptions */
        private $mTested;
        private $mSession;
index 43637c2..80d7ea6 100644 (file)
@@ -18,4 +18,4 @@ class ApiTestContext extends RequestContext {
 
                return $context;
        }
-}
\ No newline at end of file
+}
index 1540af5..b089894 100644 (file)
@@ -95,7 +95,6 @@ class ApiUploadTest extends ApiTestCaseUpload {
                $this->assertTrue( $exception, "Got exception" );
        }
 
-
        /**
         * @depends testLogin
         */
@@ -147,7 +146,6 @@ class ApiUploadTest extends ApiTestCaseUpload {
                unlink( $filePath );
        }
 
-
        /**
         * @depends testLogin
         */
@@ -185,7 +183,6 @@ class ApiUploadTest extends ApiTestCaseUpload {
                unlink( $filePath );
        }
 
-
        /**
         * @depends testLogin
         */
@@ -257,7 +254,6 @@ class ApiUploadTest extends ApiTestCaseUpload {
                unlink( $filePaths[1] );
        }
 
-
        /**
         * @depends testLogin
         */
index 3686048..d94aa2c 100644 (file)
@@ -17,4 +17,4 @@ class MockApi extends ApiBase {
                        'sessionkey' => null,
                );
        }
-}
\ No newline at end of file
+}
index 59756b2..13b751b 100644 (file)
@@ -66,7 +66,6 @@ class RandomImageGenerator {
                )
        );
 
-
        public function __construct( $options = array() ) {
                foreach ( array( 'dictionaryFile', 'minWidth', 'minHeight', 'maxWidth', 'maxHeight', 'shapesToDraw' ) as $property ) {
                        if ( isset( $options[$property] ) ) {
@@ -112,7 +111,6 @@ class RandomImageGenerator {
                return $filenames;
        }
 
-
        /**
         * Figure out how we write images. This is a factor of both format and the local system
         * @param $format (a typical extension like 'svg', 'jpg', etc.)
@@ -159,7 +157,6 @@ class RandomImageGenerator {
                return $filenames;
        }
 
-
        /**
         * Generate data representing an image of random size (within limits),
         * consisting of randomly colored and sized upward pointing triangles against a random background color
@@ -355,7 +352,6 @@ class RandomImageGenerator {
                );
        }
 
-
        /**
         * Based on an image specification, write such an image to disk, using the command line ImageMagick program ('convert').
         *
index 3262e6c..f8da0ff 100644 (file)
@@ -22,4 +22,4 @@ class UserWrapper {
                }
                $this->user->saveSettings();
        }
-}
\ No newline at end of file
+}
diff --git a/tests/phpunit/includes/changes/RecentChangeTest.php b/tests/phpunit/includes/changes/RecentChangeTest.php
new file mode 100644 (file)
index 0000000..cfa3e77
--- /dev/null
@@ -0,0 +1,280 @@
+<?php
+/**
+ * @group Database
+ */
+class RecentChangeTest extends MediaWikiTestCase {
+       protected $title;
+       protected $target;
+       protected $user;
+       protected $user_comment;
+       protected $context;
+
+       public function __construct() {
+               parent::__construct();
+
+               $this->title = Title::newFromText( 'SomeTitle' );
+               $this->target = Title::newFromText( 'TestTarget' );
+               $this->user = User::newFromName( 'UserName' );
+
+               $this->user_comment = '<User comment about action>';
+               $this->context = RequestContext::newExtraneousContext( $this->title );
+       }
+
+       /**
+        * The testIrcMsgForAction* tests are supposed to cover the hacky
+        * LogFormatter::getIRCActionText / bug 34508
+        *
+        * Third parties bots listen to those messages. They are clever enough
+        * to fetch the i18n messages from the wiki and then analyze the IRC feed
+        * to reverse engineer the $1, $2 messages.
+        * One thing bots can not detect is when MediaWiki change the meaning of
+        * a message like what happened when we deployed 1.19. $1 became the user
+        * performing the action which broke basically all bots around.
+        *
+        * Should cover the following log actions (which are most commonly used by bots):
+        * - block/block
+        * - block/unblock
+        * - delete/delete
+        * - delete/restore
+        * - newusers/create
+        * - newusers/create2
+        * - newusers/autocreate
+        * - move/move
+        * - move/move_redir
+        * - protect/protect
+        * - protect/modifyprotect
+        * - protect/unprotect
+        * - upload/upload
+        *
+        * As well as the following Auto Edit Summaries:
+        * - blank
+        * - replace
+        * - rollback
+        * - undo
+        */
+
+       /**
+        * @covers LogFormatter::getIRCActionText
+        */
+       public function testIrcMsgForLogTypeBlock() {
+               $sep = $this->context->msg( 'colon-separator' )->text();
+
+               # block/block
+               $this->assertIRCComment(
+                       $this->context->msg( 'blocklogentry', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+                       'block', 'block',
+                       array(),
+                       $this->user_comment
+               );
+               # block/unblock
+               $this->assertIRCComment(
+                       $this->context->msg( 'unblocklogentry', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+                       'block', 'unblock',
+                       array(),
+                       $this->user_comment
+               );
+       }
+
+       /**
+        * @covers LogFormatter::getIRCActionText
+        */
+       public function testIrcMsgForLogTypeDelete() {
+               $sep = $this->context->msg( 'colon-separator' )->text();
+
+               # delete/delete
+               $this->assertIRCComment(
+                       $this->context->msg( 'deletedarticle', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+                       'delete', 'delete',
+                       array(),
+                       $this->user_comment
+               );
+
+               # delete/restore
+               $this->assertIRCComment(
+                       $this->context->msg( 'undeletedarticle', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+                       'delete', 'restore',
+                       array(),
+                       $this->user_comment
+               );
+       }
+
+       /**
+        * @covers LogFormatter::getIRCActionText
+        */
+       public function testIrcMsgForLogTypeNewusers() {
+               $this->assertIRCComment(
+                       'New user account',
+                       'newusers', 'newusers',
+                       array()
+               );
+               $this->assertIRCComment(
+                       'New user account',
+                       'newusers', 'create',
+                       array()
+               );
+               $this->assertIRCComment(
+                       'created new account SomeTitle',
+                       'newusers', 'create2',
+                       array()
+               );
+               $this->assertIRCComment(
+                       'Account created automatically',
+                       'newusers', 'autocreate',
+                       array()
+               );
+       }
+
+       /**
+        * @covers LogFormatter::getIRCActionText
+        */
+       public function testIrcMsgForLogTypeMove() {
+               $move_params = array(
+                       '4::target' => $this->target->getPrefixedText(),
+                       '5::noredir' => 0,
+               );
+               $sep = $this->context->msg( 'colon-separator' )->text();
+
+               # move/move
+               $this->assertIRCComment(
+                       $this->context->msg( '1movedto2', 'SomeTitle', 'TestTarget' )->plain() . $sep . $this->user_comment,
+                       'move', 'move',
+                       $move_params,
+                       $this->user_comment
+               );
+
+               # move/move_redir
+               $this->assertIRCComment(
+                       $this->context->msg( '1movedto2_redir', 'SomeTitle', 'TestTarget' )->plain() . $sep . $this->user_comment,
+                       'move', 'move_redir',
+                       $move_params,
+                       $this->user_comment
+               );
+       }
+
+       /**
+        * @covers LogFormatter::getIRCActionText
+        */
+       public function testIrcMsgForLogTypePatrol() {
+               # patrol/patrol
+               $this->assertIRCComment(
+                       $this->context->msg( 'patrol-log-line', 'revision 777', '[[SomeTitle]]', '' )->plain(),
+                       'patrol', 'patrol',
+                       array(
+                               '4::curid' => '777',
+                               '5::previd' => '666',
+                               '6::auto' => 0,
+                       )
+               );
+       }
+
+       /**
+        * @covers LogFormatter::getIRCActionText
+        */
+       public function testIrcMsgForLogTypeProtect() {
+               $protectParams = array(
+                       '[edit=sysop] (indefinite) ‎[move=sysop] (indefinite)'
+               );
+               $sep = $this->context->msg( 'colon-separator' )->text();
+
+               # protect/protect
+               $this->assertIRCComment(
+                       $this->context->msg( 'protectedarticle', 'SomeTitle ' . $protectParams[0] )->plain() . $sep . $this->user_comment,
+                       'protect', 'protect',
+                       $protectParams,
+                       $this->user_comment
+               );
+
+               # protect/unprotect
+               $this->assertIRCComment(
+                       $this->context->msg( 'unprotectedarticle', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+                       'protect', 'unprotect',
+                       array(),
+                       $this->user_comment
+               );
+
+               # protect/modify
+               $this->assertIRCComment(
+                       $this->context->msg( 'modifiedarticleprotection', 'SomeTitle ' . $protectParams[0] )->plain() . $sep . $this->user_comment,
+                       'protect', 'modify',
+                       $protectParams,
+                       $this->user_comment
+               );
+       }
+
+       /**
+        * @covers LogFormatter::getIRCActionText
+        */
+       public function testIrcMsgForLogTypeUpload() {
+               $sep = $this->context->msg( 'colon-separator' )->text();
+
+               # upload/upload
+               $this->assertIRCComment(
+                       $this->context->msg( 'uploadedimage', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+                       'upload', 'upload',
+                       array(),
+                       $this->user_comment
+               );
+
+               # upload/overwrite
+               $this->assertIRCComment(
+                       $this->context->msg( 'overwroteimage', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+                       'upload', 'overwrite',
+                       array(),
+                       $this->user_comment
+               );
+       }
+
+       /**
+        * @todo Emulate these edits somehow and extract
+        * raw edit summary from RecentChange object
+        * --
+        */
+       /*
+       public function testIrcMsgForBlankingAES() {
+               // $this->context->msg( 'autosumm-blank', .. );
+       }
+
+       public function testIrcMsgForReplaceAES() {
+               // $this->context->msg( 'autosumm-replace', .. );
+       }
+
+       public function testIrcMsgForRollbackAES() {
+               // $this->context->msg( 'revertpage', .. );
+       }
+
+       public function testIrcMsgForUndoAES() {
+               // $this->context->msg( 'undo-summary', .. );
+       }
+       */
+
+       /**
+        * @param $expected String Expected IRC text without colors codes
+        * @param $type String Log type (move, delete, suppress, patrol ...)
+        * @param $action String A log type action
+        * @param $params
+        * @param $comment String (optional) A comment for the log action
+        * @param $msg String (optional) A message for PHPUnit :-)
+        */
+       protected function assertIRCComment( $expected, $type, $action, $params, $comment = null, $msg = '' ) {
+
+               $logEntry = new ManualLogEntry( $type, $action );
+               $logEntry->setPerformer( $this->user );
+               $logEntry->setTarget( $this->title );
+               if ( $comment !== null ) {
+                       $logEntry->setComment( $comment );
+               }
+               $logEntry->setParameters( $params );
+
+               $formatter = LogFormatter::newFromEntry( $logEntry );
+               $formatter->setContext( $this->context );
+
+               // Apply the same transformation as done in IRCColourfulRCFeedFormatter::getLine for rc_comment
+               $ircRcComment = IRCColourfulRCFeedFormatter::cleanupForIRC( $formatter->getIRCActionComment() );
+
+               $this->assertEquals(
+                       $expected,
+                       $ircRcComment,
+                       $msg
+               );
+       }
+}
index 75a7278..7c62dca 100644 (file)
@@ -79,6 +79,8 @@ class WikitextContentHandlerTest extends MediaWikiLangTestCase {
                global $wgContLang;
                $wgContLang->resetNamespaces();
 
+               MagicWord::clearCache();
+
                if ( is_string( $title ) ) {
                        $title = Title::newFromText( $title );
                }
index 10a9227..16dac94 100644 (file)
@@ -37,6 +37,7 @@ class FakeDatabaseMysqlBase extends DatabaseMysqlBase {
 
        // From DatabaseMysql
        protected function mysqlConnect( $realServer ) {}
+       protected function mysqlSetCharset( $charset ) {}
        protected function mysqlFreeResult( $res ) {}
        protected function mysqlFetchObject( $res ) {}
        protected function mysqlFetchArray( $res ) {}
@@ -64,10 +65,9 @@ class DatabaseMysqlBaseTest extends MediaWikiTestCase {
        public function testAddIdentifierQuotes( $expected, $in ) {
                $db = new FakeDatabaseMysqlBase();
                $quoted = $db->addIdentifierQuotes( $in );
-               $this->assertEquals($expected, $quoted);
+               $this->assertEquals( $expected, $quoted );
        }
 
-
        /**
         * Feeds testAddIdentifierQuotes
         *
@@ -120,7 +120,7 @@ class DatabaseMysqlBaseTest extends MediaWikiTestCase {
                );
        }
 
-       private static function createUnicodeString($str) {
+       private static function createUnicodeString( $str ) {
                return json_decode( '"' . $str . '"' );
        }
 
@@ -155,9 +155,9 @@ class DatabaseMysqlBaseTest extends MediaWikiTestCase {
                $db = $this->getMockForViews();
 
                // The first call populate an internal cache of views
-               $this->assertEquals( array( 'view1', 'view2', 'myview'),
+               $this->assertEquals( array( 'view1', 'view2', 'myview' ),
                        $db->listViews() );
-               $this->assertEquals( array( 'view1', 'view2', 'myview'),
+               $this->assertEquals( array( 'view1', 'view2', 'myview' ),
                        $db->listViews() );
 
                // Prefix filtering
@@ -167,7 +167,7 @@ class DatabaseMysqlBaseTest extends MediaWikiTestCase {
                        $db->listViews( 'my' ) );
                $this->assertEquals( array(),
                        $db->listViews( 'UNUSED_PREFIX' ) );
-               $this->assertEquals( array( 'view1', 'view2', 'myview'),
+               $this->assertEquals( array( 'view1', 'view2', 'myview' ),
                        $db->listViews( '' ) );
        }
 
@@ -178,7 +178,7 @@ class DatabaseMysqlBaseTest extends MediaWikiTestCase {
        function testIsView( $isView, $viewName ) {
                $db = $this->getMockForViews();
 
-               switch( $isView ) {
+               switch ( $isView ) {
                        case true:
                                $this->assertTrue( $db->isView( $viewName ),
                                        "$viewName should be considered a view" );
index 301fc99..35a8e4c 100644 (file)
@@ -109,7 +109,7 @@ class DatabaseTest extends MediaWikiTestCase {
                }
 
                if ( $this->db->getType() === 'oracle' ) {
-                       return strtoupper($database . $quote . $prefix . $table);
+                       return strtoupper( $database . $quote . $prefix . $table );
                } else {
                        return $database . $quote . $prefix . $table . $quote;
                }
index df73000..91399be 100644 (file)
@@ -2,7 +2,6 @@
 
 class MWDebugTest extends MediaWikiTestCase {
 
-
        protected function setUp() {
                parent::setUp();
                // Make sure MWDebug class is enabled
index 738121a..5c3f36a 100644 (file)
@@ -47,7 +47,7 @@ class DifferenceEngineTest extends MediaWikiTestCase {
                $strings = array( "it is a kitten", "two kittens", "three kittens", "four kittens" );
                $revisions = array();
 
-               foreach( $strings as $string ) {
+               foreach ( $strings as $string ) {
                        $content = ContentHandler::makeContent( $string, $title );
                        $page->doEditContent( $content, 'edit page' );
                        $revisions[] = $page->getLatest();
@@ -59,7 +59,7 @@ class DifferenceEngineTest extends MediaWikiTestCase {
        public function testMapDiffPrevNext() {
                $cases = $this->getMapDiffPrevNextCases();
 
-               foreach( $cases as $case ) {
+               foreach ( $cases as $case ) {
                        list( $expected, $old, $new, $message ) = $case;
 
                        $diffEngine = new DifferenceEngine( $this->context, $old, $new, 2, true, false );
@@ -81,7 +81,7 @@ class DifferenceEngineTest extends MediaWikiTestCase {
        public function testLoadRevisionData() {
                $cases = $this->getLoadRevisionDataCases();
 
-               foreach( $cases as $case ) {
+               foreach ( $cases as $case ) {
                        list( $expectedOld, $expectedNew, $old, $new, $message ) = $case;
 
                        $diffEngine = new DifferenceEngine( $this->context, $old, $new, 2, true, false );
index 64276d9..f4f4154 100644 (file)
@@ -210,7 +210,6 @@ class ExifRotationTest extends MediaWikiTestCase {
                );
        }
 
-
        const TEST_WIDTH = 100;
        const TEST_HEIGHT = 200;
 
index 4cd2e8e..667c078 100644 (file)
@@ -16,8 +16,6 @@ class ExifTest extends MediaWikiTestCase {
 
                $this->mediaPath = __DIR__ . '/../../data/media/';
 
-
-
                $this->setMwGlobals( 'wgShowEXIF', true );
        }
 
index 7926000..7bc785e 100644 (file)
@@ -25,4 +25,4 @@ class FakeDimensionFile extends File {
        public function getPath() {
                return '';
        }
-}
\ No newline at end of file
+}
index 6ff928e..a4f71db 100644 (file)
@@ -65,20 +65,20 @@ class FormatMetadataTest extends MediaWikiTestCase {
 
        public static function provideFlattenArray() {
                return array(
-                       array (
-                               array(1 ,2 ,3), 'ul', false, false,
+                       array(
+                               array( 1, 2, 3 ), 'ul', false, false,
                                "<ul><li>1</li>\n<li>2</li>\n<li>3</li></ul>",
                        ),
-                       array (
-                               array(1 ,2 ,3), 'ol', false, false,
+                       array(
+                               array( 1, 2, 3 ), 'ol', false, false,
                                "<ol><li>1</li>\n<li>2</li>\n<li>3</li></ol>",
                        ),
-                       array (
-                               array(1 ,2 ,3), 'ul', true, false,
+                       array(
+                               array( 1, 2, 3 ), 'ul', true, false,
                                "\n*1\n*2\n*3",
                        ),
-                       array (
-                               array(1 ,2 ,3), 'ol', true, false,
+                       array(
+                               array( 1, 2, 3 ), 'ol', true, false,
                                "\n#1\n#2\n#3",
                        ),
                        // TODO: more test cases
index 6d1d681..7ffde3b 100644 (file)
@@ -80,7 +80,6 @@ class JpegMetadataExtractorTest extends MediaWikiTestCase {
                $this->assertEquals( $expected, $res['XMP'] );
        }
 
-
        public function testIPTCHashComparisionNoHash() {
                $segments = JpegMetadataExtractor::segmentSplitter( $this->filePath . 'jpeg-xmp-psir.jpg' );
                $res = JpegMetadataExtractor::doPSIR( $segments['PSIR'][0] );
index 5157228..bff64bb 100644 (file)
@@ -14,7 +14,6 @@ class JpegTest extends MediaWikiTestCase {
 
                $this->filePath = __DIR__ . '/../../data/media/';
 
-
                $this->setMwGlobals( 'wgShowEXIF', true );
 
                $this->backend = new FSFileBackend( array(
index 33a03a2..84deb1b 100644 (file)
@@ -121,7 +121,6 @@ class PNGMetadataExtractorTest extends MediaWikiTestCase {
                $this->assertEquals( 1, $meta['bitDepth'] );
        }
 
-
        public function testPngIndexColour() {
                $meta = PNGMetadataExtractor::getMetadata( $this->filePath .
                        'Png-native-test.png' );
index 57a88b9..d2ab4d3 100644 (file)
@@ -41,4 +41,4 @@ class TidyTest extends MediaWikiTestCase {
                        array( "<meta foo=\"bar\" />\nfoo", '<meta foo="bar"/>foo', '<meta> should survive tidy' ),
                );
        }
-}
\ No newline at end of file
+}
index 982b46b..4f17601 100644 (file)
@@ -26,7 +26,6 @@ class UploadBaseTest extends MediaWikiTestCase {
                parent::tearDown();
        }
 
-
        /**
         * First checks the return code
         * of UploadBase::getTitle() and then the actual returned title
index f0203d4..34ffb53 100644 (file)
@@ -67,7 +67,6 @@ class ZipDirectoryReaderTest extends MediaWikiTestCase {
                        'Wrong CD start disk error' );
        }
 
-
        public function testCentralDirectoryGap() {
                $this->readZipAssertError( 'cd-gap.zip', 'zip-bad',
                        'CD gap error' );
index ab4d4ab..f551248 100644 (file)
@@ -225,7 +225,6 @@ class LanguageSrTest extends LanguageClassesTestCase {
                $this->assertConverted( $text, 'sr-ec', $msg );
        }
 
-
        /** Wrapper for converter::convertTo() method*/
        protected function convertTo( $text, $variant ) {
                return $this->getLang()
index 78929e2..f1babf5 100644 (file)
@@ -241,6 +241,26 @@ class LanguageTest extends LanguageClassesTestCase {
                        $this->getLang()->truncate( "123456789", -5, 'XXXXXXXXXXXXXXX' ),
                        'truncate suffix, large ellipsis'
                );
+               $this->assertEquals(
+                       "123XXX",
+                       $this->getLang()->truncate( "123                ", 9, 'XXX' ),
+                       'truncate prefix, with spaces'
+               );
+               $this->assertEquals(
+                       "12345XXX",
+                       $this->getLang()->truncate( "12345            8", 11, 'XXX' ),
+                       'truncate prefix, with spaces and non-space ending'
+               );
+               $this->assertEquals(
+                       "XXX234",
+                       $this->getLang()->truncate( "1              234", -8, 'XXX' ),
+                       'truncate suffix, with spaces'
+               );
+               $this->assertEquals(
+                       "12345XXX",
+                       $this->getLang()->truncate( "1234567890", 5, 'XXX', false ),
+                       'truncate without adjustment'
+               );
        }
 
        /**
@@ -1114,7 +1134,6 @@ class LanguageTest extends LanguageClassesTestCase {
                );
        }
 
-
        /**
         * @dataProvider provideFormatDuration
         * @covers Language::formatDuration
index 13f57c1..8cd3a6a 100644 (file)
@@ -105,7 +105,6 @@ class LanguageUzTest extends LanguageClassesTestCase {
                $this->assertConverted( $text, 'uz-cyrl', $msg );
        }
 
-
        /** Wrapper for converter::convertTo() method*/
        protected function convertTo( $text, $variant ) {
                return $this->getLang()->mConverter->convertTo( $text, $variant );
index 7b3fb68..6abd09f 100644 (file)
@@ -26,7 +26,7 @@ class CLDRPluralRuleEvaluatorTest extends MediaWikiTestCase {
 
        function validTestCases() {
                $tests = array(
-                       # expected, number, rule, comment
+                       # expected, rule, number, comment
                        array( 0, 'n is 1', 1, 'integer number and is' ),
                        array( 0, 'n is 1', "1", 'string integer number and is' ),
                        array( 0, 'n is 1', 1.0, 'float number and is' ),
index 83d8c71..6950fa3 100644 (file)
@@ -48,7 +48,6 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
                throw new MWException( "Could not determine revision id (" . $status->getWikiText() . ")" );
        }
 
-
        /**
         * gunzips the given file and stores the result in the original file name
         *
@@ -110,7 +109,6 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
                }
        }
 
-
        /**
         * Step the current XML reader until node end of given name is found.
         *
@@ -230,7 +228,6 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
                }
        }
 
-
        /**
         * Asserts that the xml reader is at an element of given tag that contains a given text,
         * and skips over the element.
index 83d7701..2a5bd5f 100644 (file)
@@ -111,7 +111,6 @@ class MaintenanceFixup extends Maintenance {
                $this->testCase = $testCase;
        }
 
-
        // --- Making protected functions visible for test
 
        public function output( $out, $channel = null ) {
@@ -122,7 +121,6 @@ class MaintenanceFixup extends Maintenance {
                return call_user_func_array( array( "parent", __FUNCTION__ ), func_get_args() );
        }
 
-
        // --- Requirements for getting instance of abstract class
 
        public function execute() {
@@ -135,7 +133,6 @@ class MaintenanceFixup extends Maintenance {
  */
 class MaintenanceTest extends MediaWikiTestCase {
 
-
        /**
         * The main Maintenance instance that is used for testing.
         *
@@ -143,7 +140,6 @@ class MaintenanceTest extends MediaWikiTestCase {
         */
        private $m;
 
-
        protected function setUp() {
                parent::setUp();
                $this->m = new MaintenanceFixup( $this );
@@ -157,7 +153,6 @@ class MaintenanceTest extends MediaWikiTestCase {
                parent::tearDown();
        }
 
-
        /**
         * asserts the output before and after simulating shutdown
         *
@@ -182,7 +177,6 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->expectOutputString( $postShutdownOutput );
        }
 
-
        // Although the following tests do not seem to be too consistent (compare for
        // example the newlines within the test.*StringString tests, or the
        // test.*Intermittent.* tests), the objective of these tests is not to describe
index 0f36bc4..adf026c 100644 (file)
@@ -137,7 +137,6 @@ class BaseDumpTest extends MediaWikiTestCase {
                $this->assertPrefetchEquals( "BackupDumperTestP2Text1", 2, 2 );
        }
 
-
        /**
         * Constructs a temporary file that can be used for prefetching
         *
index 15a928e..8a297b1 100644 (file)
@@ -418,7 +418,6 @@ class TextPassDumperTest extends DumpTestCase {
                $this->checkpointHelper( "gzip" );
        }
 
-
        /**
         * Creates a stub file that is used for testing the text pass of dumps
         *
index 438281d..5640b8d 100644 (file)
@@ -8,7 +8,6 @@
  */
 class BackupDumperLoggerTest extends DumpTestCase {
 
-
        // We'll add several log entries and users for this test. The following
        // variables hold the corresponding ids.
        private $userId1, $userId2;
@@ -85,7 +84,6 @@ class BackupDumperLoggerTest extends DumpTestCase {
                }
        }
 
-
        /**
         * asserts that the xml reader is at the beginning of a log entry and skips over
         * it while analyzing it.
index c6094d9..6963601 100644 (file)
@@ -272,7 +272,6 @@ class BackupDumperPageTest extends DumpTestCase {
                $this->assertDumpEnd();
        }
 
-
        function testXmlDumpsBackupUseCase() {
                // xmldumps-backup typically performs a single dump that that writes
                // out three files
index 42792d5..dd80840 100644 (file)
@@ -25,7 +25,6 @@ class SemiMockedFetchText extends FetchText {
         */
        private $mockInvocations = array( 'getStdin' => 0 );
 
-
        /**
         * Data for the fake stdin
         *
@@ -82,7 +81,6 @@ class FetchTextTest extends MediaWikiTestCase {
        private $textId4;
        private $textId5;
 
-
        /**
         * @var Exception|null As the current MediaWikiTestCase::run is not
         * robust enough to recover from thrown exceptions directly, we cannot
@@ -119,7 +117,6 @@ class FetchTextTest extends MediaWikiTestCase {
                throw new MWException( "Could not determine text id" );
        }
 
-
        function addDBData() {
                $this->tablesUsed[] = 'page';
                $this->tablesUsed[] = 'revision';
@@ -145,7 +142,6 @@ class FetchTextTest extends MediaWikiTestCase {
                }
        }
 
-
        protected function setUp() {
                parent::setUp();
 
@@ -157,7 +153,6 @@ class FetchTextTest extends MediaWikiTestCase {
                $this->fetchText = new SemiMockedFetchText();
        }
 
-
        /**
         * Helper to relate FetchText's input and output
         */
@@ -170,7 +165,6 @@ class FetchTextTest extends MediaWikiTestCase {
                $this->expectOutputString( $expectedOutput );
        }
 
-
        // Instead of the following functions, a data provider would be great.
        // However, as data providers are evaluated /before/ addDBData, a data
        // provider would not know the required ids.
index 742b41e..38cacf9 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Fake handler for images.
+ * Fake handler for Bitmap images.
  *
  * 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
@@ -25,68 +25,8 @@ class MockBitmapHandler extends BitmapHandler {
        function doTransform( $image, $dstPath, $dstUrl, $params, $flags = 0 ) {
                return MockImageHandler::doFakeTransform( $this, $image, $dstPath, $dstUrl, $params, $flags );
        }
+
        function doClientImage( $image, $scalerParams ) {
                        return $this->getClientScalingThumbnailImage( $image, $scalerParams );
        }
 }
-class MockSvgHandler extends SvgHandler {
-       function doTransform( $image, $dstPath, $dstUrl, $params, $flags = 0 ) {
-               return MockImageHandler::doFakeTransform( $this, $image, $dstPath, $dstUrl, $params, $flags );
-       }
-}
-/**
- * Mock handler for images.
- *
- * This is really intended for unit testing.
- *
- * @ingroup Media
- */
-class MockImageHandler {
-
-       /**
-        * Override BitmapHandler::doTransform() making sure we do not generate
-        * a thumbnail at all. That is merely returning a ThumbnailImage that
-        * will be consumed by the unit test.  There is no need to create a real
-        * thumbnail on the filesystem.
-        */
-       static function doFakeTransform( $that, $image, $dstPath, $dstUrl, $params, $flags = 0 ) {
-               # Example of what we receive:
-               # $image: LocalFile
-               # $dstPath: /tmp/transform_7d0a7a2f1a09-1.jpg
-               # $dstUrl : http://example.com/images/thumb/0/09/Bad.jpg/320px-Bad.jpg
-               # $params:  width: 320,  descriptionUrl http://trunk.dev/wiki/File:Bad.jpg
-
-               $that->normaliseParams( $image, $params );
-
-               $scalerParams = array(
-                       # The size to which the image will be resized
-                       'physicalWidth' => $params['physicalWidth'],
-                       'physicalHeight' => $params['physicalHeight'],
-                       'physicalDimensions' => "{$params['physicalWidth']}x{$params['physicalHeight']}",
-                       # The size of the image on the page
-                       'clientWidth' => $params['width'],
-                       'clientHeight' => $params['height'],
-                       # Comment as will be added to the EXIF of the thumbnail
-                       'comment' => isset( $params['descriptionUrl'] ) ?
-                       "File source: {$params['descriptionUrl']}" : '',
-                       # Properties of the original image
-                       'srcWidth' => $image->getWidth(),
-                       'srcHeight' => $image->getHeight(),
-                       'mimeType' => $image->getMimeType(),
-                       'dstPath' => $dstPath,
-                       'dstUrl' => $dstUrl,
-               );
-
-               # In some cases, we do not bother generating a thumbnail.
-               if ( !$image->mustRender() &&
-                       $scalerParams['physicalWidth'] == $scalerParams['srcWidth']
-                       && $scalerParams['physicalHeight'] == $scalerParams['srcHeight']
-               ) {
-                       wfDebug( __METHOD__ . ": returning unscaled image\n" );
-                       // getClientScalingThumbnailImage is protected
-                       return $that->doClientImage( $image, $scalerParams );
-               }
-
-               return new ThumbnailImage( $image, $dstUrl, false, $params );
-       }
-}
diff --git a/tests/phpunit/mocks/media/MockImageHandler.php b/tests/phpunit/mocks/media/MockImageHandler.php
new file mode 100644 (file)
index 0000000..b2f7fac
--- /dev/null
@@ -0,0 +1,79 @@
+<?php
+/**
+ * Fake handler for images.
+ *
+ * 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 Media
+ */
+
+/**
+ * Mock handler for images.
+ *
+ * This is really intended for unit testing.
+ *
+ * @ingroup Media
+ */
+class MockImageHandler {
+
+       /**
+        * Override BitmapHandler::doTransform() making sure we do not generate
+        * a thumbnail at all. That is merely returning a ThumbnailImage that
+        * will be consumed by the unit test.  There is no need to create a real
+        * thumbnail on the filesystem.
+        */
+       static function doFakeTransform( $that, $image, $dstPath, $dstUrl, $params, $flags = 0 ) {
+               # Example of what we receive:
+               # $image: LocalFile
+               # $dstPath: /tmp/transform_7d0a7a2f1a09-1.jpg
+               # $dstUrl : http://example.com/images/thumb/0/09/Bad.jpg/320px-Bad.jpg
+               # $params:  width: 320,  descriptionUrl http://trunk.dev/wiki/File:Bad.jpg
+
+               $that->normaliseParams( $image, $params );
+
+               $scalerParams = array(
+                       # The size to which the image will be resized
+                       'physicalWidth' => $params['physicalWidth'],
+                       'physicalHeight' => $params['physicalHeight'],
+                       'physicalDimensions' => "{$params['physicalWidth']}x{$params['physicalHeight']}",
+                       # The size of the image on the page
+                       'clientWidth' => $params['width'],
+                       'clientHeight' => $params['height'],
+                       # Comment as will be added to the EXIF of the thumbnail
+                       'comment' => isset( $params['descriptionUrl'] ) ?
+                                       "File source: {$params['descriptionUrl']}" : '',
+                       # Properties of the original image
+                       'srcWidth' => $image->getWidth(),
+                       'srcHeight' => $image->getHeight(),
+                       'mimeType' => $image->getMimeType(),
+                       'dstPath' => $dstPath,
+                       'dstUrl' => $dstUrl,
+               );
+
+               # In some cases, we do not bother generating a thumbnail.
+               if ( !$image->mustRender() &&
+                       $scalerParams['physicalWidth'] == $scalerParams['srcWidth']
+                       && $scalerParams['physicalHeight'] == $scalerParams['srcHeight']
+               ) {
+                       wfDebug( __METHOD__ . ": returning unscaled image\n" );
+                       // getClientScalingThumbnailImage is protected
+                       return $that->doClientImage( $image, $scalerParams );
+               }
+
+               return new ThumbnailImage( $image, $dstUrl, false, $params );
+       }
+}
diff --git a/tests/phpunit/mocks/media/MockSvgHandler.php b/tests/phpunit/mocks/media/MockSvgHandler.php
new file mode 100644 (file)
index 0000000..21520c4
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Fake handler for SVG images.
+ *
+ * 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 Media
+ */
+
+class MockSvgHandler extends SvgHandler {
+       function doTransform( $image, $dstPath, $dstUrl, $params, $flags = 0 ) {
+               return MockImageHandler::doFakeTransform( $this, $image, $dstPath, $dstUrl, $params, $flags );
+       }
+}
index 1d65e52..401b8a8 100755 (executable)
@@ -49,7 +49,7 @@ class PHPUnitMaintClass extends Maintenance {
                // Assume UTC for testing purposes
                $wgLocaltimezone = 'UTC';
 
-               $wgLocalisationCacheConf['storeClass'] = 'LCStore_Null';
+               $wgLocalisationCacheConf['storeClass'] = 'LCStoreNull';
 
                // Bug 44192 Do not attempt to send a real e-mail
                Hooks::clear( 'AlternateUserMailer' );
index a385320..fc06ee4 100644 (file)
@@ -144,7 +144,6 @@ class SideBarTest extends MediaWikiLangTestCase {
                );
        }
 
-
        #### Attributes for external links ##########################
        private function getAttribs() {
                # Sidebar text we will use everytime
index 733368d..d8b90d5 100644 (file)
@@ -90,6 +90,6 @@ class AutoLoaderTest extends MediaWikiTestCase {
                $dummyCereal = 'O:29:"testautoloadedserializedclass":0:{}';
                $uncerealized = unserialize( $dummyCereal );
                $this->assertFalse( $uncerealized instanceof __PHP_Incomplete_Class,
-                       "unserialize() can load classes case-insensitively.");
+                       "unserialize() can load classes case-insensitively." );
        }
 }
index 746cb70..cce1b7e 100644 (file)
@@ -193,7 +193,6 @@ class ResourcesTest extends MediaWikiTestCase {
                        }
                }
 
-
                return $cases;
        }
 }
index f0bb0fc..cb0bf69 100644 (file)
 
        } );
 
-       QUnit.test( 'getUrl', 2, function ( assert ) {
+       QUnit.test( 'getUrl', 3, function ( assert ) {
                var title;
 
                // Config
                mw.config.set( 'wgArticlePath', '/wiki/$1' );
 
                title = new mw.Title( 'Foobar' );
-               assert.equal( title.getUrl(), '/wiki/Foobar', 'Basic functionally, getUrl uses mw.util.getUrl' );
+               assert.equal( title.getUrl(), '/wiki/Foobar', 'Basic functionality, getUrl uses mw.util.getUrl' );
+               assert.equal( title.getUrl({ action: 'edit' }), '/wiki/Foobar?action=edit', 'Basic functionality, \'params\' parameter' );
 
                title = new mw.Title( 'John Doe', 3 );
                assert.equal( title.getUrl(), '/wiki/User_talk:John_Doe', 'Escaping in title and namespace for urls' );
        } );
 
-       QUnit.test( 'newFromImg', 36, function ( assert ) {
+       QUnit.test( 'newFromImg', 40, function ( assert ) {
                var title, i, thisCase, prefix,
                        cases = [
+                               {
+                                       url: '//upload.wikimedia.org/wikipedia/commons/thumb/b/bf/Princess_Alexandra_of_Denmark_%28later_Queen_Alexandra%2C_wife_of_Edward_VII%29_with_her_two_eldest_sons%2C_Prince_Albert_Victor_%28Eddy%29_and_George_Frederick_Ernest_Albert_%28later_George_V%29.jpg/939px-thumbnail.jpg',
+                                       typeOfUrl: 'Hashed thumb with shortened path',
+                                       nameText: 'Princess Alexandra of Denmark (later Queen Alexandra, wife of Edward VII) with her two eldest sons, Prince Albert Victor (Eddy) and George Frederick Ernest Albert (later George V)',
+                                       prefixedText: 'File:Princess Alexandra of Denmark (later Queen Alexandra, wife of Edward VII) with her two eldest sons, Prince Albert Victor (Eddy) and George Frederick Ernest Albert (later George V).jpg'
+                               },
                                {
                                        url: '/wiki/images/thumb/9/91/Anticlockwise_heliotrope%27s.jpg/99px-Anticlockwise_heliotrope%27s.jpg',
                                        typeOfUrl: 'Normal hashed directory thumbnail',
index be362e2..90cd546 100644 (file)
@@ -554,7 +554,7 @@ QUnit.test( 'formatnum', formatnumTests.length, function ( assert ) {
                                return;
                        }
                        mw.messages.set(test.message );
-                       mw.config.set( 'wgUserLanguage', test.lang ) ;
+                       mw.config.set( 'wgUserLanguage', test.lang );
                        var parser = new mw.jqueryMsg.parser( { language: langClass } );
                        assert.equal(
                                parser.parse( test.integer ? 'formatnum-msg-int' : 'formatnum-msg',
index 2be8044..9216f0a 100644 (file)
         * Previously, test elements where invisible to the selector since only
         * one element can have a given id.
         */
-       QUnit.test( 'addPortletLink', 11, function ( assert ) {
-               var pTestTb, pCustom, vectorTabs, tbRL, cuQuux, $cuQuux, tbMW, $tbMW, tbRLDM, caFoo, addedAfter;
+       QUnit.test( 'addPortletLink', 13, function ( assert ) {
+               var pTestTb, pCustom, vectorTabs, tbRL, cuQuux, $cuQuux, tbMW, $tbMW, tbRLDM, caFoo,
+                       addedAfter, tbRLDMnonexistentid, tbRLDMemptyjquery;
 
                pTestTb = '\
                <div class="portlet" id="p-test-tb">\
 
                addedAfter = mw.util.addPortletLink( 'p-test-tb', '#', 'After foo', 'post-foo', 'After foo', null, $( tbRL ) );
                assert.strictEqual( $( addedAfter ).next()[0], tbRL, 'Link is in the correct position (by passing a jQuery object as nextnode)' );
+
+               // test case - nonexistent id as next node
+               tbRLDMnonexistentid = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
+                       'Default modules', 't-rldm-nonexistent', 'List of all default modules ', 'd', '#t-rl-nonexistent' );
+
+               assert.equal( tbRLDMnonexistentid, $( '#p-test-tb li:last' )[0], 'Nonexistent id as nextnode adds the portlet at end' );
+
+               // test case - empty jquery object as next node
+               tbRLDMemptyjquery = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
+                       'Default modules', 't-rldm-empty-jquery', 'List of all default modules ', 'd', $( '#t-rl-nonexistent' ) );
+
+               assert.equal( tbRLDMemptyjquery, $( '#p-test-tb li:last' )[0], 'Empty jquery as nextnode adds the portlet at end' );
        } );
 
        QUnit.test( 'jsMessage', 1, function ( assert ) {
index 88e5885..f4433f4 100644 (file)
@@ -527,7 +527,6 @@ class TestFileIterator implements Iterator {
                return false;
        }
 
-
        /**
         * Clear section name and its data
         */
index 913adc1..ad5239e 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -107,6 +107,15 @@ function wfStreamThumb( array $params ) {
 
        $fileName = isset( $params['f'] ) ? $params['f'] : '';
 
+       // Backwards compatibility parameters
+       if ( isset( $params['w'] ) ) {
+               $params['width'] = $params['w'];
+               unset( $params['w'] );
+       }
+       if ( isset( $params['p'] ) ) {
+               $params['page'] = $params['p'];
+       }
+
        // Is this a thumb of an archived file?
        $isOld = ( isset( $params['archived'] ) && $params['archived'] );
        unset( $params['archived'] ); // handlers don't care
@@ -171,7 +180,6 @@ function wfStreamThumb( array $params ) {
                return;
        }
 
-
        // Check the source file storage path
        if ( !$img->exists() ) {
                $redirectedLocation = false;
@@ -235,18 +243,9 @@ function wfStreamThumb( array $params ) {
                }
        }
 
-       // Backwards compatibility parameters
-       if ( isset( $params['w'] ) ) {
-               $params['width'] = $params['w'];
-               unset( $params['w'] );
-       }
-       if ( isset( $params['p'] ) ) {
-               $params['page'] = $params['p'];
-       }
        unset( $params['r'] ); // ignore 'r' because we unconditionally pass File::RENDER
        unset( $params['f'] ); // We're done with 'f' parameter.
 
-
        // Get the normalized thumbnail name from the parameters...
        try {
                $thumbName = $img->thumbName( $params );